[
  {
    "path": ".github/validate-examples",
    "content": "#!/bin/bash\n\nset -ex\n\n#function datacontract() {\n#    docker run --rm -v \"${PWD}:/home/datacontract\" --platform linux/amd64 datacontract/cli:latest \"$@\"\n#}\n\ndatacontract --version\n\nSCHEMA=datacontract.schema.json\n\nawk '/^```yaml$/{flag=1; next} /^```$/{print \"\"; flag=0; exit} flag' README.md > datacontract-from-readme.yaml\ndatacontract lint datacontract-from-readme.yaml --schema $SCHEMA\ndatacontract test --examples datacontract-from-readme.yaml --schema $SCHEMA\n# Compare with example?\n\ndatacontract lint examples/orders-latest/datacontract.yaml --schema $SCHEMA\ndatacontract test --examples examples/orders-latest/datacontract.yaml --schema $SCHEMA\n\ndatacontract lint examples/orders-latest-nested/datacontract.yaml --schema $SCHEMA\ndatacontract test --examples examples/orders-latest-nested/datacontract.yaml --schema $SCHEMA || true # examples are not nested\n\ndatacontract lint examples/covid-cases/datacontract.yaml --schema $SCHEMA\ndatacontract test --examples examples/covid-cases/datacontract.yaml --schema $SCHEMA || true\n\n"
  },
  {
    "path": ".github/workflows/ci.yaml",
    "content": "on:\n  push:\n  pull_request:\n  workflow_call:\n\nname: CI\njobs:\n  test:\n    if: false # skip as the example structure has changed with v1.1.0\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: 3.11\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install datacontract-cli[all]\n          datacontract --version\n      - name: Validate examples\n        run: .github/validate-examples\n"
  },
  {
    "path": ".gitignore",
    "content": ".idea/\n*.bkp\ndatacontract.schema.openapi-format.*\n.soda/\ndatacontract-from-readme.yaml\n.duckdb/\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n\n## [1.2.1] - 2025-09-24\n\n### Added\n\n- Support for data quality metrics that align with ODCS 3.1\n\n### Changed\n- Replaced threshold operators mustBeGreaterThanOrEqualTo with mustBeGreaterOrEqualTo and mustBeLessThanOrEqualTo with mustBeLessOrEqualTo to align with ODCS 3.1, even if it feels wrong...\n\n## [1.2.0] - 2025-07-05\n\n### Added\n- Support for `models.additionalFields` to define if additional fields (columns) are allowed or not in the physical server ([#99](https://github.com/datacontract/datacontract-specification/pull/99))\n- Add `time` data type ([#123](https://github.com/datacontract/datacontract-specification/issues/123))\n- Added `variant` data type ([#113](https://github.com/datacontract/datacontract-specification/issues/113))\n- Added `json` data types ([#112](https://github.com/datacontract/datacontract-specification/issues/112))\n\n### Changed\n- `server.type` changed from enum to simple string to support custom types ([#107](https://github.com/datacontract/datacontract-specification/pull/107))\n\n## [1.1.0] - 2024-10-30\n\n### Added\n- Data quality on model and field level ([#55](https://github.com/datacontract/datacontract-specification/issues/55))\n- Lineage support ([#90](https://github.com/datacontract/datacontract-specification/issues/90))\n- Field and definition `examples` as array of any type, instead of `example` as a single value ([#29](https://github.com/datacontract/datacontract-specification/issues/29)\n- Support for server-specific data types as config map ([#63](https://github.com/datacontract/datacontract-specification/issues/63))\n- AWS Glue Catalog server support\n- sftp server support\n- info.status field\n- oracle server support\n- field.title attribute\n- model.title attribute\n- AWS Kinesis Data Streams server support\n- field.links attribute\n- Trino support\n- Field `type: map` support with properties `keys` and `values`\n- Definitions: `fields`, for type `object`, `record`, and `struct`\n- Field `field.primaryKey` (Replaces `field.primary`)\n- Field `model.primaryKey` to describe a composite primary key\n- Add Redshift server properties `clusterIdentifier`, `endpoint`, `host` and `port`.\n\n### Removed\n\n- `definitions.domain` removed (use a hierarchical structure instead)\n- `definitions.name` removed (use a hierarchical structure instead)\n- `quality` on top-level removed\n- `examples` on top-level removed\n- `schema` removed in favor of encoding any physical schema configuration in the `model` using the `config` map at the field level and supporting import/export ([#21](https://github.com/datacontract/datacontract-specification/issues/21)).\n\n### Deprecated\n\n- `field.primary` (use `field.primaryKey` instead)\n\n\n## [0.9.3] - 2024-03-06\n\n### Added\n\n- Service levels as a top level `servicelevels` element\n- pubsub server support\n- primary key and relationship support via `field.primary` and `field.references` attributes\n- databricks server support improved\n\n## [0.9.2] - 2024-01-04\n\n### Added\n\n- Format and validation attributes to fields in models and definitions\n- Postgres support\n- Databricks support\n\n## [0.9.1] - 2023-11-19\n\n### Added\n\n- A logical data model (#13), mainly to simplify editor support with a defined schema, easier to detect breaking changes, and better Databricks support.\n- Definitions (#14) for reusable semantic definitions within one data contract or across data contracts. \n\n### Removed\n\n- Property `info.dataProduct` as data products should define which data contracts they implement.\n- Property `info.outputPort` as data products should define which data contracts they implement.\n\nThose removals are not considered as breaking changes, as these attributes are now treated as specification extensions.\n\n## [0.9.0] - 2023-09-12\n\nFirst public release.\n"
  },
  {
    "path": "CNAME",
    "content": "datacontract-specification.com"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Data Mesh Architecture\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": "README.md",
    "content": "# Data Contract Specification \n\n<a href=\"https://github.com/datacontract/datacontract-specification\">\n    <img alt=\"Stars\" src=\"https://img.shields.io/github/stars/datacontract/datacontract-specification\" /></a>\n<a href=\"https://datacontract.com/slack\" rel=\"nofollow\"><img src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" alt=\"Slack Status\" data-canonical-src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" style=\"max-width: 100%;\"></a>\n\n\n> **Deprecation Notice**  \n> With the release of the [Open Data Contract Standard v3.1.0](https://github.com/bitol-io/open-data-contract-standard), we deprecate the Data Contract Specification in line with our commitment to focus on a single industry standard for data contracts. We have actively contributed to the Open Data Contract Standard in the TSC and will continue to support it.<br><br>\n> If you are using Data Contract Specification, we recommend [migrating to the Open Data Contract Standard](#migration) within the next few months.<br>\n> The Data Contract Specification will be supported in Data Contract CLI and Entropy Data until the end of 2026.\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers. \nThink of an API, but for data. \nA data contract is implemented by a data product or other data technologies, even legacy data warehouses. \nData contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets. \nIt is data platform neutral and can be used with any data platform, such as AWS S3, Google BigQuery, Azure, Databricks, and Snowflake. \nThe data contract specification is an open initiative to define a common data contract format. \nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\nIf you haven't adopted a YAML format yet, we recommend to start directly with the [Open Data Contract Standard](https://github.com/bitol-io/open-data-contract-standard). It’s considered the conceptual successor and comes highly recommended.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/). \nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted. \nThey make semantic and quality expectations explicit. \nThey are often created collaboratively in [workshops](./workshop.md) together with data providers and data consumers. \nLater in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\nThe specification comes along with the [Data Contract CLI](https://github.com/datacontract/datacontract-cli), an open-source tool to develop, validate, and enforce data contracts.\n\n> _Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties. \n> The term \"contract\" may be somewhat misleading, but it is how it is used by the industry. \n> The mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract. \n> Data usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nVersion\n---\n\n1.2.1([Changelog](CHANGELOG.md))\n\nExample\n---\n\nView in [Data Contract Catalog](https://datacontract.com/examples/index.html)\n\n```yaml\ndataContractSpecification: 1.2.1\nid: orders-latest\ninfo:\n  title: Orders Latest\n  version: 2.0.0\n  description: |\n    Successful customer orders in the webshop.\n    All orders since 2020-01-01.\n    Orders with their line items are in their current state (no history included).\n  owner: Checkout Team\n  status: active\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://datacontract-example-orders-latest/v2/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"One folder per model. One file per day.\"\n    roles:\n      - name: analyst_us\n        description: Access to the data for US region\n      - name: analyst_cn\n        description: Access to the data for China region\nterms:\n  usage: |\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: |\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  policies:\n    - name: privacy-policy\n      url: https://example.com/privacy-policy\n    - name: license\n      description: External data is licensed under agreement 1234.\n      url: https://example.com/license/1234\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n        primaryKey: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n        examples:\n          - \"2024-09-09T08:30:00Z\"\n        tags: [\"business-timestamp\"]\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n        examples:\n          - 9999\n        quality:\n          - type: sql\n            description: 95% of all order total values are expected to be between 10 and 499 EUR.\n            query: |\n              SELECT quantile_cont(order_total, 0.95) AS percentile_95\n              FROM orders\n            mustBeBetween: [1000, 49900]\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer.\n        type: text\n        format: email\n        required: true\n        pii: true\n        classification: sensitive\n        quality:\n          - type: text\n            description: The email address is not verified and may be invalid.\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: email_address\n      processed_timestamp:\n        description: The timestamp when the record was processed by the data platform.\n        type: timestamp\n        required: true\n        config:\n          jsonType: string\n          jsonFormat: date-time\n    quality:\n      - type: sql\n        description: The maximum duration between two orders should be less that 3600 seconds\n        query: |\n          SELECT MAX(duration) AS max_duration \n          FROM (\n            SELECT EXTRACT(EPOCH FROM (order_timestamp - LAG(order_timestamp) OVER (ORDER BY order_timestamp))) AS duration \n            FROM orders\n          )\n        mustBeLessThan: 3600\n      - type: sql\n        description: Row Count\n        query: |\n          SELECT count(*) as row_count\n          FROM orders\n        mustBeGreaterThan: 5\n    examples:\n      - |\n        order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n        \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      line_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n      order_id:\n        $ref: '#/definitions/order_id'\n        references: orders.order_id\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\n    primaryKey: [\"order_id\", \"line_item_id\"]\n    examples:\n      - |\n        line_item_id,order_id,sku\n        \"LI-1\",\"1001\",\"5901234123457\"\n        \"LI-2\",\"1001\",\"4001234567890\"\n        \"LI-3\",\"1002\",\"5901234123457\"\n        \"LI-4\",\"1002\",\"2001234567893\"\n        \"LI-5\",\"1003\",\"4001234567890\"\n        \"LI-6\",\"1003\",\"5001234567892\"\n        \"LI-7\",\"1004\",\"5901234123457\"\n        \"LI-8\",\"1005\",\"2001234567893\"\n        \"LI-9\",\"1005\",\"5001234567892\"\n        \"LI-10\",\"1005\",\"6001234567891\"\ndefinitions:\n  order_id:\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    examples:\n      - 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n    tags:\n      - orders\n  sku:\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    examples:\n      - \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article.\n      It is typically associated with an article's barcode, such as the EAN/GTIN.\n    links:\n      wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n    tags:\n      - inventory\nservicelevels:\n  availability:\n    description: The server is available during support hours\n    percentage: 99.9%\n  retention:\n    description: Data is retained for one year\n    period: P1Y\n    unlimited: false\n  latency:\n    description: Data is available within 25 hours after the order was placed\n    threshold: 25h\n    sourceTimestampField: orders.order_timestamp\n    processedTimestampField: orders.processed_timestamp\n  freshness:\n    description: The age of the youngest row in a table.\n    threshold: 25h\n    timestampField: orders.order_timestamp\n  frequency:\n    description: Data is delivered once a day\n    type: batch # or streaming\n    interval: daily # for batch, either or cron\n    cron: 0 0 * * * # for batch, either or interval\n  support:\n    description: The data is available during typical business hours at headquarters\n    time: 9am to 5pm in EST on business days\n    responseTime: 1h\n  backup:\n    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n    interval: weekly\n    cron: 0 0 * * 0\n    recoveryTime: 24 hours\n    recoveryPoint: 1 week\ntags:\n  - checkout\n  - orders\n  - s3\nlinks:\n  datacontractCli: https://cli.datacontract.com\n```\n\nMigration\n---\n\nTo migrate from Data Contract Specification to the Open Data Contract Specification, you can use the [Data Contract CLI](https://github.com/datacontract/datacontract-cli):\n\n```\nuv tool install --python python3.11 --upgrade 'datacontract-cli[all]'\ndatacontract export --format odcs --output odcs.yaml datacontract.yaml\n```\n\nYou can now continue to work with _odcs.yaml_ file.\n\n\n\n\nData Contract CLI\n---\n\nThe [Data Contract CLI](https://cli.datacontract.com) is a command line tool and Python library to lint, test, import and export data contracts (supporting Data Contract Specification and ODCS).\n\nHere is a short example of how to verify that your actual dataset matches the data contract: \n\n```bash\npip3 install \"datacontract-cli[all]\"\ndatacontract test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nor, if you prefer Docker:\n```bash\ndocker run datacontract/cli test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nThe Data Contract contains all required information to verify data: \n\n- The _servers_ block has the connection details to the actual data set.\n- The _models_ define the syntax, formats, and constraints. \n- The _quality_ defined further quality checks.\n\nThe Data Contract CLI chooses the appropriate engine, formulates test cases, connects to the server, and executes the tests, based on the server type.\n\nMore information and configuration options on [cli.datacontract.com](https://cli.datacontract.com).\n\n\n\nSpecification\n---\n\n![The eight major categories in the data contract specification](images/categories.png)\n\n- [Data Contract Object](#data-contract-object)\n- [Info Object](#info-object)\n- [Contact Object](#contact-object)\n- [Server Object](#server-object)\n- [Terms Object](#terms-object)\n- [Model Object](#model-object)\n- [Field Object](#field-object)\n- [Definition Object](#definition-object)\n- [Service Level Object](#service-levels-object)\n- [Quality Object](#quality-object)\n- [Lineage Object](#lineage-object)\n- [Data Types](#data-types)\n- [Specification Extensions](#specification-extensions)\n\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                                                   | Description                                                                                                          |\n|---------------------------|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                                               | REQUIRED. Specifies the Data Contract Specification being used.                                                      |\n| id                        | `string`                                               | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number             |\n| info                      | [Info Object](#info-object)                            | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                                       |\n| servers                   | Map[`string`, [Server Object](#server-object)]         | Specifies the servers of the data contract.                                                                          |\n| terms                     | [Terms Object](#terms-object)                          | Specifies the terms and conditions of the data contract.                                                             |\n| models                    | Map[`string`, [Model Object](#model-object)]           | Specifies the logical data model.                                                                                    |\n| definitions               | Map[`string`, [Definition Object](#definition-object)] | Specifies definitions.                                                                                               |\n| servicelevels             | [Service Levels Object](#service-levels-object)        | Specifies the service level of the provided data                                                                     |\n| links                     | Map[`string`, `string`]                                | Additional external documentation links.                                                                             |\n| tags                      | Array of `string`                                      | Custom metadata to provide additional context.                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field       | Type                              | Description                                                                                                                                                      |\n|-------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title       | `string`                          | REQUIRED. The title of the data contract.                                                                                                                        |\n| version     | `string`                          | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| status      | `string`                          | The status of the data contract. Can be `proposed`, `in development`, `active`, `deprecated`, `retired`.                                                         |\n| description | `string`                          | A description of the data contract.                                                                                                                              |\n| owner       | `string`                          | The owner or team responsible for managing the data contract and providing the data.                                                                             |\n| contact     | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type                                               | Description                                                                                                                                                                                                                                                                                         |\n|-------------|----------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`                                           | REQUIRED. The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `clickhouse`, `s3`, `glue`, `redshift`, `azure`, `sqlserver`, `snowflake`, `databricks`, `postgres`, `oracle`, `kafka`, `pubsub`, `sftp`, `kinesis`, `trino`, `local` |\n| description | `string`                                           | An optional string describing the server.                                                                                                                                                                                                                                                           |\n| environment | `string`                                           | An optional string describing the environment, e.g., prod, sit, stg.                                                                                                                                                                                                                                |\n| roles       | Array of [Server Role Object](#server-role-object) | An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.                                                                                                                 |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `bigquery`            |\n| project | `string` | The GCP project name. |\n| dataset | `string` |                       |\n\n#### S3 Server Object\n\n| Field       | Type     | Description                                                                                                             |\n|-------------|----------|-------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | `s3`                                                                                                                    |\n| location    | `string` | S3 URL, starting with `s3://`                                                                                           |\n| endpointUrl | `string` | The server endpoint for S3-compatible servers, such as MioIO or Google Cloud Storage, e.g., `https://minio.example.com` |\n| format      | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                              |\n| delimiter   | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`        |\n\nExample (AWS S3):\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n    format: json\n    delimiter: new_line\n```\n\nExample (MinIO):\n\n```yaml\nservers:\n  minio:\n    type: s3\n    endpointUrl: http://localhost:9000\n    location: s3://my-bucket/path/\n    format: delta\n```\n\nExample (Google Cloud Storage):\n\n```yaml\nservers:\n  gcs:\n    type: s3\n    endpointUrl: https://storage.googleapis.com\n    location: s3://my-bucket/path/*/*/*/*/*.parquet\n    format: parquet\n```\n\n\n#### Redshift Server Object\n\n| Field             | Type     | Description                                                                                                         |\n|-------------------|----------|---------------------------------------------------------------------------------------------------------------------|\n| type              | `string` | `redshift`                                                                                                          |\n| account           | `string` |                                                                                                                     |\n| database          | `string` |                                                                                                                     |\n| schema            | `string` |                                                                                                                     |\n| clusterIdentifier | `string` | Identifier of the cluster. <br /> Example: `analytics-cluster`                                                      |\n| host              | `string` | Host of the cluster. <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com`                   |\n| port              | `number` | Port of the cluster. <br /> Example: `5439`                                                                         |\n| endpoint          | `string` | Endpoint of the cluster <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics` |\n\nExample, specifying an endpoint:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    endpoint: analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\n```\n\nExample, specifying the cluster identifier:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    clusterIdentifier: analytics-cluster\n```\n\nExample, specifying the cluster host:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    host: analytics-cluster.example.eu-west-1.redshift.amazonaws.com\n    port: 5439\n```\n\n#### Azure Server Object\n\n| Field          | Type     | Description                                                                                                                                                                                                                                                                                                                                  |\n|----------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type           | `string` | `azure`                                                                                                                                                                                                                                                                                                                                      |\n| storageAccount | `string` | The storage account name that contains the files                                                                                                                                                                                                                                                                                             |\n| location       | `string` | Path to Azure Blob Storage or Azure Data Lake Storage (ADLS) in the storage account, supports globs. Starting with `az://` or `abfss`<br> Recommended pattern is `abfss://<container_name>/<path>`, Examples: `az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet` or `abfss://my_container_name/path/*.parquet` |\n| format         | `string` | Format of files, such as `parquet`, `json`, `csv`                                                                                                                                                                                                                                                                                            |\n| delimiter      | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`                                                                                                                                                                                                                             |\n\n\n#### SQL-Server Server Object\n\n| Field    | Type      | Description                                                              |\n|----------|-----------|--------------------------------------------------------------------------|\n| type     | `string`  | `sqlserver`                                                              |\n| host     | `string`  | The host to the database server                                          |\n| port     | `integer` | The port to the database server, default: `1433`                         |\n| database | `string`  | The name of the database, e.g., `database`.                              |\n| schema   | `string`  | The name of the schema in the database, e.g., `dbo`.                     |\n| driver   | `string`  | The name of the supported driver, e.g., `ODBC Driver 18 for SQL Server`. |\n\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field   | Type     | Description                                                         |\n|---------|----------|---------------------------------------------------------------------|\n| type    | `string` | `databricks`                                                        |\n| host    | `string` | The Databricks host, e.g., `dbc-abcdefgh-1234.cloud.databricks.com` |\n| catalog | `string` | The name of the Hive or Unity catalog                               |\n| schema  | `string` | The schema name in the catalog                                      |\n\n#### Postgres Server Object\n\n| Field    | Type      | Description                                             |\n|----------|-----------|---------------------------------------------------------|\n| type     | `string`  | `postgres`                                              |\n| host     | `string`  | The host to the database server                         |\n| port     | `integer` | The port to the database server                         |\n| database | `string`  | The name of the database, e.g., `postgres`.             |\n| schema   | `string`  | The name of the schema in the database, e.g., `public`. |\n\n#### Oracle Server Object\n\n| Field       | Type      | Description                     |\n|-------------|-----------|---------------------------------|\n| type        | `string`  | `oracle`                        |\n| host        | `string`  | The host to the oracle server   |\n| port        | `integer` | The port to the oracle server   |\n| serviceName | `string`  | The name of the service         |\n\n#### Kafka Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kafka`                                                                   |\n| host   | `string` | The bootstrap server of the kafka cluster.                                |\n| topic  | `string` | The topic name.                                                           |\n| format | `string` | The format of the message. Examples: json, avro, protobuf. Default: json. |\n\n#### Pub/Sub Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `pubsub`              |\n| project | `string` | The GCP project name. |\n| topic   | `string` | The topic name.       |\n\n#### sftp Server Object\n\n| Field     | Type     | Description                                                                                                      |\n|-----------|----------|------------------------------------------------------------------------------------------------------------------|\n| type      | `string` | `sftp`                                                                                                           |\n| location  | `string` | SFTP URL, starting with `sftp://`                                                                                  |\n| format    | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                       |\n| delimiter | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array` |\n\n#### AWS Kinesis Data Streams Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kinesis`                                                                 |\n| stream | `string` | The name of the Kinesis data stream.                                      |\n| region | `string` | AWS region, e.g., `eu-west-1`.                                            |\n| format | `string` | The format of the records. Examples: json, avro, protobuf.                |\n\n#### Trino Server Object\n\n| Field    | Type      | Description                                               |\n|----------|-----------|-----------------------------------------------------------|\n| type     | `string`  | `trino`                                                   |\n| host     | `string`  | The Trino host                                            |\n| port     | `integer` | The Trino port                                            | \n| catalog  | `string`  | The name of the catalog, e.g., `my_catalog`.              |\n| schema   | `string`  | The name of the schema in the catalog, e.g., `my_schema`. |\n\n#### Local Server Object\n\n| Field  | Type     | Description                                                                         |\n|--------|----------|-------------------------------------------------------------------------------------|\n| type   | `string` | `local`                                                                             |\n| path   | `string` | The relative or absolute path to the data file(s), such as `./folder/data.parquet`. |\n| format | `string` | The format of the file(s), such as `parquet`, `delta`, `csv`, or `json`.            |\n\n#### Server Role Object\n\n| Field       | Type     | Description                                                  |\n|-------------|----------|--------------------------------------------------------------|\n| name        | `string` | Name of the role                                             |\n| description | `string` | A description of the role and what access the role provides. |\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field        | Type                                     | Description                                                                                                                                                                 |\n|--------------|------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage        | `string`                                 | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations  | `string`                                 | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| policies     | Array of [Policy Object](#policy-object) | A list of policies, licenses, standards, that are applicable for this data contract and that must be acknowledged by data consumers.                                        |\n| billing      | `string`                                 | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod | `string`                                 | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Policy Object\n\n| Field       | Type     | Description                       |\n|-------------|----------|-----------------------------------|\n| name        | `string` | Name of the policy.               |\n| description | `string` | A description of the policy.      |\n| url         | `string` | An URL that refers to the policy. |\n\n\n### Model Object\n\nThe Model Object describes the structure and semantics of a data model, such as tables, views, or structured files.\n\nThe name of the data model (table name) is defined by the key that refers to this Model Object.\n\n| Field            | Type                                         | Description                                                                                                                          |\n|------------------|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|\n| type             | `string`                                     | The type of the model. Examples: `table`, `view`, `object`. Default: `table`.                                                        |\n| description      | `string`                                     | An optional string describing the data model.                                                                                        |\n| title            | `string`                                     | An optional string for the title of the data model. Especially useful if the name of the model is cryptic or contains abbreviations. |\n| fields           | Map[`string`, [Field Object](#field-object)] | The fields (e.g. columns) of the data model.                                                                                         |\n| primaryKey       | Array of `string`                            | If the primary key is a compound key, list the field names that constitute the primary key. Alternative to field-level `primaryKey`. |\n| quality          | Array of [Quality Object](#quality-object)   | Specifies the quality attributes on model level.                                                                                     |\n| examples         | Array of `Any`                               | Specifies example data sets for the model.                                                                                           |\n| additionalFields | `Boolean`                                    | Specify, if the model can have additional fields that are not defined in the contract. Default: `false`.                            |\n| config           | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                             |\n\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Field Object\n\nThe Field Objects describes one field (column, property, nested field) of a data model.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description      | `string`                                     | An optional string describing the semantic of the data in this field.                                                                                                                                                                                                                                                                                                                                                        |\n| type             | [Data Type](#data-types)                     | The logical data type of the field.                                                                                                                                                                                                                                                                                                                                                                                          |\n| title            | `string`                                     | An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.                                                                                                                                                                                                                                                                                  |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| required         | `boolean`                                    | An indication, if this field must contain a value and may not be null. Default: `false`                                                                                                                                                                                                                                                                                                                                      |\n| primaryKey       | `boolean`                                    | If this field is a primary key. Default: `false`                                                                                                                                                                                                                                                                                                                                                                             |\n| references       | `string`                                     | The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.                                                                                                                                                                                                                                                     |\n| unique           | `boolean`                                    | An indication, if the value must be unique within the model. Default: `false`                                                                                                                                                                                                                                                                                                                                                |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| ~~example~~      | `string`                                     | DEPRECATED, use examples. An example value.                                                                                                                                                                                                                                                                                                                                                                                  |\n| examples         | Array of Any                                 | A list of example values.                                                                                                                                                                                                                                                                                                                                                                                                    |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               | \n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme. Examples may be: `sensitive`, `restricted`, `internal`, `public`.                                                                                                                                                                                                                                       |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`,`string`]                       | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| $ref             | `string`                                     | A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.                                                                                                                                                                                                                                                                                            |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n| quality          | Array of [Quality Object](#quality-object)   | Specifies the quality attributes on field level.                                                                                                                                                                                                                                                                                                                                                                             |\n| lineage          | [Lineage Object](#lineage-object)            | Provides information where the data comes from.                                                                                                                                                                                                                                                                                                                                                                              |\n| config           | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                                                                                                                                                                                                                                                                                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Definition Object\n\nThe Definition Object includes a clear and concise explanations of syntax, semantic, and classification of a business object in a given domain.\nIt serves as a reference for a common understanding of terminology, ensure consistent usage and to identify join-able fields.\nModels fields can refer to definitions using the `$ref` field to link to existing definitions and avoid duplicate documentations.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type             | [Data Type](#data-types)                     | REQUIRED. The logical data type                                                                                                                                                                                                                                                                                                                                                                                              |\n| title            | `string`                                     | The business name of this definition.                                                                                                                                                                                                                                                                                                                                                                                        |\n| description      | `string`                                     | Clear and concise explanations related to the domain                                                                                                                                                                                                                                                                                                                                                                         |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| examples         | Array of Any                                 | A list of example values.                                                                                                                                                                                                                                                                                                                                                                                                    |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               |\n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme.                                                                                                                                                                                                                                                                                                         |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`, `string`]                      | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n### Service Levels Object\n\nA service level is defined as an agreed-upon, measurable level of performance for provided the data.\nData Contract Specification defines well-known service levels. \nThis list can be extended with custom service levels.\n\nOne can either describe each service level informally using the `description` field, or make use of the predefined fields for automation support, e.g., via the [Data Contract CLI](https://cli.datacontract.com).\n\n| Field        | Type                                          | Description                                                             |\n|--------------|-----------------------------------------------|-------------------------------------------------------------------------|\n| availability | [Availability Object](#availability-object)   | The promised uptime of the system that provides the data                |\n| retention    | [Retention Object](#retention-object)         | The period how long data will be available.                             |\n| latency      | [Latency Object](#latency-object)             | The maximum amount of time from the source to its destination. |\n| freshness    | [Freshness Object](#freshness-object)         | The maximum age of the youngest entry.                                  |\n| frequency    | [Frequency Object](#frequency-object)         | The update frequency.                                                   |\n| support      | [Support Object](#support-object)             | The times when support is provided.                                     |\n| backup       | [Backup Object](#backup-object)               | The details about data backup procedures.                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Availability Object\n\nAvailability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\n\n| Field       | Type     | Description                                                                    |\n|-------------|----------|--------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the availability service level.                  |\n| percentage  | `string` | An optional string describing the guaranteed uptime in percent (e.g., `99.9%`) |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Retention Object\n\nRetention covers the period how long data will be available.\n\n| Field          | Type      | Description                                                                                                                                             |\n|----------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description    | `string`  | An optional string describing the retention service level.                                                                                              |\n| period         | `string`  | An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).  |\n| unlimited      | `boolean` | An optional indicator that data is kept forever.                                                                                                        |\n| timestampField | `string`  | An optional reference to the field that contains the timestamp that the period refers to.                                                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Latency Object\n\nLatency refers to the maximum amount of time from the source to its destination.\n\nExamples are the maximum duration it takes after an order has been recorded in the ecommerce shop until it is available in the orders table in the data analytics platform. This includes the waiting times until the next batch run is started and the processing time of the pipeline.\n\n| Field                   | Type     | Description                                                                                                                                                                              |\n|-------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the latency service level.                                                                                                                                 |\n| threshold               | `string` | An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| sourceTimestampField    | `string` | An optional reference to the field that contains the timestamp when the data was provided at the source.                                                                                 |\n| processedTimestampField | `string` | An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.                             |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Freshness Object\n\nFreshness refers to the maximum age of the youngest entry.\n\n| Field                   | Type     | Description                                                                                                                                      |\n|-------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the freshness service level.                                                                                       |\n| threshold               | `string` | An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| timestampField          | `string` | An optional reference to the field that contains the timestamp that the threshold refers to.                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Frequency Object\n\nFrequency describes how often data is updated.\n\n| Field       | Type     | Description                                                                                               |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the frequency service level.                                                |\n| type        | `string` | An optional type of data processing. Typical values are `batch`, `micro-batching`, `streaming`, `manual`. |\n| interval    | `string` | Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.                             |\n| cron        | `string` | Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Support Object\n\nSupport describes the times when support will be available for contact.\n\n| Field        | Type     | Description                                                                                                                                                                                                                                 |\n|--------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description  | `string` | An optional string describing the support service level.                                                                                                                                                                                    |\n| time         | `string` | An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.                                                                                                                 |\n| responseTime | `string` | An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with. |\n                                                                                                                                          \n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Backup Object\n\nBackup specifies details about data backup procedures.\n\n| Field         | Type     | Description                                                                                                                                                                                                                                                                                                        |\n|---------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description   | `string` | An optional string describing the backup service level.                                                                                                                                                                                                                                                            |\n| interval      | `string` | An optional interval that defines how often data will be backed up, e.g., `daily`.                                                                                                                                                                                                                                 |\n| cron          | `string` | An optional cron expression when data will be backed up, e.g., `0 0 * * *`.                                                                                                                                                                                                                                        |\n| recoveryTime  | `string` | An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).                                                                                                                                      |\n| recoveryPoint | `string` | An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours). |\n\n\n\n### Quality Object\n\nThe quality object defines quality attributes.\n\nQuality attributes are checks that can be applied to the data to ensure its quality. \nData can be verified by executing these checks through a data quality engine.\n\nQuality attributes can be:\n- A text in natural language that describes the quality of the data.\n- A predefined metric from the library of commonly used metrics\n- An individual SQL query that returns a single value that can be compared.\n- Engine-specific types: Pre-defined quality checks, as defined by data quality libraries. Currently, the engines `soda` and `great-expectations` are supported.\n\nA quality object can be specified on the field level and on the model level. \nThe top-level quality object is deprecated.\n\n#### Description Text\n\nA description in natural language that defines the expected quality of the data. \nThis is useful to express requirements or expectations when discussing the data contract with stakeholders.\nLater in the development process, these might be translated into an executable check (such as `sql`).\nIt can also be used as a prompt to check the data with an AI engine.\n\n| Field       | Type     | Description                                                        |\n|-------------|----------|--------------------------------------------------------------------|\n| type        | `string` | `text`                                                   |\n| description | `string` | A plain text describing the quality attribute in natural language. |\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    fields:\n      account_iban:\n        quality:\n          - type: text\n            description: Must be a valid IBAN. Must not be empty.\n```\n\n#### SQL\n\nAn individual SQL query that returns a single number that can be compared with a threshold. The SQL query must be in the SQL dialect of the provided server.\n\n> __Note:__ Establish a secure development process and use read-only connections, as the misuse of SQL queries can lead to SQL injection attacks.\n\n\n| Field                      | Type                  | Description                                                                                                                                                |\n|----------------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type                       | `string`              | `sql`                                                                                                                                                      |\n| description                | `string`              | A plain text describing the quality of the data.                                                                                                           |\n| query                      | `string`              | A SQL query that returns a single number to compare with the threshold.                                                                                    |\n| dialect                    | `string`              | The SQL dialect that is used for the query. Should be compatible to the server type. Examples: `postgres`, `spark`, `bigquery`, `snowflake`, `duckdb`, ... |\n| mustBe                     | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustNotBe                  | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeGreaterThan          | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeGreaterThanOrEqualTo | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeLessThan             | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeLessThanOrEqualTo    | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeBetween              | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.                                                                            |\n| mustNotBeBetween           | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.                                                                            |\n\nIn the query the following placeholders can be used:\n\n| Placeholder | Description                                                                            |\n|-------------|----------------------------------------------------------------------------------------|\n| `{model}`  | The name of the model that is checked.                                                 |\n| `{table}`  | Alias for `{model}`.                                                                  |\n| `{field}`  | The name of the field that is checked (only if the quality is defined on field-level). |\n| `{column}` | Alias for `{field}`.                                                                  |\n\nExample:\n\n```yaml\nmodels:\n  orders:\n    quality:\n      - type: sql\n        description: The maximum duration between two orders must be less that 3600 seconds\n        query: |\n          SELECT MAX(duration) AS max_duration \n          FROM (\n            SELECT EXTRACT(EPOCH FROM (order_timestamp - LAG(order_timestamp) OVER (ORDER BY order_timestamp))) AS duration \n            FROM {model}\n          )\n        mustBeLessThan: 3600\n```\n\nSQL queries allow powerful checks for custom business logic. \nA SQL query should run not longer than 10 minutes.\n\n#### Library / Metrics\n\nA set of predefined metrics commonly used in data quality checks, designed to be compatible with all major data quality engines. This simplifies the work for data engineers by eliminating the need to manually write SQL queries.\nThese metrics are aligned with ODCS 3.1.\n\n| Field                  | Type                  | Description                                                                      |\n|------------------------|-----------------------|----------------------------------------------------------------------------------|\n| type                   | `string`              | `library` (can be omitted, if `metric` is defined)                               |\n| metric                 | `string`              | `nullValues`, `missingValues`, `invalidValues`, `duplicateValues`, or `rowCount` |\n| arguments              | `object`              | Some metrics require additional arguments                                        |\n| description            | `string`              | A plain text describing the quality of the data.                                 |\n| mustBe                 | `integer`             | The threshold to check the return value of the query                             |\n| mustNotBe              | `integer`             | The threshold to check the return value of the query                             |\n| mustBeGreaterThan      | `integer`             | The threshold to check the return value of the query                             |\n| mustBeGreaterOrEqualTo | `integer`             | The threshold to check the return value of the query                             |\n| mustBeLessThan         | `integer`             | The threshold to check the return value of the query                             |\n| mustBeLessOrEqualTo    | `integer`             | The threshold to check the return value of the query                             |\n| mustBeBetween          | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.  |\n| mustNotBeBetween       | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.  |\n| unit                   | `string`              | `rows` (default) or `percent`                                                    |\n\n\nMetrics:\n\n| Metric | Level | Description                                                    | Arguments                                                        | Arguments Example                                                    |\n|--------|--------|----------------------------------------------------------------|------------------------------------------------------------------|----------------------------------------------------------------------|\n| `nullValues` | Property | Counts null values in a column/field                           | None                                                             |                                                                      |\n| `missingValues` | Property | Counts values considered as missing (empty strings, N/A, etc.) | `missingValues`: Array of values considered missing              | `missingValues: [null, '', 'N/A']`                                   |\n| `invalidValues` | Property | Counts values that don't match valid criteria                  | `validValues`: Array of valid values<br>`pattern`: Regex pattern | `validValues: ['pounds', 'kg']`<br>`pattern: '^[A-Z]{2}[0-9]{2}...'` |\n| `duplicateValues` | Property | Counts duplicate values in a column                            | None                                                             |                                                                      |\n| `duplicateValues` | Schema | Counts duplicate values across multiple columns                | `properties`: Array of property names                            | `properties: ['tenant_id', 'order_id']`                              |\n| `rowCount` | Schema | Counts total number of rows in a table/object store            | None                                                             |                                                                      |\n\n\nExample:\n\n```yaml\nproperties:\n  - name: email_address\n    quality:\n      - metric: missingValues\n        arguments:\n          missingValues: [null, '', 'N/A', 'n/a']\n        mustBeLessThan: 5\n        unit: percent # rows (default) or percent\n```\n\n\n#### Custom\n\nYou can define custom quality attributes that are specific to a data quality engine.\n\n#### Custom (Engine: Soda)\n\nSoda has a number of predefined quality [checks](https://docs.soda.io/soda/data-contracts-checks.html) that can be referenced as quality attributes.\n\nSoda checks can be applied on model and field level.\n\n> Note: Soda Data contract check reference is experimental and may change in the future. Currently only supported by Postgres, Snowflake, and Spark (Databricks)\n\n| Field         | Type     | Description                                                                                                                 |\n|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------|\n| type          | `string` | `custom`                                                                                                                    |\n| description   | `string` | Optional. A plain text describing the quality attribute in natural language.                                                |\n| engine        | `string` | `soda`                                                                                                                      |\n| implementation | `object` | A check type as defined in the [Data contract check reference](https://docs.soda.io/soda/data-contracts-checks.html)        |\n\n\nSee the [Data contract check reference](https://docs.soda.io/soda/data-contracts-checks.html) for all possible types and configuration values.\n\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    fields:\n      order_id:\n        type: string\n        quality:\n          - type: custom\n            description: This is a check on field level\n            engine: soda\n            implementation:\n              type: no_duplicate_values\n      carrier:\n        type: string\n      shipment_numer:\n        type: string\n    quality:\n      - type: custom\n        description: This is a check on model level\n        engine: soda\n        implementation:\n          type: duplicate_percent\n          columns:\n            - carrier\n            - shipment_numer\n          must_be_less_than: 1.0\n      - type: custom\n        description: This is a check on model level\n        engine: soda\n        implementation:\n          type: row_count\n          must_be_greater_than: 500000\n```\n\n#### Custom (Engine: Great Expectations)\n\nQuality attributes defined as Great Expectations [Expectation](https://greatexpectations.io/expectations/).\n\nExpectations are applied on model level.\n\n| Field         | Type     | Description                                                                                         |\n|---------------|----------|-----------------------------------------------------------------------------------------------------|\n| description   | `string` | Optional. A plain text describing the quality attribute in natural language.                        |\n| engine        | `string` | `great-expectations`                                                                                |\n| implementation | `object` | An expectation type as listed in [Expectation](https://greatexpectations.io/expectations/) as YAML. |\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    quality:\n      - type: custom\n        engine: great-expectations\n        implementation:\n          expectation_type: expect_table_row_count_to_be_between\n          kwargs:\n            min_value: 10000\n            max_value: 50000\n          meta:\n            notes: \"This expectation is crucial to avoid processing datasets that are too small or too large.\"\n      - type: custom\n        engine: great-expectations\n        description: \"Check that passenger_count values are between 1 and 6.\"\n        implementation:\n          expectation_type: expect_column_values_to_be_between\n          kwargs:\n            column: passenger_count\n            max_value: 6\n            min_value: 1\n            mostly: 1.0\n            strict_max: false\n            strict_min: false\n          meta:\n            tags:\n              - business-critical\n              - range_check\n```\n\n\n### Lineage Object\n\nField level lineage provides optional fine-grained information where the data comes from and how it was transformed.\n\nThe lineage object is based on the OpenLinage [Column Level Lineage Dataset Facet](https://openlineage.io/docs/spec/facets/dataset-facets/column_lineage_facet) to describe the input fields.\n\n\n\n| Field       | Type                                              | Description                                                                                                                                                                              |\n|-------------|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| inputFields | Array of [InputField Object](#inputfield-object) | The input fields refer to specific fields, columns, or data points from source systems or other data contracts that feed into a particular transformation, calculation, or final result. |\n\n\n#### InputField Object\n\n| Field           | Type                                                     | Description                                                                                                                                                                                                                                                                   |\n|-----------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| namespace       | `string`                                                 | The input dataset namespace, such as the name of the source system or the domain of another data contract. Examples: `com.example.crm`, `checkout`, snowflake://{account name}. [More on namespace](https://openlineage.io/blog/whats-in-a-namespace/#namespaces-in-the-spec) |\n| name            | `string`                                                 | The input dataset name, such as a reference to a data contract, a fully qualified table name, a Kafka topic.                                                                                                                                                                  |\n| field           | `string`                                                 | The input field name, such as the field in an upstream data contract, a table column or a JSON Path.                                                                                                                                                                          |\n| transformations | Array of [Transformation Object](#transformation-object) | Optional. This describes how the input field data was used to generate the final result.                                                                                                                                                                                      |\n\n#### Transformation Object\n\n| Field       | Type      | Description                                                                                                                                                                                                                                                    |\n|-------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`  | Indicates how direct is the relationship e.g. in query. Allows values are: `DIRECT` and `INDIRECT`.                                                                                                                                                            |\n| subtype     | `string`  | Optional. Contains more specific information about the transformation.<br>Allowed values for type `DIRECT`: `IDENTITY`, `TRANSFORMATION`, `AGGREGATION`.<br>Allowed values for type `INDIRECT`: `JOIN`, `GROUP_BY`, `FILTER`, `SORT`, `WINDOW`, `CONDITIONAL`. |\n| description | `string`  | Optional. A string representation of the transformation applied.                                                                                                                                                                                               |\n| masking     | `boolean` | Optional. Boolean value indicating if the input value was obfuscated during the transformation.                                                                                                                                                                |\n\n\nExample:\n\n```yaml\nmodels:\n  orders:\n    fields:\n      order_id:\n        type: string\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: order_id\n              transformations:\n                - type: DIRECT\n                  subtype: IDENTITY\n                  description: The order ID from the checkout order\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: order_timestamp\n              transformations:\n                - type: INDIRECT\n                  subtype: SORT\n      customer_email_address_hash:\n        type: string\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: email_address\n              transformations:\n                - type: DIRECT\n                  subtype: Transformation\n                  description: The email address from the checkout order, hashed with SHA-256\n                  masking: true\n\n```\n\n\n\n### Config Object\n\nThe config field can be used to set additional metadata that may be used by tools, e.g. to define a namespace for code generation, specify physical data types, toggle tests, etc.\n\nA config field can be added with any name. The value can be null, a primitive, an array or an object.\n\nFor developer experience, a list of well-known field names is maintained here, as these fields are used in the Data Contract CLI:\n\n\n| Field           | Type     | Description                                                                                                    |\n|-----------------|----------|----------------------------------------------------------------------------------------------------------------|\n| avroNamespace   | `string` | (Only on model level) The namespace to use when importing and exporting the data model from / to Apache Avro.  |\n| avroType        | `string` | (Only on field level) Specify the field type to use when exporting the data model to Apache Avro.              |\n| avroLogicalType | `string` | (Only on field level) Specify the logical field type to use when  exporting the data model to Apache Avro.     |\n| bigqueryType    | `string` | (Only on field level) Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)` |\n| snowflakeType   | `string` | (Only on field level) Specify the physical column type that is used in a Snowflake table, e.g, `TIMESTAMP_LTZ` |\n| redshiftType    | `string` | (Only on field level) Specify the physical column type that is used in a Redshift table, e.g, `SMALLINT`       |\n| sqlserverType   | `string` | (Only on field level) Specify the physical column type that is used in a SQL Server table, e.g, `DATETIME2`     |\n| databricksType  | `string` | (Only on field level) Specify the physical column type that is used in a Databricks table                      |\n| glueType        | `string` | (Only on field level) Specify the physical column type that is used in a AWS Glue Data Catalog table           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\nExample:\n\n```\nmodels:\n  orders:\n    config:\n      avroNamespace: \"my.namespace\"\n    fields:\n      my_field_1:\n        description: Example for AVRO with Timestamp (millisecond precision)\n        type: timestamp\n        config:\n          avroType: long\n          avroLogicalType: timestamp-millis\n          snowflakeType: timestamp_tz\n```\n\n\n### Data Types\n\nThe following data types are supported for model fields and definitions:\n\n- Unicode character sequence: `string`, `text`, `varchar`\n- Any numeric type, either integers or floating point numbers: `number`, `decimal`, `numeric`\n- 32-bit signed integer: `int`, `integer`\n- 64-bit signed integer: `long`, `bigint`\n- Single precision (32-bit) IEEE 754 floating-point number: `float`\n- Double precision (64-bit) IEEE 754 floating-point number: `double`\n- Binary value: `boolean`\n- Timestamp with timezone: `timestamp`, `timestamp_tz`\n- Timestamp with no timezone: `timestamp_ntz`\n- Date with no time information: `date`\n- Time with no date information: `time`\n- Array: `array`\n- Map: `map` (may not be supported by some server types)\n- Sequence of 8-bit unsigned bytes: `bytes`\n- Complex type: `object`, `record`, `struct`\n- Semi-structured data: `variant` (may not be supported by some server types)\n- JSON data: `json` (may not be supported by some server types)\n- No value: `null`\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom field can be added with any name. The value can be null, a primitive, an array or an object. \n\n\nTooling\n---\n- [Data Contract CLI](https://github.com/datacontract/datacontract-cli) is an open-source CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Contract Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data contracts. It includes a data contract catalog, a Web-Editor, and a request and approval workflow to automate access to data products for a full enterprise data marketplace.  \n- [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.\n- [Data Contract Editor](https://editor.datacontract.com) is an open-source editor for Data Contracts, including a live html preview.\n\nCode Completion\n---\nThe [JSON Schema](https://datacontract.com/datacontract.schema.json) of the current data contract specification is registered in [Schema Store](https://www.schemastore.org/), which brings code completion and syntax checks for all major IDEs.\nIntelliJ comes with a built-in YAML plugin which will show you autocompletions. \nFor VS Code we recommend to install the [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) plugin. \nNo additional configuration is required. \n\nAutocompletion is then enabled for files following these patterns:\n\n```\ndatacontract.yaml\ndatacontract.yml\n*-datacontract.yaml\n*-datacontract.yml\n*.datacontract.yaml\n*.datacontract.yml\ndatacontract-*.yaml\ndatacontract-*.yml\n**/datacontract/*.yml\n**/datacontract/*.yaml\n**/datacontracts/*.yml\n**/datacontracts/*.yaml\n```\n\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>\n"
  },
  {
    "path": "_config.yml",
    "content": "plugins:\n  - jekyll-sitemap\nname: Data Contract Specification\ntitle: null\ndescription: Data contracts bring data providers and data consumers together.\n"
  },
  {
    "path": "_layouts/default.html",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ site.lang | default: \"en-US\" }}\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\n    <meta property=\"og:image\" content=\"https://datacontract.com/images/datacontract-preview.png\" />\n    <meta name=\"twitter:card\" content=\"summary_large_image\" />\n    <meta name=\"twitter:image\" content=\"https://datacontract.com/images/datacontract-preview.png\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"images/favicon.png\">\n\n    {% seo %}\n    <link rel=\"stylesheet\" href=\"{{ \"/assets/css/style.css?v=\" | append: site.github.build_revision | relative_url }}\">\n    <style>\n      .footer {\n        text-align: center;\n        margin-bottom: 1rem;\n      }\n\n      .footer-logo {\n        width: 150px;\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"container-lg px-3 my-5 markdown-body\">\n      {% if site.title and site.title != page.title %}\n      <h1><a href=\"{{ \"/\" | absolute_url }}\">{{ site.title }}</a></h1>\n      {% endif %}\n\n      {{ content }}\n\n      {% if site.github.private != true and site.github.license %}\n      <div class=\"footer border-top border-gray-light mt-5 pt-3 text-right text-gray\">\n        This site is open source. {% github_edit_link \"Improve this page\" %}.\n      </div>\n      {% endif %}\n    </div>\n    <footer class=\"footer\">\n      <p style=\"margin-top: 2em;\">\n        <a href=\"https://www.innoq.com\">\n          <img src=\"/images/supported-by-innoq--petrol-apricot.svg\" class=\"footer-logo\" />\n        </a>\n      </p>\n      <p>\n        <a href=\"https://www.innoq.com/en/impressum/\">Legal Notice</a>\n        |\n        <a href=\"https://www.innoq.com/en/datenschutz/\">Privacy</a>\n      </p>\n    </footer>\n    <script src=\"{{ \"assets/javascript/anchor-js/anchor.min.js\" | relative_url }}\"></script>\n    <script>anchors.add();</script>\n    {% if site.google_analytics %}\n    <script>\n      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n      ga('create', '{{ site.google_analytics }}', 'auto');\n      ga('send', 'pageview');\n    </script>\n    {% endif %}\n    <!-- 100% privacy friendly analytics -->\n    <script async defer src=\"https://scripts.simpleanalyticscdn.com/latest.js\"></script>\n    <noscript><img src=\"https://queue.simpleanalyticscdn.com/noscript.gif\" alt=\"\" referrerpolicy=\"no-referrer-when-downgrade\" /></noscript>\n  </body>\n</html>\n"
  },
  {
    "path": "datacontract.init.yaml",
    "content": "dataContractSpecification: 1.2.1\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### servicelevels\n\n#servicelevels:\n#  availability:\n#    description: The server is available during support hours\n#    percentage: 99.9%\n#  retention:\n#    description: Data is retained for one year because!\n#    period: P1Y\n#    unlimited: false\n#  latency:\n#    description: Data is available within 25 hours after the order was placed\n#    threshold: 25h\n#    sourceTimestampField: orders.order_timestamp\n#    processedTimestampField: orders.processed_timestamp\n#  freshness:\n#    description: The age of the youngest row in a table.\n#    threshold: 25h\n#    timestampField: orders.order_timestamp\n#  frequency:\n#    description: Data is delivered once a day\n#    type: batch # or streaming\n#    interval: daily # for batch, either or cron\n#    cron: 0 0 * * * # for batch, either or interval\n#  support:\n#    description: The data is available during typical business hours at headquarters\n#    time: 9am to 5pm in EST on business days\n#    responseTime: 1h\n#  backup:\n#    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n#    interval: weekly\n#    cron: 0 0 * * 0\n#    recoveryTime: 24 hours\n#    recoveryPoint: 1 week\n"
  },
  {
    "path": "datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"1.2.1\",\n        \"1.2.0\",\n        \"1.1.0\",\n        \"0.9.3\",\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"The status of the data contract. Can be proposed, in development, active, retired.\",\n          \"examples\": [\n            \"proposed\",\n            \"in development\",\n            \"active\",\n            \"deprecated\",\n            \"retired\"\n          ]\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\",\n          \"additionalProperties\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"description\": \"Information about the servers.\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/BaseServer\",\n        \"allOf\": [\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"bigquery\"\n                }\n              }\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/BigQueryServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"s3\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/S3Server\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sftp\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SftpServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"redshift\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/RedshiftServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"azure\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/AzureServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sqlserver\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SqlserverServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"snowflake\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SnowflakeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"databricks\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DatabricksServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"dataframe\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DataframeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"glue\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/GlueServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"oracle\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/OracleServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kafka\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KafkaServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"pubsub\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PubSubServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kinesis\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KinesisDataStreamsServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"trino\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/TrinoServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"clickhouse\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/ClickhouseServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"local\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/LocalServer\"\n            }\n          }\n        ]\n      }\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"policies\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"description\": \"The type of the policy.\",\n                \"examples\": [\n                  \"privacy\",\n                  \"security\",\n                  \"retention\",\n                  \"compliance\"\n                ]\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the policy.\"\n              },\n              \"url\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"A URL to the policy document.\"\n              }\n            },\n            \"additionalProperties\": true\n          },\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string providing a human readable name for the model. Especially useful if the model name is cryptic or contains abbreviations.\",\n            \"examples\": [\n              \"Purchase Orders\",\n              \"Air Shipments\"\n            ]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"title\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.\"\n                },\n                \"type\": {\n                  \"$ref\": \"#/$defs/FieldType\"\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"fields\": {\n                  \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                  }\n                },\n                \"items\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"keys\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"values\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"deprecationMessage\": \"Use the primaryKey field instead.\"\n                },\n                \"primaryKey\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"references\": {\n                  \"type\": \"string\",\n                  \"description\": \"The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.\",\n                  \"examples\": [\n                    \"orders.order_id\",\n                    \"model.nested_field.field\"\n                  ]\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\",\n                  \"examples\": [\n                    \"email\",\n                    \"uri\",\n                    \"uuid\"\n                  ]\n                },\n                \"precision\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    38\n                  ],\n                  \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n                },\n                \"scale\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    0\n                  ],\n                  \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\",\n                  \"examples\": [\n                    \"^[a-zA-Z0-9_-]+$\"\n                  ]\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\",\n                  \"deprecationMessage\": \"Use the examples field instead.\"\n                },\n                \"examples\": {\n                  \"type\": \"array\",\n                  \"description\": \"A examples value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"links\": {\n                  \"type\": \"object\",\n                  \"description\": \"Links to external resources.\",\n                  \"minProperties\": 1,\n                  \"propertyNames\": {\n                    \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n                  },\n                  \"additionalProperties\": {\n                    \"type\": \"string\",\n                    \"title\": \"Link\",\n                    \"description\": \"A URL to an external resource.\",\n                    \"format\": \"uri\",\n                    \"examples\": [\n                      \"https://example.com\"\n                    ]\n                  }\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"quality\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/$defs/Quality\"\n                  }\n                },\n                \"lineage\": {\n                  \"$ref\": \"#/$defs/Lineage\"\n                },\n                \"config\": {\n                  \"type\": \"object\",\n                  \"description\": \"Additional metadata for field configuration.\",\n                  \"additionalProperties\": {\n                    \"type\": [\n                      \"string\",\n                      \"number\",\n                      \"boolean\",\n                      \"object\",\n                      \"array\",\n                      \"null\"\n                    ]\n                  },\n                  \"properties\": {\n                    \"avroType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"avroLogicalType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the logical field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"bigqueryType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)`.\"\n                    },\n                    \"snowflakeType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Snowflake table, e.g., `TIMESTAMP_LTZ`.\"\n                    },\n                    \"redshiftType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Redshift table, e.g., `SMALLINT`.\"\n                    },\n                    \"sqlserverType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a SQL Server table, e.g., `DATETIME2`.\"\n                    },\n                    \"databricksType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Databricks Unity Catalog table.\"\n                    },\n                    \"glueType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in an AWS Glue Data Catalog table.\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"primaryKey\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"The compound primary key of the model.\"\n          },\n          \"quality\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/$defs/Quality\"\n            }\n          },\n          \"examples\": {\n            \"type\": \"array\"\n          },\n          \"additionalFields\": {\n            \"type\": \"boolean\",\n            \"description\": \" Specify, if the model can have additional fields that are not defined in the contract.                            \",\n            \"default\": false\n          },\n          \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Additional metadata for model configuration.\",\n            \"additionalProperties\": {\n              \"type\": [\n                \"string\",\n                \"number\",\n                \"boolean\",\n                \"object\",\n                \"array\",\n                \"null\"\n              ]\n            },\n            \"properties\": {\n              \"avroNamespace\": {\n                \"type\": \"string\",\n                \"description\": \"The namespace to use when importing and exporting the data model from / to Apache Avro.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9/_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the domain into the ID using slashes.\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the name into the ID using slashes.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"$ref\": \"#/$defs/FieldType\"\n          },\n          \"fields\": {\n            \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n            }\n          },\n          \"items\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"keys\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"values\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"minLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"precision\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              38\n            ],\n            \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n          },\n          \"scale\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              0\n            ],\n            \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"minimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMinimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"maximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMaximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\",\n            \"deprecationMessage\": \"Use the examples field instead.\"\n          },\n          \"examples\": {\n            \"type\": \"array\",\n            \"description\": \"Example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          },\n          \"links\": {\n            \"type\": \"object\",\n            \"description\": \"Links to external resources.\",\n            \"minProperties\": 1,\n            \"propertyNames\": {\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"additionalProperties\": {\n              \"type\": \"string\",\n              \"title\": \"Link\",\n              \"description\": \"A URL to an external resource.\",\n              \"format\": \"uri\",\n              \"examples\": [\n                \"https://example.com\"\n              ]\n            }\n          }\n        },\n        \"required\": [\n          \"type\"\n        ]\n      }\n    },\n    \"servicelevels\": {\n      \"type\": \"object\",\n      \"description\": \"Specifies the service level agreements for the provided data, including availability, data retention policies, latency requirements, data freshness, update frequency, support availability, and backup policies.\",\n      \"properties\": {\n        \"availability\": {\n          \"type\": \"object\",\n          \"description\": \"Availability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the availability service level.\",\n              \"example\": \"The server is available during support hours\"\n            },\n            \"percentage\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the guaranteed uptime in percent (e.g., `99.9%`)\",\n              \"pattern\": \"^\\\\d+(\\\\.\\\\d+)?%$\",\n              \"example\": \"99.9%\"\n            }\n          }\n        },\n        \"retention\": {\n          \"type\": \"object\",\n          \"description\": \"Retention covers the period how long data will be available.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the retention service level.\",\n              \"example\": \"Data is retained for one year.\"\n            },\n            \"period\": {\n              \"type\": \"string\",\n              \"description\": \"An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).\",\n              \"example\": \"P1Y\"\n            },\n            \"unlimited\": {\n              \"type\": \"boolean\",\n              \"description\": \"An optional indicator that data is kept forever.\",\n              \"example\": false\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the period refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"latency\": {\n          \"type\": \"object\",\n          \"description\": \"Latency refers to the maximum amount of time from the source to its destination.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the latency service level.\",\n              \"example\": \"Data is available within 25 hours after the order was placed.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"sourceTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp when the data was provided at the source.\",\n              \"example\": \"orders.order_timestamp\"\n            },\n            \"processedTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.\",\n              \"example\": \"orders.processed_timestamp\"\n            }\n          }\n        },\n        \"freshness\": {\n          \"type\": \"object\",\n          \"description\": \"The maximum age of the youngest row in a table.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the freshness service level.\",\n              \"example\": \"The age of the youngest row in a table is within 25 hours.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g., `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the threshold refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"frequency\": {\n          \"type\": \"object\",\n          \"description\": \"Frequency describes how often data is updated.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the frequency service level.\",\n              \"example\": \"Data is delivered once a day.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"batch\",\n                \"micro-batching\",\n                \"streaming\",\n                \"manual\"\n              ],\n              \"description\": \"The method of data processing.\",\n              \"example\": \"batch\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.\",\n              \"example\": \"daily\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * *\"\n            }\n          }\n        },\n        \"support\": {\n          \"type\": \"object\",\n          \"description\": \"Support describes the times when support will be available for contact.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the support service level.\",\n              \"example\": \"The data is available during typical business hours at headquarters.\"\n            },\n            \"time\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.\",\n              \"example\": \"9am to 5pm in EST on business days\"\n            },\n            \"responseTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with.\",\n              \"example\": \"24 hours\"\n            }\n          }\n        },\n        \"backup\": {\n          \"type\": \"object\",\n          \"description\": \"Backup specifies details about data backup procedures.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the backup service level.\",\n              \"example\": \"Data is backed up once a week, every Sunday at 0:00 UTC.\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"An optional interval that defines how often data will be backed up, e.g., `daily`.\",\n              \"example\": \"weekly\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"An optional cron expression when data will be backed up, e.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * 0\"\n            },\n            \"recoveryTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).\",\n              \"example\": \"24 hours\"\n            },\n            \"recoveryPoint\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours).\",\n              \"example\": \"1 week\"\n            }\n          }\n        }\n      }\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"description\": \"Tags to facilitate searching and filtering.\",\n        \"examples\": [\n          \"databricks\",\n          \"pii\",\n          \"sensitive\"\n        ]\n      },\n      \"description\": \"Tags to facilitate searching and filtering.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ],\n  \"$defs\": {\n    \"FieldType\": {\n      \"type\": \"string\",\n      \"title\": \"FieldType\",\n      \"description\": \"The logical data type of the field.\",\n      \"enum\": [\n        \"number\",\n        \"decimal\",\n        \"numeric\",\n        \"int\",\n        \"integer\",\n        \"long\",\n        \"bigint\",\n        \"float\",\n        \"double\",\n        \"string\",\n        \"text\",\n        \"varchar\",\n        \"boolean\",\n        \"timestamp\",\n        \"timestamp_tz\",\n        \"timestamp_ntz\",\n        \"date\",\n        \"time\",\n        \"array\",\n        \"map\",\n        \"object\",\n        \"record\",\n        \"struct\",\n        \"bytes\",\n        \"variant\",\n        \"json\",\n        \"null\"\n      ]\n    },\n    \"BaseServer\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the servers.\"\n        },\n        \"environment\": {\n          \"type\": \"string\",\n          \"description\": \"The environment in which the servers are running. Examples: prod, sit, stg.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of the data product technology that implements the data contract.\",\n          \"examples\": [\n            \"azure\",\n            \"bigquery\",\n            \"BigQuery\",\n            \"clickhouse\",\n            \"databricks\",\n            \"dataframe\",\n            \"glue\",\n            \"kafka\",\n            \"kinesis\",\n            \"local\",\n            \"oracle\",\n            \"postgres\",\n            \"pubsub\",\n            \"redshift\",\n            \"sftp\",\n            \"sqlserver\",\n            \"snowflake\",\n            \"s3\",\n            \"trino\"\n          ]\n        },\n        \"roles\": {\n          \"description\": \" An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the role.\"\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the role and what access the role provides.\"\n              }\n            },\n            \"required\": [\n              \"name\"\n            ]\n          }\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"BigQueryServer\": {\n      \"type\": \"object\",\n      \"title\": \"BigQueryServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"dataset\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP dataset name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"dataset\"\n      ]\n    },\n    \"S3Server\": {\n      \"type\": \"object\",\n      \"title\": \"S3Server\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"S3 URL, starting with `s3://`\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}/*.json\"\n          ]\n        },\n        \"endpointUrl\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The server endpoint for S3-compatible servers.\",\n          \"examples\": [\n            \"https://minio.example.com\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"SftpServer\": {\n      \"type\": \"object\",\n      \"title\": \"SftpServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"pattern\": \"^sftp://.*\",\n          \"description\": \"SFTP URL, starting with `sftp://`\",\n          \"examples\": [\n            \"sftp://123.123.12.123/{model}/*.json\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"RedshiftServer\": {\n      \"type\": \"object\",\n      \"title\": \"RedshiftServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the host name.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"clusterIdentifier\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's identifier.\",\n          \"examples\": [\n            \"redshift-prod-eu\",\n            \"analytics-cluster\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"An optional string describing the cluster's port.\",\n          \"examples\": [\n            5439\n          ]\n        },\n        \"endpoint\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's endpoint.\",\n          \"examples\": [\n            \"analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\"\n          ]\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"AzureServer\": {\n      \"type\": \"object\",\n      \"title\": \"AzureServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"Path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs. Recommended pattern is 'abfss://<container_name>/<path>'\",\n          \"examples\": [\n            \"abfss://my_container_name/path\",\n            \"abfss://my_container_name/path/*.json\",\n            \"az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet\",\n            \"abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\",\n        \"format\"\n      ]\n    },\n    \"SqlserverServer\": {\n      \"type\": \"object\",\n      \"title\": \"SqlserverServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\",\n          \"default\": 1433,\n          \"examples\": [\n            1433\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"database\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"dbo\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"SnowflakeServer\": {\n      \"type\": \"object\",\n      \"title\": \"SnowflakeServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"DatabricksServer\": {\n      \"type\": \"object\",\n      \"title\": \"DatabricksServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Databricks host\",\n          \"examples\": [\n            \"dbc-abcdefgh-1234.cloud.databricks.com\"\n          ]\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Hive or Unity catalog\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema name in the catalog\"\n        }\n      },\n      \"required\": [\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"DataframeServer\": {\n      \"type\": \"object\",\n      \"title\": \"DataframeServer\",\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"GlueServer\": {\n      \"type\": \"object\",\n      \"title\": \"GlueServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue account\",\n          \"examples\": [\n            \"1234-5678-9012\"\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue database name\",\n          \"examples\": [\n            \"my_database\"\n          ]\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The AWS S3 path. Must be in the form of a URL.\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the files\",\n          \"examples\": [\n            \"parquet\",\n            \"csv\",\n            \"json\",\n            \"delta\"\n          ]\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\"\n      ]\n    },\n    \"PostgresServer\": {\n      \"type\": \"object\",\n      \"title\": \"PostgresServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"public\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"OracleServer\": {\n      \"type\": \"object\",\n      \"title\": \"OracleServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the oracle server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the oracle server.\",\n          \"examples\": [\n            1523\n          ]\n        },\n        \"serviceName\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the service.\",\n          \"examples\": [\n            \"service\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"serviceName\"\n      ]\n    },\n    \"KafkaServer\": {\n      \"type\": \"object\",\n      \"title\": \"KafkaServer\",\n      \"description\": \"Kafka Server\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The bootstrap server of the kafka cluster.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the message. Examples: json, avro, protobuf.\",\n          \"default\": \"json\"\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"topic\"\n      ]\n    },\n    \"PubSubServer\": {\n      \"type\": \"object\",\n      \"title\": \"PubSubServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"topic\"\n      ]\n    },\n    \"KinesisDataStreamsServer\": {\n      \"type\": \"object\",\n      \"title\": \"KinesisDataStreamsServer\",\n      \"description\": \"Kinesis Data Streams Server\",\n      \"properties\": {\n        \"stream\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Kinesis data stream.\"\n        },\n        \"region\": {\n          \"type\": \"string\",\n          \"description\": \"AWS region.\",\n          \"examples\": [\n            \"eu-west-1\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the record\",\n          \"examples\": [\n            \"json\",\n            \"avro\",\n            \"protobuf\"\n          ]\n        }\n      },\n      \"required\": [\n        \"stream\"\n      ]\n    },\n    \"TrinoServer\": {\n      \"type\": \"object\",\n      \"title\": \"TrinoServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Trino host URL.\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The Trino port.\"\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the catalog.\",\n          \"examples\": [\n            \"hive\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"my_schema\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"ClickhouseServer\": {\n      \"type\": \"object\",\n      \"title\": \"ClickhouseServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\"\n      ]\n    },\n    \"LocalServer\": {\n      \"type\": \"object\",\n      \"title\": \"LocalServer\",\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"The relative or absolute path to the data file(s).\",\n          \"examples\": [\n            \"./folder/data.parquet\",\n            \"./folder/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the file(s)\",\n          \"examples\": [\n            \"json\",\n            \"parquet\",\n            \"delta\",\n            \"csv\"\n          ]\n        }\n      },\n      \"required\": [\n        \"path\",\n        \"format\"\n      ]\n    },\n    \"Quality\": {\n      \"allOf\": [\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The type of quality check\",\n              \"enum\": [\n                \"text\",\n                \"library\",\n                \"sql\",\n                \"custom\"\n              ]\n            },\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"A plain text describing the quality attribute in natural language.\"\n            }\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"text\"\n              }\n            }\n          },\n          \"then\": {\n            \"required\": [\n              \"description\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"sql\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"query\": {\n                \"type\": \"string\",\n                \"description\": \"A SQL query that returns a single number to compare with the threshold.\"\n              },\n              \"dialect\": {\n                \"type\": \"string\",\n                \"description\": \"The SQL dialect that is used for the query. Should be compatible to the server.type.\",\n                \"examples\": [\n                  \"athena\",\n                  \"bigquery\",\n                  \"redshift\",\n                  \"snowflake\",\n                  \"trino\",\n                  \"postgres\",\n                  \"oracle\"\n                ]\n              },\n              \"mustBe\": {\n                \"type\": \"number\"\n              },\n              \"mustNotBe\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThanOrEqualTo\": {\n                \"type\": \"number\",\n                \"deprecated\": true\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeLessThanOrEqualTo\": {\n                \"type\": \"number\",\n                \"deprecated\": true\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              }\n            },\n            \"required\": [\n              \"query\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"library\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"metric\": {\n                \"type\": \"string\",\n                \"description\": \"The DataQualityLibrary metric to use for the quality check.\",\n                \"examples\": [\"nullValues\", \"missingValues\", \"invalidValues\", \"duplicateValues\", \"rowCount\"]\n              },\n              \"rule\": {\n                \"type\": \"string\",\n                \"deprecated\": true,\n                \"description\": \"Deprecated. Use metric instead\"\n              },\n              \"arguments\": {\n                \"type\": \"object\",\n                \"description\": \"Additional metric-specific parameters for the quality check.\",\n                \"additionalProperties\": {\n                  \"type\": [\"string\", \"number\", \"boolean\", \"array\", \"object\"]\n                }\n              },\n              \"mustBe\": {\n                \"description\": \"Must be equal to the value to be valid. When using numbers, it is equivalent to '='.\"\n              },\n              \"mustNotBe\": {\n                \"description\": \"Must not be equal to the value to be valid. When using numbers, it is equivalent to '!='.\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than the value to be valid. It is equivalent to '>'.\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than or equal to the value to be valid. It is equivalent to '>='.\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than the value to be valid. It is equivalent to '<'.\"\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than or equal to the value to be valid. It is equivalent to '<='.\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must not be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              }\n            },\n            \"required\": [\n              \"metric\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"custom\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A plain text describing the quality attribute in natural language.\"\n              },\n              \"engine\": {\n                \"type\": \"string\",\n                \"examples\": [\n                  \"soda\",\n                  \"great-expectations\"\n                ],\n                \"description\": \"The engine used for custom quality checks.\"\n              },\n              \"implementation\": {\n                \"type\": [\n                  \"object\",\n                  \"array\",\n                  \"string\"\n                ],\n                \"description\": \"Engine-specific quality checks and expectations.\"\n              }\n            },\n            \"required\": [\n              \"engine\"\n            ]\n          }\n        }\n      ]\n    },\n    \"Lineage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"inputFields\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"namespace\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset namespace\"\n              },\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset name\"\n              },\n              \"field\": {\n                \"type\": \"string\",\n                \"description\": \"The input field\"\n              },\n              \"transformations\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"type\": {\n                      \"description\": \"The type of the transformation. Allowed values are: DIRECT, INDIRECT\",\n                      \"type\": \"string\"\n                    },\n                    \"subtype\": {\n                      \"type\": \"string\",\n                      \"description\": \"The subtype of the transformation\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"a string representation of the transformation applied\"\n                    },\n                    \"masking\": {\n                      \"type\": \"boolean\",\n                      \"description\": \"is transformation masking the data or not\"\n                    }\n                  },\n                  \"required\": [\n                    \"type\"\n                  ],\n                  \"additionalProperties\": true\n                }\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"namespace\",\n              \"name\",\n              \"field\"\n            ]\n          }\n        },\n        \"transformationDescription\": {\n          \"type\": \"string\",\n          \"description\": \"a string representation of the transformation applied\",\n          \"deprecated\": true\n        },\n        \"transformationType\": {\n          \"type\": \"string\",\n          \"description\": \"IDENTITY|MASKED reflects a clearly defined behavior. IDENTITY: exact same as input; MASKED: no original data available (like a hash of PII for example)\",\n          \"deprecated\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"inputFields\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "definition.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"A unique identifier for this definition. Encode the domain into the ID, separated by slashes.\",\n      \"examples\": [\n        \"checkout/order_id\"\n      ]\n    },\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"The business name of this definition.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Clear and concise explanations related to the domain.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"description\": \"The logical data type.\"\n    },\n    \"minLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n    },\n    \"maxLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n    },\n    \"format\": {\n      \"type\": \"string\",\n      \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n    },\n    \"precision\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        38\n      ],\n      \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n    },\n    \"scale\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        0\n      ],\n      \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n    },\n    \"pattern\": {\n      \"type\": \"string\",\n      \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n    },\n    \"example\": {\n      \"type\": \"string\",\n      \"description\": \"An example value for this field.\",\n      \"deprecationMessage\": \"Use the examples field instead.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"description\": \"A examples value for this field.\"\n    },\n    \"pii\": {\n      \"type\": \"boolean\",\n      \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n    },\n    \"classification\": {\n      \"type\": \"string\",\n      \"description\": \"The data class defining the sensitivity level for this field.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Custom metadata to provide additional context.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"type\"\n  ]\n}\n"
  },
  {
    "path": "diagrams/automation.drawio",
    "content": "<mxfile host=\"Electron\" modified=\"2024-10-26T19:15:16.643Z\" agent=\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.5.1 Chrome/112.0.5615.204 Electron/24.6.0 Safari/537.36\" etag=\"7o40z_2iALpzpzZdF8zj\" version=\"21.5.1\" type=\"device\">\n  <diagram name=\"datacontractcli-v2\" id=\"tp5WBm8LkCMx9FwTQ9-I\">\n    <mxGraphModel dx=\"760\" dy=\"500\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-0\" />\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-1\" parent=\"AiJdHj6Q9A8rBBn62U_L-0\" />\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-2\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"10\" y=\"230\" width=\"680\" height=\"340\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-3\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;arcSize=0;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"190\" y=\"280\" width=\"317\" height=\"166.32\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-4\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"513\" y=\"365\" as=\"sourcePoint\" />\n            <mxPoint x=\"555\" y=\"365\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-5\" value=\"&lt;span style=&quot;font-size: 11px;&quot;&gt;export&lt;/span&gt;\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontSize=11;\" parent=\"AiJdHj6Q9A8rBBn62U_L-4\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.475\" y=\"1\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"9\" y=\"-15\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-8\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;startArrow=none;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"347\" y=\"450\" as=\"sourcePoint\" />\n            <mxPoint x=\"347\" y=\"480\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"347\" y=\"470\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-9\" value=\"test\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=11;fontFamily=Architects Daughter;\" parent=\"AiJdHj6Q9A8rBBn62U_L-8\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.175\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"21\" y=\"2\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-10\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuMTQgNi45NGEuNzcuNzcgMCAwIDAtLjQ4LjJjLTEtLjgtMi4xNC0uMjUtMyAuNzJBMTYuMTIgMTYuMTIgMCAwIDAgMTYuMTUgMTBhLjI4LjI4IDAgMCAwIC40LjMyYy4wOCAwIDEuMzktMS4yMSAxLjQ3LTEuMjguNzMtLjY4IDEuMzUtMS40MiAxLjgxLTEuNDhzLjMyIDAgLjQxLjA5YTE5IDE5IDAgMCAwLTIuMDcgMi44MWMwIC4xMi0uMzEgMCAxLjUzIDEuNzFsLjI3LjI0QzE5IDEzLjU3IDE2IDE2LjczIDE1Ljc0IDE3YTIuNjYgMi42NiAwIDAgMS0xIC40MyAzLjcyIDMuNzIgMCAwIDEtLjIyLTEuNTJMMTcuNyAxMmEuMy4zIDAgMCAwLS40Ny0uMzdjLS43Mi44OC0zLjQ1IDMuMzktMy42OSAzLjkxYTQgNCAwIDAgMCAuMjggMi42MiAxIDEgMCAwIDAgLjkzLjMyIDQuMjYgNC4yNiAwIDAgMCAxLjc2LS42NWMuNi0uNjIgMy44Ni00Ljc5IDQuNjUtNS4zMWEyMCAyMCAwIDAgMCAxLjc3LTEuNjQgNC42NyA0LjY3IDAgMCAwIDEtMS4zN2MuNS0xLjU3LTEuODItMi42Ni0yLjc5LTIuNTdabTEuNjYgMi4zM2ExMi45IDEyLjkgMCAwIDEtMS41OCAxLjg4Yy0uOTEgMS0uNjUuNzQtMSAuNDYtMS41Mi0xLjI2LTEuMzMtMS0xLjI3LTEuMjFsMi0yLjE2Yy4zNC0uMzgtLjA2LS40NS43LS4xNS40NC4xNiAxLjQzLjYzIDEuMTUgMS4xOFoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwMjAyMDIiIGQ9Ik03LjIgMjIuNTNjLTEuNDgtLjI1LTEuNDgtMi4xMS0xLjYxLTMuNTNhNDAgNDAgMCAwIDEgLjE1LTYuNTdjLjE4LTIuNDYuNi0yLjI1LjU5LTUuNTEgMC0xLjczLS4zMy00LjA2LTEuNzktNWE0MC4yOSA0MC4yOSAwIDAgMSA2LjI0LjA4YzIuNjQuMTggNS43MS0uMTQgNi45MS42M0MxOS4yMyAzLjYzIDE4LjEyIDYgMTkgNmEuMzIuMzIgMCAwIDAgLjMxLS4zNmMtLjA2LTEuMzEuMjQtMi40NC0uODEtMy40NEE1LjgyIDUuODIgMCAwIDAgMTQuNzYgMWE3NS40NiA3NS40NiAwIDAgMC04LjU3IDBDNS43NyAxIDEuNiAxLjUgMSAyLjA4QTMuMTcgMy4xNyAwIDAgMCAwIDQuNSA0LjYxIDQuNjEgMCAwIDAgLjcyIDdhMS45MiAxLjkyIDAgMCAwIC45My42MmMxIC4zMSAzLjI0LjI1IDIuODYtLjU1QzQuNCA2LjggMy4xOSA3IDMuMTEgN2EyLjM1IDIuMzUgMCAwIDEtMS43Ny0uNTYgMy43NyAzLjc3IDAgMCAxLS40OC0yIDIuMzEgMi4zMSAwIDAgMSAuNzYtMS43MyAzLjU0IDMuNTQgMCAwIDEgMS4yNy0uMzFjMS4xMSAwIDEuNjQuNjYgMiAxLjczYTE0LjEzIDE0LjEzIDAgMCAxIC4zIDQuNDYgMzMgMzMgMCAwIDAtLjU1IDdjMCAxLjQzLjE5IDUgLjg0IDYuMjJhMi4xIDIuMSAwIDAgMCAxLjY3IDEuMjQuMy4zIDAgMCAwIC4wNS0uNTJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuODUgMTkuNTRhOCA4IDAgMCAxLTEuNzEtMy4xOS4yOS4yOSAwIDEgMC0uNTcuMTVjLjc1IDMuMzMgMi4xOCA0IDIuNzkgNC43OS0uMzQuMDgtMTMuMjYgMS4xLTE0IDFhLjMzLjMzIDAgMSAwLS4wOS42NmMxLjYxLjI2IDEwLjU5LS4yMiAxMy4xLS40OWEzIDMgMCAwIDAgMi0uNjVjLjYzLS42Ny0uNzEtMS40Ny0xLjUyLTIuMjdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNOS42NyAxNi44NmMuMzkgMCAuNDYuODQuNSAxLjI2IDAgLjEzLS4wNy43OC4zNS45NWEuNTEuNTEgMCAwIDAgLjQ1IDBjMS42My0uODUuOTMtLjE4IDEuNDYtLjE4LjY4IDAgLjU2LTEuMzktMS4yNS0xIDAtMS4yNC0uMzQtMi4yOS0xLjU5LTIuMmEyLjc1IDIuNzUgMCAwIDAtMi4xOCAxLjgxIDMuOTIgMy45MiAwIDAgMC0uMzQgMS4wNWMuMTEgMS44NC44Ni0xLjY4IDIuNi0xLjY5WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTguNTcgOC40MWM1LjI4LjE5IDIuMzIgMCA2LjA4IDBhLjM0LjM0IDAgMCAwIC4zNS0uMzUuNDcuNDcgMCAwIDAtLjM5LS4zN2MtLjI4LS4wNi0yLjEtLjMtMi45NC0uMzNhMTcuODQgMTcuODQgMCAwIDAtMy44NC40OC4zMS4zMSAwIDAgMCAuMi41M2MuMDkuMDIuNDguMDQuNTQuMDRaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTMuMjIgMTEuNjRjLTUuMi0uMTUtNS40OS4xMi01LjU3LjM0YS4zLjMgMCAwIDAgLjE3LjM4IDEuMjMgMS4yMyAwIDAgMCAuNDQuMWMuODQuMDYgNy4yOC4zOCA3LjI0LS40Mi0uMDMtLjU4LTEuMzctLjMzLTIuMjgtLjRaIi8+PC9nPjwvc3ZnPg==;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"469\" y=\"288.5\" width=\"30\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-11\" value=\"Data Contract CLI\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontSize=23;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"190\" y=\"243\" width=\"315\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-12\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"241\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-13\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;BigQuery&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"240\" y=\"517\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-14\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"405\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-16\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"295\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-20\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"350\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-23\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"459\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-24\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Kafka&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"457\" y=\"518\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-25\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Apache_kafka.svg/1200px-Apache_kafka.svg.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"473.62\" y=\"490.38\" width=\"16.77\" height=\"27.25\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-26\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"187\" y=\"485\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-27\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;AWS S3&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"185\" y=\"518\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-28\" value=\"&lt;font&gt;github.com/datacontract/cli&lt;/font&gt;\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"590.38\" y=\"550.0028571428571\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-29\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"564\" y=\"423.37\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-33\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"565\" y=\"367.37\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-34\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;dbt&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"564\" y=\"404.37\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-35\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/en/thumb/4/48/Data_build_tool_%28dbt%29_logo.svg/2880px-Data_build_tool_%28dbt%29_logo.svg.png;clipPath=inset(0% 62.33% 0% 0%);\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"571.92\" y=\"371.37\" width=\"32.17\" height=\"31.02\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-36\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"622\" y=\"310.5\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-38\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"622\" y=\"366.25\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-41\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"622\" y=\"253.63\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-42\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;RDF&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"619.12\" y=\"347.5\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-44\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"27\" y=\"368.21\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-45\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;BigQuery&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"25\" y=\"404.21\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-46\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://assets-global.website-files.com/5cdb255abc2719f0c11a46e8/5ce129988eff8b781807a7d4_favicon-32x32.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"630.8\" y=\"372.56\" width=\"28.63\" height=\"28.63\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-47\" value=\"&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;dataContractSpecification: 0.9.3&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;id: urn:datacontract:orders-latest&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;info:&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &lt;/span&gt;title: Orders Latest&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &lt;/span&gt;version: 1.0.0&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;models:&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &lt;/span&gt;orders:&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;type: table&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;fields:&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;order_id:&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&lt;span class=&quot;Apple-converted-space&quot; style=&quot;font-size: 11px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;type: text&lt;/p&gt;&lt;p style=&quot;margin: 0px; font-variant-numeric: normal; font-variant-east-asian: normal; font-variant-alternates: normal; font-kerning: auto; font-optical-sizing: auto; font-feature-settings: normal; font-variation-settings: normal; font-stretch: normal; font-size: 11px; line-height: normal; text-align: start;&quot; class=&quot;p1&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format: uuid&lt;/p&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Hack;fontSize=11;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"197\" y=\"287.76\" width=\"247\" height=\"149.49\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-48\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"82\" y=\"310\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-49\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Protobuf&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"80\" y=\"337.36\" width=\"50\" height=\"33\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-50\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"82\" y=\"368.21\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-51\" value=\"&lt;font face=&quot;Architects Daughter&quot;&gt;Unity &lt;br&gt;Catalog&lt;br&gt;&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"80\" y=\"401.21\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-52\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://github.githubassets.com/assets/GitHub-Mark-ea2971cee799.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"499\" y=\"540\" width=\"20\" height=\"20\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-53\" value=\"datacontract.yaml&lt;br&gt;or odcs.yaml\" style=\"text;html=1;strokeColor=none;fillColor=none;align=right;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1;fontSize=11;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontColor=#858585;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"403\" y=\"410.98\" width=\"95\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-55\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"251\" y=\"489.25\" width=\"28\" height=\"28\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"KHXoxsUwI0MCwgLyXFnF-4\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"565\" y=\"310.5\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"OJ9yOADstJJCfu1wN0bi-1\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"82\" y=\"424\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"OJ9yOADstJJCfu1wN0bi-2\" value=\"&lt;font face=&quot;Architects Daughter&quot;&gt;ODCS&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"81\" y=\"460\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-0\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"622\" y=\"423.37\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-1\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Terraform&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"563.5\" y=\"460.14\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-3\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://static-00.iconduck.com/assets.00/terraform-icon-1803x2048-hodrzd3t.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"575.08\" y=\"427.64\" width=\"28.6\" height=\"32.5\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-4\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"141\" y=\"364.63\" as=\"sourcePoint\" />\n            <mxPoint x=\"183\" y=\"364.63\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-5\" value=\"&lt;span style=&quot;font-size: 11px;&quot;&gt;import&lt;/span&gt;\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontSize=11;\" parent=\"QJ_UwO0NwaflkxnO77_Y-4\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.475\" y=\"1\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"9\" y=\"-15\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"QJ_UwO0NwaflkxnO77_Y-6\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://github.com/bitol-io/artwork/raw/main/icon/color/Bitol_Logo_icon_color.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"627.12\" y=\"427.41999999999996\" width=\"36\" height=\"36.32\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"l2HeVbMFA6z7GmxaB2EQ-5\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;exitX=0.918;exitY=-0.006;exitDx=0;exitDy=0;edgeStyle=orthogonalEdgeStyle;curved=1;exitPerimeter=0;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" source=\"AiJdHj6Q9A8rBBn62U_L-3\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"440\" y=\"210\" as=\"sourcePoint\" />\n            <mxPoint x=\"510\" y=\"300\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"481\" y=\"260\" />\n              <mxPoint x=\"530\" y=\"260\" />\n              <mxPoint x=\"530\" y=\"300\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"l2HeVbMFA6z7GmxaB2EQ-6\" value=\"diff\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;\" parent=\"l2HeVbMFA6z7GmxaB2EQ-5\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.1406\" y=\"-3\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-10\" y=\"-13\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"gM56yTRo4Hwrsk5AQHmB-0\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"565\" y=\"253.63\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"gM56yTRo4Hwrsk5AQHmB-1\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;HTML&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"622.5\" y=\"290.63\" width=\"45\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"gM56yTRo4Hwrsk5AQHmB-2\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/6/61/HTML5_logo_and_wordmark.svg/1920px-HTML5_logo_and_wordmark.svg.png;clipPath=inset(16.33% 12.67% 0.33% 11.67%);\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"632.05\" y=\"260.26\" width=\"26.13\" height=\"28.78\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"gM56yTRo4Hwrsk5AQHmB-3\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/512px-Amazon_Web_Services_Logo.svg.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"192.32999999999998\" y=\"492.86\" width=\"37.33\" height=\"22.39\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-37\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;SodaCL&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"621\" y=\"405.87\" width=\"50\" height=\"9\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"KHXoxsUwI0MCwgLyXFnF-5\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;SQL DDL&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"564.38\" y=\"290.26\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"KHXoxsUwI0MCwgLyXFnF-6\" value=\"SQL\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=19;fontColor=#000000;fontStyle=1\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"570.38\" y=\"261.26\" width=\"40\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-30\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Avro&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"564.38\" y=\"337.36\" width=\"50\" height=\"33\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-59\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAu4AAAKMCAYAAAC0IT2bAAAKn2lDQ1BJQ0MgUHJvZmlsZQAASImVlgdQk9kWgO//p4eEFkA6oTfpLYCU0EOXDqISkgChhJAQQOzI4gqsBRURUBZ0EUTBtQCy2ADFtigWwLogoqCuiwVRUXk/MAR337z35p2Zk/PNybmn3PnvzAGAjGfy+amwNABpvExBiLcbNSo6hoobBTAgACngAAhMlpBPDw72B4jM27/Lhz4AzdjbJjO5/v3//yoybI6QBQAUjHA8W8hKQ/gkok9ZfEEmAKgyxK+dncmf4XaE5QRIgwjfnOHEOX46w/Fz/HE2JizEHQA0CQA8ickUJAJAUkT81CxWIpKHREPYnMfm8hBOQtg5LS2djXAdwgZIDB/hmfy0+O/yJP4tZ7w4J5OZKOa5WWYF78EV8lOZq/7P6/jfkpYqmq+hB2YGEPiEzFjkzgZS0v3EzIsPDJpnLns2fpaTRD7h88wSusfMM5vp4Sc+mxroP88JXC+GOE8mI2yeOULP0HkWpIeIayUI3OnzzBQs1BWlhIv9SRyGOH9uUljkPGdxIwLnWZgS6rcQ4y72C0Qh4v45PG+3hbpe4tnThN/Ny2WIz2YmhfmIZ2cu9M/h0RdyCqPEvbE5Hp4LMeHieH6mm7gWPzVYHM9J9Rb7hVmh4rOZyAe5cDZYfIfJTN/geQaeIAJYAjtAAzaZnJzMmQHc0/mrBNzEpEwqHXlZHCqDxzJdTLU0t7QGYOadzn0G7wZm3x+kgF/wCa4A4HAEce5Y8C3HA3DyKwBSwQs+fQwA0hEAdPizRIKsOR965gcDiMj7lwNKQB1oAwNggvRmCxyBK9KnLwgCYSAarAAskATSgABkgzVgIygARWA72A3KQRU4AOrAUXActIB2cAFcAtfATXAXPACDYAS8BOPgA5iCIAgHkSEKpARpQLqQMWQJ0SBnyBPyh0KgaCgOSoR4kAhaA22CiqASqByqhuqhX6HT0AXoCtQL3YOGoDHoLfQZRsEkWA5Wg/VgM5gG02E/OAxeDifCGXAunA9vhcvgGvgI3AxfgK/Bd+FB+CU8gQIoCZQCShNlgqKh3FFBqBhUAkqAWocqRJWialCNqDZUN+o2ahD1CvUJjUVT0FS0CdoR7YMOR7PQGeh16GJ0OboO3YzuQt9GD6HH0d8wZIwqxhjjgGFgojCJmGxMAaYUU4s5hbmIuYsZwXzAYrEKWH2sHdYHG41Nxq7GFmP3YZuw57G92GHsBA6HU8IZ45xwQTgmLhNXgNuLO4I7h7uFG8F9xEvgNfCWeC98DJ6Hz8OX4g/jz+Jv4Z/jpwjSBF2CAyGIwCasImwjHCS0EW4QRghTRBmiPtGJGEZMJm4klhEbiReJD4nvJCQktCTsJZZKcCU2SJRJHJO4LDEk8YkkSzIiuZNiSSLSVtIh0nnSPdI7MpmsR3Ylx5AzyVvJ9eRO8mPyR0mKpKkkQ5ItuV6yQrJZ8pbkaymClK4UXWqFVK5UqdQJqRtSr6QJ0nrS7tJM6XXSFdKnpfulJ2QoMhYyQTJpMsUyh2WuyIzK4mT1ZD1l2bL5sgdkO2WHKSiKNsWdwqJsohykXKSMyGHl9OUYcslyRXJH5XrkxuVl5a3lI+Rz5Cvkz8gPKqAU9BQYCqkK2xSOK/QpfF6ktoi+iLNoy6LGRbcWTSqqKLoqchQLFZsU7yp+VqIqeSqlKO1QalF6pIxWNlJeqpytvF/5ovIrFTkVRxWWSqHKcZX7qrCqkWqI6mrVA6rXVSfU1NW81fhqe9U61V6pK6i7qier71I/qz6mQdFw1uBq7NI4p/GCKk+lU1OpZdQu6rimqqaPpkizWrNHc0pLXytcK0+rSeuRNlGbpp2gvUu7Q3tcR0MnQGeNToPOfV2CLk03SXePbrfupJ6+XqTeZr0WvVF9RX2Gfq5+g/5DA7KBi0GGQY3BHUOsIc0wxXCf4U0j2MjGKMmowuiGMWxsa8w13mfcuxiz2H4xb3HN4n4TkgndJMukwWTIVMHU3zTPtMX0tZmOWYzZDrNus2/mNuap5gfNH1jIWvha5Fm0Wby1NLJkWVZY3rEiW3lZrbdqtXpjbWzNsd5vPWBDsQmw2WzTYfPV1s5WYNtoO2anYxdnV2nXT5OjBdOKaZftMfZu9uvt2+0/Odg6ZDocd/jL0cQxxfGw4+gS/SWcJQeXDDtpOTGdqp0GnanOcc4/Ow+6aLowXWpcnrhqu7Jda12f0w3pyfQj9Ndu5m4Ct1Nuk+4O7mvdz3ugPLw9Cj16PGU9wz3LPR97aXklejV4jXvbeK/2Pu+D8fHz2eHTz1BjsBj1jHFfO9+1vl1+JL9Qv3K/J/5G/gL/tgA4wDdgZ8DDQN1AXmBLEAhiBO0MehSsH5wR/NtS7NLgpRVLn4VYhKwJ6Q6lhK4MPRz6IcwtbFvYg3CDcFF4R4RURGxEfcRkpEdkSeRglFnU2qhr0crR3OjWGFxMRExtzMQyz2W7l43E2sQWxPYt11+es/zKCuUVqSvOrJRayVx5Ig4TFxl3OO4LM4hZw5yIZ8RXxo+z3Fl7WC/Zruxd7DGOE6eE8zzBKaEkYTTRKXFn4liSS1Jp0iuuO7ec+ybZJ7kqeTIlKOVQynRqZGpTGj4tLu00T5aXwutKV0/PSe/lG/ML+IMZDhm7M8YFfoJaISRcLmzNlEMWousiA9EPoqEs56yKrI/ZEdkncmRyeDnXVxmt2rLqea5X7i+r0atZqzvWaK7ZuGZoLX1t9TpoXfy6jvXa6/PXj2zw3lC3kbgxZePveeZ5JXnvN0VuastXy9+QP/yD9w8NBZIFgoL+zY6bq35E/8j9sWeL1Za9W74VsguvFpkXlRZ9KWYVX/3J4qeyn6a3Jmzt2Wa7bf927Hbe9r4dLjvqSmRKckuGdwbsbN5F3VW46/3ulbuvlFqXVu0h7hHtGSzzL2vdq7N3+94v5UnldyvcKpoqVSu3VE7uY++7td91f2OVWlVR1eefuT8PVHtXN9fo1ZQewB7IOvDsYMTB7l9ov9TXKtcW1X49xDs0WBdS11VvV19/WPXwtga4QdQwdiT2yM2jHkdbG00aq5sUmoqOgWOiYy9+jfu177jf8Y4TtBONJ3VPVp6inCpshppXNY+3JLUMtka39p72Pd3R5th26jfT3w61a7ZXnJE/s+0s8Wz+2elzuecmzvPPv7qQeGG4Y2XHg86ozjtdS7t6LvpdvHzJ61JnN7373GWny+1XHK6cvkq72nLN9lrzdZvrp363+f1Uj21P8w27G6037W+29S7pPXvL5daF2x63L91h3Ll2N/Bub19430B/bP/gAHtg9F7qvTf3s+5PPdjwEPOw8JH0o9LHqo9r/jD8o2nQdvDMkMfQ9SehTx4Ms4ZfPhU+/TKS/4z8rPS5xvP6UcvR9jGvsZsvlr0Yecl/OfWq4E+ZPytfG7w++ZfrX9fHo8ZH3gjeTL8tfqf07tB76/cdE8ETjz+kfZiaLPyo9LHuE+1T9+fIz8+nsr/gvpR9Nfza9s3v28PptOlpPlPAnF0FUIjCCQkAvD0EADkaAAqyFxOXze3RswLN7f6zBP4Tz+3as2ILQO0GgKw6AAQgtgZRPUSlXAEIRjTMFcBWVmKd33ln9/MZke8EwFAG3hT0YUBSCP4pc7v7d33/0wJx1r/ZfwG63wGIO7zegAAAAIplWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAAEgAAAHigAgAEAAAAAQAAAu6gAwAEAAAAAQAAAowAAAAAQVNDSUkAAABTY3JlZW5zaG90kQsHFQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAdZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NjUyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjc1MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgqtteHgAAAAHGlET1QAAAACAAAAAAAAAUYAAAAoAAABRgAAAUYAAFATTo2gfQAAQABJREFUeAHsnQV8XVW2h1dyb+qppJ5a6i0yWHH3osMAA0wHtyIFBhhskCLFi/vgDxic8Xn4AA+GGWCgSN3d3ZN7k7f2bQtpGrly7jl7n/Ot3y9NcnNk72/vpP+7zpKCKjXBIAABCEAAAhCAAAQgAAGrCRQg3K1eHwYHAQhAAAIQgAAEIACBFAGEOxsBAhCAAAQgAAEIQAACDhBAuDuwSAwRAhCAAAQgAAEIQAACCHf2AAQgAAEIQAACEIAABBwggHB3YJEYIgQgAAEIQAACEIAABBDu7AEIQAACEIAABCAAAQg4QADh7sAiMUQIQAACEIAABCAAAQgg3NkDEIAABCAAAQhAAAIQcIAAwt2BRWKIEIAABCAAAQhAAAIQQLizByAAAQhAAAIQgAAEIOAAAYS7A4vEECEAAQhAAAIQgAAEIIBwZw9AAAIQgAAEIAABCEDAAQIIdwcWiSFCAAIQgAAEIAABCEAA4c4egAAEIAABCEAAAhCAgAMEEO4OLBJDhAAEIAABCEAAAhCAAMKdPQABCEAAAhCAAAQgAAEHCCDcHVgkhggBCEAAAhCAAAQgAAGEO3sAAhCAAAQgAAEIQAACDhBAuDuwSAwRAhCAAAQgAAEIQAACCHf2AAQgAAEIQAACEIAABBwggHB3YJEYIgQgAAEIQAACEIAABBDu7AEIQAACEIAABCAAAQg4QADh7sAiMUQIQAACEIAABCAAAQgg3NkDEIAABCAAAQhAAAIQcIAAwt2BRWKIEIAABCAAAQhAAAIQQLizByAAAQhAAAIQgAAEIOAAAYS7A4vEECEAAQhAAAIQgAAEIIBwZw9AAAIQgEDoCHy3ukq+XVUpnyyvkiWJKlmaEFlaUSVtigqkTVykJF4gu7UskG2bF8jWzQqleSx0CJgQBCAQQgII9xAuKlOCAAQgEFUC09ZVyfDpCfluVVXaCFqpkN+zZaHs2Uo/9LP5HoMABCBgIwGEu42rwpggAAEIQCBjApNVtB8/uiLj86qf0LFRgZzasVCGdMAFX50LX0MAAnYQQLjbsQ6MAgIQgAAEciBgRPv5ExKyUMNhvLAdi1XAq3jft3WhF5fjGhCAAAQ8IYBw9wQjF4EABCAAgSAJjJiRkDcXVno+hJNUvJ/bOZaKi/f84lwQAhCAQIYEEO4ZAuNwCEAAAhCwi8DYNVUyZGxuITL1zahX04KUeD+0Dd73+jjxMwhAIP8EEO75Z8wdIAABCEAgjwQen5uUJ+Yk83iHDZc+tn2hnNspJiYOHoMABCAQBAGEexDUuScEIAABCHhG4JRxFfKDln/0w7o23uB9P6ot3nc/eHMPCEBgcwII98158B0EIAABCDhEoFL1+k5fl/s+4jPV835RFyrP+A6eG0Ig4gQQ7hHfAEwfAhCAgMsEVmuEzF6j/BfuhtkJmrh6TTfEu8v7h7FDwDUCCHfXVozxQgACEIDAjwQWa/nHg77LX2Lqjzeq44sjNGRmRBkdm+rAw8sQgIDHBBDuHgPlchCAAAQg4B+BWeur5KgfghPuZqb7aa33+3oj3v1bde4EgegSQLhHd+2ZOQQgAAHnCUxcWyUnjAlWuBuIg4oL5cl+iHfnNxQTgIDlBBDuli8Qw4MABCAAgboJfK/VZE7VqjI2GOLdhlVgDBAINwGEe7jXl9lBAAIQCDWBUauq5Izxdgh3A3qPloXySF8876HedEwOAgESQLgHCJ9bQwACEIBAbgQma6jM8RaEylSfxeElhXJrT8R7dSZ8DQEIeEMA4e4NR64CAQhAAAIBEFigVWUODbCqTF1T/pWWirySUpF14eF1CEAgSwII9yzBcRoEIAABCARPYF2lyO7fBFPHvaHZDy2NyXmdqfPeECd+DgEIpE8A4Z4+K46EAAQgAAELCeyiwr1CBbyNhni3cVUYEwTcJYBwd3ftGDkEIAABCCiBAzVUZomGzNhqiHdbV4ZxQcA9Agh399aMEUMAAhCAQDUCvxhdIdPW2SvczVAR79UWjC8hAIGsCSDcs0bHiRCAAAQgYAMBU8fd1HO33W4si8vP2xbaPkzGBwEIWEwA4W7x4jA0CEAAAhBomMBVUxLy7lJLg9yrDb+55qk+0rdItmteUO1VvoQABCCQPgGEe/qsOBICEIAABCwk8OTcpDw6J2nhyLYc0jYq2o14b0mxmS3h8AoEINAgAYR7g4g4AAIQgAAEbCbw0bJKuXRywuYhbja2ozRc5mYNm8EgAAEIZEoA4Z4pMY6HAAQgAAGrCMxeXyVH/lBh1ZgaGsxFXWJyZifc7g1x4ucQgMDmBBDum/PgOwhAAAIQcJDAHqPKZa0b0TI/0r23d1z2b02y6o9A+AICEGiQAMK9QUQcAAEIQAACthM4bXyFfLfK/soy1Tl2bqzx7n3i0rMJyarVufA1BCBQNwGEe91s+AkEIAABCDhC4JbpCXlrkf2VZWri3KNVYUq813yd7yEAAQjURgDhXhsVXoMABCAAAacIvLIgKXfOdCxWZiPhszrHZFgp8e5ObTgGC4GACCDcAwLPbSEAAQhAwDsCX62sknMmuJWgWn3292vIzL7qfccgAAEI1EcA4V4fHX4GAQhAAAJOEEhoePvOX5c7MdbaBtmnaYE80S8uJXHi3Wvjw2sQgMAGAgh3dgIEIAABCISCwJmaoPqNYwmq1cH/ol2h3NCD+u7VmfA1BCCwOQGE++Y8+A4CEIAABBwl8LB2T31au6i6bEa4GwGPQQACEKiNAMK9Niq8BgEIQAACzhH4v+WVcvEkdzqo1ga4pEhDZvrGxYTOYBCAAARqEkC41yTC9xCAAARCSKBcY8Anrq2qtUnRoOJwiMQlGuh+4LfuJqhu2nb7alOm+7U5EwYBCECgJgGEe00ifA8BCEAgBATKtaT5XxZXyqjVlTJBBfvENXU3J2qjXt59WhXIbsWFsp+KxiYOR2qcPK5CRq+ue66uLO2wLjE5qxMlIl1ZL8YJAb8IINz9Is19IAABCPhAYHFFVUqwG9E+bV3mArZTowIxHt8zOhZKR/3aNbtLa7m/rDXdw2BP9S+SnVq4twZhYM8cIGArAYS7rSvDuCAAAQhkSMB0Dn1KkzPnmriYHK1HkwK5UJsCHdzGLff735dUynVT3Y5z37R0u7QsTMW7b/qezxCAAAQQ7uwBCEAAAo4TMJ71R7SiyvtLNT7GYzulY0wu6+pOyIZh8YvR7se5b1pGQmY2keAzBCBgCCDc2QcQgAAEHCdwhtYvH5XH+uWDNPb9SW0O5Ir9amyFjKsnpt+VeZhxNtIHHk/3K5JtmhMy49K6MVYI5IsAwj1fZLkuBCAAAR8I3DYjIa8v9N7TXnPozdTp/tn2jWq+bOX3981Kyv/MD0ecuwG8d6tCebCPO2+crNwUDAoCISGAcA/JQjINCEAgegT8juce0KxAXh5YZD3oz1ZUyrCJ4Yhz3wT7cg1XOlnDljAIQCDaBBDu0V5/Zg8BCDhKwNQsP2t8IqvKMblMeUiHmFzRzW4BqYV15MgfKmSBB0m6ubDy8txidbg/pSEz/WjM5CVWrgUB5wgg3J1bMgYMAQhAQCTIsofndI7JBVpxxma7flpC/qYlMcNkB2qFn5G9CJkJ05oyFwhkSgDhnikxjocABCAQMIEZ66vkl2MqxDRZCspu6xmXw0rsLRX5VxXtN6h4D5td0z0uJ7S3l3vYeDMfCNhGAOFu24owHghAAAINEHhca7U/oeUfgzTTnOmxvnHpqfXebbT5GiZjwmU0oihU1la73D6tFX5MnX0MAhCIHgGEe/TWnBlDAAIOEzBh28bbPiOLrqheT9t0WL2/t72hGxdOSsi/lgf4WMJr4Buvd7g+6bhVn3hgEIBA9Agg3KO35swYAhBwmMBHyyrl0sn2hIAM1Vj38zTm3UZ7XktC3q+lIcNoN5bF5edtCZkJ49oyJwjURwDhXh8dfgYBCEDAMgLPqRh9wCIxauq7P9e/SPpaWO1krDZhGqLNmMJopY0LtMpMXDpryBIGAQhEhwDCPTprzUwhAIEQEBiuCZd/saxaylHq+b1ZPcA2Wpi6qNbke0y7Qhnew07uNcfK9xCAgDcEEO7ecOQqEIAABHwhcJJ6kMerJ9k2M509TYdP2yxsXVRr8rW9uk/N8fI9BCCQGwGEe278OBsCEICArwR2+G+5r/dL92ZHqNd9hIVe9zB2Ua2+JmVaXcZUmSnRajMYBCAQfgII9/CvMTOEAARCROCQ7ypkoWkNapnFVDe+sVWRGCFpk4Wxi2pNvidqN9urLe9mW3PMfA8BCGRHAOGeHTfOggAEIBAIAZNsaZIubTRbK8yEsYtqzfW/R8tyHqDlOTEIQCDcBBDu4V5fZgcBCISMwCVaCvITLQlpo+3QokCe0QoztllYu6hW5zygWYE8P6BIKDJTnQpfQyB8BBDu4VtTZgQBCISYwIgZCXlzoZ3C3WD/ZPtGUmxZWfewdlGtuc2HdYnJWZ0sg19zkHwPAQjkRADhnhM+ToYABCDgL4HH5ybliTn2NhV6QKvL7GNhdZmwdlGtvvtaa2VI43XvrjXeMQhAIJwEEO7hXFdmBQEIhJTAd6ur5LRx9jYVsjXOPcxdVKtv9ePbF8q13antXp0JX0MgTAQQ7mFaTeYCAQhEgoCtlWUM/H00QfIBTZS0zcLcRbUm68e1POSuxSSq1uTC9xAIAwGEexhWkTlAAAKRIjB8unZPXWRnnPvBbQrlrl72CXezQU7VJxXf6xOLsNteGqr0kIYsYRCAQPgIINzDt6bMCAIQCDmBz1dUygUTE1bO8uSOMbm8q50Jkk9qfsCjFucHeLmgN2ozrJ9rUywMAhAIFwGEe7jWk9lAAAIRIXDWhAr5eqV93mMj2o14t9GiFC7Tp6mWh9TSnM3sXAobtwdjgoATBBDuTiwTg4QABCCwOYE/L66UG6fZ53U3YTImXMZWs/UNTz54nVcak6GdUe75YMs1IRAUAYR7UOS5LwQgAIEcCVw9NSHvLLEr1v2NrYukdxN7yxE+Oy8pD862t5xmjltis9Obq2Y35SFtXo/NBsw3EIBAgwQQ7g0i4gAIQAACdhKYtLZKjAd5hSWOd9O98+WB9nVOrb56htkvx9hbTrP6WL34+ph2hTK8B4mqXrDkGhCwgQDC3YZVYAwQgAAEsiTw8oKk3DXTDg/yhRqacbYDoRlDNbH3C03wjYo93Dcue7a0N3wpKuvAPCHgBQGEuxcUuQYEIACBAAnYEjLzlobJ9LQ4TGbTEr04Pyn3zLLjzc6mMeXz864q2h9X8Y5BAALuE0C4u7+GzAACEIg4gRnrq+TcCQmZXx5clZmLu8TkjE5uJEJOW1clvxgdnXAZ8+txnYbLHKdhMxgEIOA2AYS72+vH6CEAAQikCHy4rFKu0yozawNwJNvcdKmu7TFsUkI+Wx6dcJke+iTElIdsheO9ri3B6xBwggDC3YllYpAQgAAEGiYwalWVXK/ifZZ64P2yMhWEpktn18b2VpKpjcUrC5Ny54wA3uXUNhifXjP5ByYPAYMABNwlgHB3d+0YOQQgAIEtCJgwkBunJ+RbFfH5NlNu8OE+RbJ9C7dEu+EyW9/c/FzDZZL5x5TvZUj7+o01UsZ43ftr9R8MAhBwkwDC3c11Y9QQgAAE6iSwTMtD3qTi/SMNn8mXlaqH/bfaJXX/1u7GTf9mckI+ziOjfLHP5bpHtC2UEWXEy+TCkHMhECQBhHuQ9Lk3BCAAgTwSeHNRpbypISFj13jrVj5axd9QDbkobeS259bwGaFvcKJm92to076t3H3DFbX1Yr4QqE4A4V6dBl9DAAIQCCEBLwR8m6ICOVi96yYRdVCx24J90xKbKjwmXGZ9/h5MbLqVVZ930/KQj1Ee0qo1YTAQSJcAwj1dUhwHAQhAwHEC7y2tlO9WV+mHfm4gBr6TetNNwuluLQtk2+YFsnWzQjEx7WGzK6Yk5H3lEjW7pWdcjizB6x61dWe+7hNAuLu/hswAAhCAQMYETMn32sR7+yJJCfZYOJzqDXL58+JKuVEr8UTNttY3Yy8O0MXGIAABpwgg3J1aLgYLAQhAAAJeElhSsSFcZlW0KkOmEF7VLSYndQjhYxQvNwjXgoBlBBDuli0Iw4EABCAAAX8JXDM1IW8viV64jGnK9IJ63YvR7v5uOO4GgRwIINxzgMepEIAABCDgPoF/qGi/VsV7FO0CrQ50jjZmwiAAATcIINzdWCdGCQEIQAACeSKwRp3tx2l1mXkm8D9iVqLVgl4YEHe+tGfElo3pRpgAwj3Ci8/UIQABCEBgA4GRs5Ly0vwIBrrr9E/pGJPLtJkWBgEI2E8A4W7/GjFCCEAAAhDIM4FvtDzmmeMr8nwXOy9fpFUhTax7/6YRKSVk5zIwKgikRQDhnhYmDoIABCAAgbATOGdCQr5aGb0kVbOux7QrlOE94mFfYuYHAecJINydX0ImAAEIQAACXhB4dWFS7pgRzXAZw++pfkWyU0i64nqxH7gGBGwkgHC3cVUYEwQgAAEI+E5gkdZ0P3ZMhayMZoEZOahNodzdC6+77xuPG0IgAwII9wxgcSgEIAABCISbwM3TE/LHRdEMlzEre1/vuOzXWoPeMQhAwEoCCHcrl4VBQQACEIBAEAQ+W1EpwyZG1OWuwHdtWSiP98XrHsTe454QSIcAwj0dShwDAQhAAAKRIfDrcRUyZnX0arpvWuCby+JyVFu87pt48BkCNhFAuNu0GowFAhCAAAQCJ/DMvKQ8NDu6SapbNTdNmYoE6R74VmQAENiCAMJ9CyS8AAEIQAACUSYwY70mqWon1WR0ne5yRbeYDOlAU6Yo/x4wdzsJINztXBdGBQEIQAACARK4ampC3l0S3STVbk3U696/SFoR7h7gLuTWENiSAMJ9Sya8AgEIQAACESfw3tJKuXJKdJNUzfKfVxqToZ3xukf8V4HpW0YA4W7ZgjAcCEAAAhAInoDxtR+n4TLT1kU3Xqa1ettf1Fj3Lo0Lgl8QRgABCKQIINzZCBCAAAQgAIFaCDw8JylPz41ukqpBcnLHmFzeFa97LduDlyAQCAGEeyDYuSkEIAABCNhOYOyaKhkytsL2YeZ1fHF1tpsKMwOa4XXPK2guDoE0CSDc0wTFYRCAAAQgED0CF01KyKfLo5ukalb85+0K5cYeZKlGb/czYxsJINxtXBXGBAEIQAACVhD42+JKuX5atJNUzUL8vl9cdi6msrsVm5JBRJoAwj3Sy8/kIQABCECgPgLlmpt6/JgKmRnhJFXD54A2hXJPL7zu9e0VfgYBPwgg3P2gzD0gAAEIQMBZAo9okupTEU9SNYt3T++4HNAar7uzG5mBh4IAwj0Uy8gkIAABCEAgXwQmrq2SE9TrHnUzoTImZAaDAASCI4BwD449d4YABCAAAUcIXKHNmN7XpkxRt5vK4nJ0W7zuUd8HzD84Agj34NhzZwhAAAIQcISAEe1GvEfdtm5ekGrKFHUOzB8CQRFAuAdFnvtCAAIQiDiB+Zr5OV8jUDo1EulQZH+dcBMuY8Jmom73aaz7fsS6R30bMP+ACCDcAwLPbSEAAf8I/HtFpXy6okqma2WQJvqU34jEDioW25vP+jGo2H7R6B+t/N7p7SWV8rmux1+0zGJ169a4QLZrUSD7tipMiULT+Mc2e2peUh6ZHe1OqmZNBpcUyu09iXW3bX8ynmgQQLhHY52ZJQQiS+CF+Um5d1b9YqulahBTLWPPloWpWtWt0CR52S+Pa2WWJ7RCS0PWVUX8URpHfUL7mLS2aC1mrq9KlYYs3/w9R0PTCd3PC/RN1esDi6R3UwvfXYWONhOCwOYEEO6b8+A7BwmM07bk5uObVZUyTf9jXa26IPVRWSVr9OteTQpkhxaF8jP15pm23b31eywaBD5Tz+6wiZnFJZuIjT3V67uXfhyj4jHGdvFks7y5qFJGTM9sLbqogP9l+w0Cvqkl+ZCmGZNpyhR1O6dzTC4ojUUdA/OHgO8EEO6+I+eGXhAwnq93NFnsHX3sPinDmNNSFQM7qYg/UD2s+xKn6cVyWHuNu9XT/gf1uGdrfdWjeIy2e/9Fu5jYIhyznUvQ5w0ZWyFj9Q12NtZL12GTgA9av//f8kq5eFJmb0CymbPt53RXB8jrWxVJI97Y2r5UjC9kBBDuIVvQKEznAY0xfXlBUtZ74PQywsx0BDTlzUr5Hyh022eoetu/UK97rtZDRUpKwLeNCWE0mdP8YFml/HZy7mJ3oD4xO0+9vPvo05Ag7dRxFfL96uzehAQ5bq/vfbOWhjQhTRgEIOAfAYS7f6y5kwcELtdybB/moZZyscbRHqWi7GhNuuqv4gALBwGv90tnfXNnBPyx+tHOxNRgaRF4WOPan/aw8+iZnWJyYZeYBCUZX1THwT0zs3+SkxY0Bw4yIWUP97EoCcEBZgwRArkSQLjnSpDzfSNwzoSEfLUyd+9pQwO+SAWBEQaY+wSGazxyzeolXsyqowp4E7rxS02ebMlWaRCpCS0xISZe2iDt4nmhet+317A3v21hxYYk1RW5P0Twe+ie3+/Z/kWBrIHnE+GCEHCEAMLdkYWK+jCzSWzLhdn+GvtuBHxPEllzwRj4uXepV9SEVeXLTPWTTQKeGPi6KZ+k8e3js4xvr/uqIkXqcjfi/bSO/r97unVGQt5Y6O2bkfrmauvPTuoQk6u6+c/fVh6MCwL5JoBwzzdhrp8zgf+ol/089bb7bR3Uq3qJivfDNXwGc5PAoxqi8aSHIRp1UUglT2r4jPHAU4VmS0qHfF8hC7XZUr7sQM1TMeLR1OX3y77Uv0vnBvB3ya/5pXufNhopY5JU2/rIPt2xcRwEwkgA4R7GVQ3RnBbpI+mz9D/HGdo4Jygbqh6987T0GeYega9WVsk5E7Q1p09myo0aD+TPSdjbjPjOX5dLIs+/wv2U/dXd4lr61T/xftQPFTJLK1xF3a7QN01DdN9jEIBA/gkg3PPPmDvkQOAZ7VT4kAWdCo3X/UoVBVQUyWExAzr1gO8qZKm+AfTTTDOn0zVPYtvm/olIP+eX6b32HlUuq/IXsfTjcJqpdjTi3a9KJ5drpZwPtWJO1M30yHheY90xCEAg/wQQ7vlnzB2yJLBO/z80sbGmTb0Nto2KsKtUFJjPmDsEbp+RlNcW+qAaayCJ6zYx4v0M/WgW8Wgrvz3T5+oTsvP1SVm+7Wl1LDxsgWMh3/NM5/oPanWZvQMu05nOODkGAq4TQLi7voIhHv+rKrbuUNFlk5n269d0j8shGlOLuUHgI/WIXupBDfFsZ2tCOM7Q5MnBEc6VOEXrnv/gc91z85RsuNYZz2d7hj9rB9UbtXIRJnKEhoeNUN4YBCCQXwII9/zy5eo5EAjiP/t0h3ttj7gcr8mImP0E1uiTmyM1FtnvcJmaZA5TIWm876bpV9TsIi0H+anH5SDTYWji3Uf2jkuJefyRB/tMm3sN0yZfmIhBbJJUy6jExXaAQF4JINzzipeLZ0tgqobHHDvav6TCbMZ5sVacMUIMs5/AjdMT8udFwcciN9ftYvaM8cAX5kdLWrkY16tX+m/qnQ7COqnL/Yl+cemupTu9NlPi0oTzYRsImK62Q0nkZztAIK8EEO55xcvFsyVgam+bGty22+80bMbU8cbsJvBv9Yyeb5Fn1CTzna7i3fQLiIKNnJWUl+YH+/v8h4FFMtDjrsim6tXBmvyMbSBg+l4YrzslUdkREMgfAYR7/thy5RwI3Kmi/ZU8Ns7JYWhbnPpo37js3jIaAmyLyTv0gl+ddzNBcoyGWxkPfD68wZmMI9/Hvqii/R4V70HbU1r5ZCePy0Xu8N/yoKdl1f1v7Rmn94VVK8JgwkYA4R62FQ3JfH47JSEfLA3m0Xo2CJ9RQeBn/ehsxhj1c97SUJlbNGTGNivRxjVndCqUk0NcB3vUqio5Y7wdnumX1PO+lYeed4T75r9R++hTpAc0rwCDAATyQwDhnh+uXDVHAjZ6R+ubUlONXX66n/eP4uu7Jz/LjIBJUv3lmAqZY2nDnJ2Ljfe9MJRPb0zzJdOEyRbz8o02wn3LVf2fAUX0MNgSC69AwBMCCHdPMHIRrwm4JtzN/E18p6ll3DUPSXBe843q9UwzL9PUy2b7tca+m069LUKW9zxEkzjHajKnLfaYhrjtlmOI2wrdSvtqcylscwJmD/+2a8g28OZT5DsIBEYA4R4Yem5cHwEXhbuZz0Fa3/3uXjwmrm9tg/zZpLVVKa97kGNI594DNJTDVOjYN0QNbW6bkZDXF9oV/na/vtHOhfH7Gs53hYb1YZsTaKfhXyZJ1fS9wCAAAW8JINy95cnVPCJwmTbM+aejrcSHaZnIsygT6dFO8P4yd2ji86uOJD6fYrzvKuDD0Hn1L1oOcriFzYpu0qZBR2vzoGzMxjcj2cwjH+dc3T0mJ7bH654Ptlwz2gQQ7tFef2tn/5IKq5EOlIOsC+Aj+hh+jxwfw9d1bV7PjcA07RFwsnbyXG13xMyPk9yquXrfNXTG9XbyNvdmMMJ9qL5BKs2gzepk3UemSdxaR/bRjxvKpy9Msr7JJcAgAAFvCSDcveXJ1Twi8LVWoTjLkioU2UzJhDo8rwlaGeiAbG7DOVkSeHhOUp6e65biOl2f4hgB3zg753CWpLw9bf9vy2WZpZElpZqbYmrrH64dbk2jrIbsdP379K3+ncLqJoADo242/AQC2RJAuGdLjvPySsBUADns+3JZYel/8ulM/iINmTmTkJl0UPl+jGmcc/K4hMwvd0t4bWu87+oZdvVpzk1ajvNPFnSwrW/DGQF/hIp3I+DLNOG8pi3UvXO/1qT/xxK74vVrjtOG782TDBOKhEEAAt4RQLh7x5IreUzgSk36es+hWu41p99GE7Se7x+XblSZqYnGiu+f0+oyD2iVGRfNvCE0Al63mFNm8lZM/ooLVqRPNnbREp3tNNqjkz46W6Bv8pbo0EetqpTlbkwhcMzm6ZBJUuVvYOBLwQBCRADhHqLFDNtU3lTP3AgLG+ZkwvkETc66RpO0MPsIrFWHqYlRnqyVZly07TSG2ITO5FrS0M+5r9T3SftQPtFP5IHf60J98ng2Tx4DXwcGEB4CCPfwrGXoZjJLG+Uc9YMd3RazhYvHKVty/pxnyhOayiAu29kq3s/Xj0JHvO+Xqsf9I0crRrm8T4Iae5+mG0pDBnV/7guBsBFAuIdtRUM2H5dK99WFHo9TXWTseP2SSQn5ZLnb8cqmgsf5Gjpjuq/abq5XjLKdr43ju0N7WxyqPS4wCEAgdwII99wZcoU8EjAl5Ew4gyul+2pDgcepNir2vPbDaq1gNKFCyt3W7imgpqShCZ+x2cZraNJJY9x+kmYzXxvHtn/rQrm3N0mqNq4NY3KPAMLdvTWL3IhdaFPf0KI8q/WMt1evKGYngac0UfURRxNVaxLdVfsHXKJxxQO1JKmtdpqWUvyOUoq2Lk9exvXSwCLZyuI9mZdJc1EI5IEAwj0PULmktwQWaPm107R03zzHSvdVp3BJ11iqRnT11/jaLgLnTEjIVytD4HZXrC3VuXlxl7gc187O8IQwvVGyaxfbO5pTtUb+pfp3EIMABHIjgHDPjR9n+0TgDU0ivNXhJML99FHxfTwq9mm3ZHebL1S0D1XxHiY7rn1hSsC3tEwvTdBwmRMJlwnTVmtwLh21pKYpDVls2V5scOAcAAHLCCDcLVsQhlM3AZerUZj/tN7elvbfda+uHT95UMNlntWwmTCZCZkxoTMmhMYmM2+SzJslLDoEru0Rl+MtfQoUnVVgpq4TQLi7voIRGr9JIjxTkwgrHP2//uPtG4ltns8IbZ+0pmpqu5+te2yM7rWw2cUq3s+wqJ72i/OTco92IMWiQ2CQVj16sh9JqtFZcWaaDwII93xQ5Zp5I/D43KQ8McfN/+yf7Fckg4rtTRjM26I5dmFTY9w83QmjHawl+YyA72pBN9/pWjHqmNFUlwnjPqtvTo+rcN/VgbKl9c2Bn0EgSAII9yDpc++sCFwxJSHvL3XP7f6nrYukRxOEe1aL7vNJYegfUBeyLiraTeiMEfFB21VTE/LuEvd+l4Pm5vL9f6GhMjdoyAwGAQhkRwDhnh03zgqQgKkuc8HEhJga7y7ZZxoq04zELCeWbLFWMjpLY7CNVzisZsJmjPc9SPtQn25cHtKnG0Fytfne5m+gSVIt1bwfDAIQyJwAwj1zZpxhAYFPtdPlRdrx0hUrU0/7H9XjjrlD4O/qCb5OPcJhNhtqvp80tkLGrwnvG6Qw759s52ZbvkW28+A8CARBAOEeBHXu6QmB5zW57X5Hktts8G56Aj1iF7lhWkL+ujjcoRxB13x/Rqv4mCZrWHQI9NdKR69oQyYMAhDInADCPXNmnGERgbtmJuXlBfb/p/9Y37jsZlk5PouW0dqhzFy/IWRmocPNv9KFe7zWfP+NNm1q7nP0zGxlfLzWdF8X7vdH6S5DZI67u1dcDrIgzyIywJloaAgg3EOzlNGdyFWarPquxcmqbYsK5H+1hrt+whwk8Lo2/7rN4eZfmSDftnmB/KZrXHZs4e9mNXwNZyw6BIxoN+IdgwAEMiOAcM+MF0dbSsDmdvUntI/JNd19dmNauk6uDuu3+ubwA4vfHHrJtUiLzfxGk1aHdPBvz07TJOBTx1fIynCnFHi5TKG41iuapNq/qb9vEkMBjklEmgDCPdLLH67JX6jJqv/SpFWbrI262Z/vH5duFtTNtomLa2OZsLZKhmpjpmUREpZHa9k+EzrTxienqMs9Glzbz7aMl9wfW1aCcbhEAOHu0mox1gYJPK2Jbg9blOh2kXouz7SoW2WDADmgTgJvLaqUW6ZHSLkrCZNEaLzvfuRnmDKvv9IKM1F6c1TnZovID0rVoWFKQzYLvqVARIgzzTAQQLiHYRWZw2YE/qgC62YLBNYAFT3PDygSyhVvtjxOf2OEuxHwUbPfdI3JaR3zHzpzv77pfl7ffGPRIWCaMZmmTBgEIJAeAYR7epw4yjEC72g88n1aKnJ+gNVAHuwTl71b8R+SY1un3uEab/DQiRUyIYJ1xw8r0dAZFfAd8phlbWLdjdedCjP1bsNQ/dD0Enhcq25hEIBAegQQ7ulx4igHCczQMnOPzknKOwG0VL9ak1FP1KRULHwEXGv+5eUK9NREQhM6s08e35DeoSVeX3WgxKuXXKN+rSf7FcmgYpJUo74PmH96BBDu6XHiKIcJmDrvT8+rFNPG3g+7qSwuR7fF0+4H66DuEfVEygtKY3JO5/y8MR2nTzOM1x2LDgHTQ+Da7njdo7PizDQXAgj3XOhxrjME5mrIzCsLKuWVhUkpz1OI8p7qhbyyW0y6U0HGmX2Ry0Av0ipGxvseVTtQ63Ab73vXPOz3k8dVyOjV/rzRjur62TTvYtXsr2sn1Y4kBNm0LIzFUgIId0sXhmHlh4Ap6/emive3NQZ+hUcFQgZqEupxGhZzHAlW+Vk0S68axRKRNZeil4bO3KVNdHo38TbM4XZtyPQaDZlq4g7195dq/sSpPiRAhxoik4sEAYR7JJaZSdYksFDDZt7W2Pf3VMB/n6Vnz3jY929diGCvCTdC30exRGTN5TXi3YQ5eNlt9cNllXL5ZI/eWdccMN9bSWAr7dr7klbhwiAAgfoJINzr58NPI0BgkYr4UauqZKzG1i5OVMkiDa81ry3e+Nk8vu3YSKSjVtMwXxsP+55aCaEVIZkR2B0NTzGqJSKrk4mrw32Yhs14VTIS4V6dbnS+vrd3POUMic6MmSkEMieAcM+cGWdAAAIQ+JFAlEtE/ghh4xcm7n2YJq6W5Rg687qGydym4TJYtAgcqiVH7+iJRyRaq85sMyWAcM+UGMdDAAIQqEEgyiUia6CQDvpU6jytOJNLU52oV+2pyTRK35tOqn00/AqDAARqJ4Bwr50Lr0IAAhDIiABic3Ncg4oL5aQOhXKg5oFkasO0Ys9nEa7YkymvMB1/tr7pu1Cf2mAQgEDtBBDutXPhVQhAAAIZE4h6icjagO2ojXWMeDcfDZX7Mx1Tn5uflCe0cRoWTQLdtLzoG+p1b5T5+71oAmPWkSOAcI/ckjNhCEAgXwQoEVk32WbqRDVe+K4aStNDY+B71YiD/2pVpXys1WRMAyYs2gRoYhft9Wf29RNAuNfPh59CAAIQyIgAJSIzwsXBENiCwB5aaveRPiSpbgGGFyCgBBDubAMIQAACHhO4Y2ZSXl1AuIfHWLlchAg8079IdmhBkmqElpyppkkA4Z4mKA6DAAQgkC6BpEZ7XKgJlv9ZoUHbGAQgkDGBEzvE5OpuJKlmDI4TQk8A4R76JWaCEIBAEAQmr61Kiff55cRsB8Gfe7pNoLVGypgk1bba+A6DAAR+IoBw/4kFX0EAAhDwlMD7Syvliik0EvIUKheLDIHfqsf91+p5xyAAgZ8IINx/YsFXEIAABDwn8NS8pDwym3h3z8FywdAT2LZ5gfzPgKLQz5MJQiATAgj3TGhxLAQgAIEsCFw3LSF/X0y8exboOCXiBB7Q6jL7aJUZDAIQ2EAA4c5OgAAEIJBnAss0WmbYpAoZvZp49zyj5vIhI3B420K5tYzSkCFbVqaTAwGEew7wOBUCEIBAugRGrTLJqhWyhqiZdJFxHAQkprmpJkm1rEbDLtBAIKoEEO5RXXnmDQEI+E7gT4sq5abpJKv6Dp4bOk1gaGlMzutMkqrTi8jgPSOAcPcMJReCAAQg0DCB+zVR9XlNWMUgAIH0CBhvu/G6G+87BoGoE0C4R30HMH8IQMB3ApdMTsgny0hW9R08N3SWwIiecTmihCRVZxeQgXtGAOHuGUouBAEIQCA9ArPWb2jONGMdyarpEeOoqBPYWyvLPKgVZjAIRJ0Awj3qO4D5QwACgRD4dHmlXDSJePdA4HNTJwmYmu6mtjsGgSgTQLhHefWZOwQgECiBF+cn5Z5ZxLsHugjc3BkCQ7SL6hXaTRWDQJQJINyjvPrMHQIQCJzALTMS8tZC4t0DXwgGYD2BtkUbklRbEzFj/VoxwPwRQLjnjy1XhgAEINAggfWq2U3IzJcrEe8NwuKAyBO4qntMTmqP1z3yGyHCABDuEV58pg4BCNhBYKomqRrxPluTVjEIQKBuAtu3KJBn+xfVfQA/gUDICSDcQ77ATA8CEHCDgElWvVjLRFah3d1YMEYZGIFH+sZlj5aUhgxsAbhxoAQQ7oHi5+YQ8IbAVyurZKZ6a2ds/FhRo1hJicaE9mlaIH03fnRpTGUGb8h7e5XXNNb9do15xyAAgboJHNW2UG4uI9C9bkL8JMwEEO5hXl3mFmoC/1hSKZ+pl/azFZWyPEOt10JDRHdoUSjb6WPnAc0KpL8K+naa+IUFT4DOqsGvASOwm0AjdbabTqrdcEDYvVCMLi8EEO55wcpFIZBfAvdqCcEXtJSgl7anNjjZs2WBmM/d+Q/RS7QZX+uKKQl5fynJqhmD44TIELigNCbndCZJNTILzkR/JIBw/xEFX0DADQK/HFMhk9bmNxAaER/sXliS2JCsOmZ1ftc52FlydwhkT6C3PiU0XncMAlEjgHCP2oozX6cJHPVDhczyufIIIj6YLfO9ivaLJlVkHAYVzGi5KwT8J3BHr7gc2oYkVf/Jc8cgCSDcg6TPvSGQAQGTtGiSF4M0kxR2pH7sUsx/ln6swzsaLnO1hs1gEIDAlgT2a10o9/UmSXVLMrwSZgII9zCvLnMLDYH/M6UCtc63Lba3xsEbEX8w3q68L8kz85Ly0Gxv8xnyPmhuAAGfCLw0sEi20gR7DAJRIYBwj8pKM0+nCVw3LSF/Xxyst702gD/TqjRHlcRSXvgmOOFrQ+TJayP0acubAT9t8WQiXAQCHhM4pWNMLutKkqrHWLmcxQQQ7hYvDkODgCEwTbtqHq8JqUmL8xR7NClIifefqxe+PWUlPd+4mqua6qz6by39iUEAAj8R6NBoQ5JqMdr9Jyh8FWoCCPdQLy+TCwOBx+cm5Yk5boRKGNF+bPtCOa4dAt7rvWeaa5lwqen6Rg6DAAR+InBt97gcr393MAhEgQDCPQqrzBydJnC9hsn8zcIwmfqgIuDro5P9z75cWSmXTE7IWjfex2U/Uc6EQAYEdioukKf6URoyA2Qc6jABhLvDi8fQo0Hg5HEVMtrRet4IeO/3qOmYe+1UexKVvZ8hV4RA5gQe7xuXXVvidc+cHGe4RgDh7tqKMd7IEdj9m3JZ53hosxHwv+pQKCdrIhkh8Llv4ee0a+4D2j0XgwAENhA4RsPzhvegNCT7IfwEQiPcF1dUyWJ1Qq3S/8ua6ptu82GqXDQtLEh93Yg34uHfzSGd4V6jymV1SDTaVs0L5OQOMTmshF/IXLfrXTOT8vKCkGyMXGFwfuQJNNXkVNNJtVSTVTEIhJmAU8J9oYrzsWuqZIx+mM9zy6tkSYWIEe0NWVx/l9voP631DXkbdfmlPm/8vpdWxOi58cMch0HAJgJHaLfUOT53S833/A/Q+u+nqIDfXstJYtkTuEKbM72vTZowCEBAKy91icmZnSgvw14INwHrhfsXmoz18fIq+ULLoE1a27BAz3W5uqmAry7kN33dnL8FuaLl/CwJDBlbkXqjmuXpVp/2aw2dOUVDaDriJctqnZbrU8aLJ1fId6vy/7cxqwFyEgR8JNBPGzG9qg2ZMAiEmYCVwn28etM/WFYpn2i3SPO1DWZqxRqv/CYhb74epJnsGATyTWCYlgD8TH8XwmpdGhfIBaUxOZzwmayWeKI6NC7RPWKeQGIQiDqBu3vF5SA6Okd9G4R6/tYJ9+c16epJrVvtQkyvCavZTbPYd29ZIDsXF0rfpgj5UP+2BDS522ck5bWF4Y9lPkFDZy5UAd+Sp1sZ77TP9ImkEe82N+nKeFKcAIEsCByoon2kincMAmElYI1w/1of9RrB7nJnQOOV30298EbEm9jdrupJxCCQK4EX9M3svRGpINJfH3Ub8b53K5JXM903f1pUKTdNp0xkptw4PnwEXtFwGfO3BINAGAlYIdxNSIzxFoXNzB+OTSJ+e62m0ZY6eGFbYl/m86GGjV2uTXeiZGd13uB957/ezFb99+r8eMyRLruZzYyjIZA+gdM1QfUSTVTFIBBGAoELd+Np/40mV60MuS4pUAUyqMUGT7zxxu+qXvkYqiSMv1Oez2m+xi4P/l7LJ0XMBunviPG+U3kms4UfMSMhby4Mb05EZjQ4OooEOuvTblMashkP7qK4/KGfc6DCfbwmVV2mnsSwlbpLZ9d0NmE1GhtvYuTNB3G96VCL7jEnjKkQk4QYNSvS/3iNeD9Nq89g6RO4VP+ufqRPajAIRJXADdqM6RfalAmDQNgIBCrcz52QkC+13GPUraXm0eym3sUNIr5AjKjHIFCdwD0a4/6ixrpH1fZvvcH73psE8LS2wArdKpfqk8yvV0bvzV5agDgo9AR2UYfYE31JUg39QkdwgoEJ92fmJeWh2dEVInXtNRM+kxLwmuRqPvdBqNSFKlKvv6dNdq7UZjtRthLNETHe92PxoqW1DWZp0y7jefej/0VaA+IgCPhM4Ml+cS3bjNfdZ+zcLs8EAhHupvPpWeMrZB3O9gaXdzuNh98g5DfExzd4AgeEkoApj3qshsssoFa3HN1Wve+aeNaBZO8G97r5W2vCEU2eBAaBqBE4rn2hXNcdr3vU1j3s8w1EuBN/md22Mt73TeE0e6o3HosWgTtmJuXVBTylMqveQxugGe/7wTRaafCXwJTYvUyf1qxl6zTIigPCRaCFpsaYJFU6M4drXaM+G9+Fe4U6fg78tlxW8p9ITnuvl4r4fbTWtfnYQb3yWPgJ/EfzQc7TvBDsJwK/1qRVI+Cb8j72Jyi1fEWoVS1QeCkSBC7tGpNTSW6PxFpHZZK+C/dvV1fJ6eOiV9ounxtqW60RnxLxmsDXj5j4fKIO/Non6+/OaP0dwn4isI3ufyPezdMorG4Cb2qDphE0aKobED8JJYGB2k/lD9qQCYNAWAj4Ltxf0kf9I/WRP5YfAruqeNm31QYh34XOrfmBHOBVSequG/55Kt6HauMmrG4Cz2pRgAcpClA3IH4SSgL39o6LqUyFQSAMBHwX7iZR6p/UF8773olr9Mw++ofKeOL31Y/W5OfknbkfN5i6rkqOHc0Tq7pY765vXI33fWv1wmO1E3hAhftzKuAxCESFwCElhXJnT/4TjMp6h32evgt3HvX7v6Va6d+rTfHw+6qYpxiH/2vg5R1581s/zWbqdDfifUgHvO91kbpFQ2be0tAZDAJRIfC6JqlSXjkqqx3uefou3I9Rb+F09RpiwRAo1fAZI+IPaF0gO1PfNphFyPGuf1tcKddPI0m1IYyHaMUZUzayOyFjtaI68I05sqRnu1p/xosQCBuBszWMzryhxyDgOgHfhfvB31XIIlNaBgucgKkRf4B64A/UD+LhA1+OtAeQ0F+fE8dWyJS1/B41BM2UgTP/WR+ltd+xzQk8+vQYubeiiRTv3HXzH/AdBEJIoKu+gTelIRvzpyCEqxutKfku3Hf/ppzGS5btMfOHLCXg1UNpRDxmPwGSDDNbI9OIxQj4Nib5A0sR+Nfnc2X/Y/8hZfcMlmb920MFAqEncFNZPNXALfQTZYKhJuC7cN9rVLmYLpCYnQR6ajlJI97NxwAto4XZSWChPrU6UTupLiViJu0FMvGtRrzvx5vTFLMVK8qlVevHpGnfttJz5GBpVNoybZYcCAEXCZjk9Uf7kqTq4tox5p8I+C7ch05MyBfayQ+zn8BeGgufEvHqiS8mNNC6Bbt3VlJemM+74EwX5vROG2Jdcb6LlHZ5SubOXS0tdipV8X6YxFo0yhQnx0PAKQLP9C+iaaFTK8ZgaxLwXbg/pKXITC1qzB0C7bQMzYGpMBoSWm1atQka42687ljmBEy34QtL47JTcbSfKh1+xJ/lf/93Wgpgq/16Ss+7B2cOkzMg4BCBE7Xa1NXd8EQ5tGQMtQYB34X720sq5ZqpPN+vsQ7OfLspofUgFfKlmviHBUvAVJcxVWawzAkU6vY1oTNnqgc+qnbllZ/K3SP/++P0S44eIN2v3//H7/kCAmEjYMojmyRV45DCIOAiAd+F+yT1Ev4SL6GLe2WzMTdVrWPK7ZmPPWg1vxkbP7/5z8pKOW8Cb4RzYW7Ko16sZSN7awx81Oz2O76U3/3uX5tNu8PJ20npJXts9hrfQCBMBH6rHvdf0+chTEsaqbn4LtwNXdP50XSAxMJBwHjhN4l4vBj+r+mwSQn5bDle91zI92hSICO04sQ2Eeu4et/938hll32yBbrO5+8iHc/caYvXeQECYSBgfs9fGFAUhqkwhwgSCES4PzwnKU/PJc49bPvNPILcJOAH0dzJt+Ul/Mwb1O019GtEWUx2idDeffzx7+X8Cz6sFWDXq/aWdsdvU+vPeBECrhN4oE881YzQ9Xkw/ugRCES4j11TJUO0gQwWXgJGuG8S8UbQY/kl8OtxFTJmNU+xcqXcQkPARvSMy74aPhMFe+75MXLGGe/VOdUeIw6SNof2rfPn/AACrhI4vKRQbtXfdQwCrhEIRLgbSBfq4/1/8Xjftf2S8XhN6MwmAW9CarD8EHh5QVLumslTLC/oxnSbmrCZwfofe9jt1VcnyEm/+t86p1nQKJaq8d5y9+51HsMPIOAiAZOcbpJUe2qYHAYBlwgEJtzfXFQpI6aTVOfSZsl1rCaJ9RAVQ0bINw2/JsoVV0bnr1TNfqI+xZq7Hq97RuDqOfiGHnH5Rbtwb9Q//2WKHHPMX+uhIFLUrllKvDfbumO9x/FDCLhGYGjnmJynlaUwCLhEIDDhbjo+nqDVZRZpB0gsWgQ6Ny6Qw1W8H9G2EG+Hh0v/qOaOPEnuiIdERa7Q6hNDQlx94t13Z8ihg//YILMmPdukGjQ17t6qwWM5AAKuEDBJ6cbrTjM2V1aMcRoCgQl3c3OSVA2F6Jr5Y2nE+5HqhSeZNfd9MEO97aYh0zoKzOQOs9oVhmmpyLNCWuv9H9p86QhtwpSONd+uU0q8x1s3SedwjoGAEwRMTssREQiLc2IxGGRaBAIV7rNUaPxKH++vIjQ3rcUK80F7aTKgEfGD1ROPZU/g1hkJeWMhyj17grWfaZo0XaQCPmxWVznIuubZcq8e0vOew6TABAhjEAgBgb31/54HtcIMBgFXCAQq3A2kkbOS8tJ8lLsrGybf4xzYrGCjFz4mVKPJnPa/V1TK+RPJHcmcXMNn/EpDZq4MWav0887/UJ544vuGJ1/tiDaH95MeNx1Y7RW+hIDbBJ7Xmu4/i1gPB7dXLNqjD1y4m06qxuueINQ92juxxuw7aE1t8/jSeOF7k/Vfg07935ok1QlachXznsAxmqw6XJNWw2L7H/CmfPTRrIyn0/6kbaXL5XtlfB4nQMBGAiaPxeSzYBBwgUDgwt1AGqGP99/k8b4L+8X3MZrSfJsEfJQa4+QC+jFNUv09Saq5IKz33EP1DaUpF+l6QltFRaU0b/GImM/ZWKdzBkmnc3fO5lTOgYBVBEq0bLFJUm0TnvfkVvFlMN4SsEK4z9ZY97MnJGReOV5Cb5c3XFfb08TBq2g6jESiehd2jHrbf61edyx/BPbRvWiS2ooddtJ9+OFMOfCgt3KC1OXyPaX9ST/L6RqcDAEbCFylHveTQlxBygbGjMEbAlYIdzOVt7Su+y3UdfdmVUN+lQEmDj4VRhPDQ1LHWp+jb4S/WpmdJ7WOS/JyDQI7a3fgET1j0kG9dS7ajTf9R2666d85D737TQdIyeH9c74OF4BAkAS21waBz/YvCnII3BsCaRGwRrib0V49NSHvLEFspLVyHCSmK+uRGgNvRHyfpm6Kp3wt40vaSXUknVTzhffH626tCW0mbKbMsTyMSZOWya67vSpLlqz7cS7ZflGg8Wxldw+WVnuXZXsJzoOAFQQe7huXPbVRIAYBmwlYJdynrNOQmfEVYpozYRBIl0DBxjh4Uw9+V/7oprBN1d+lY0cTLpPuHsrluF76ptGId1MRyRW7+JKP5aGHRnk2XFPbvefIwdJ8u86eXZMLQcBvAkepI+hm/V3GIGAzAauEuwH1inoK78RTaPOesXpsu6twN174w4mDlyEa5z6W6jK+7NfOWgXJxLzvqI/bbTcvYttrm2Pjbq1SDZqa9GpT2495DQLWEyhSZ7tJUu2u3b0xCNhKwDrhbkBdNjkh/1xGyIytm8aFcfXbGAdvvPCmYkAU7XGtLPOEVpjB/CHQWh11Rrzb/Kh97dpEKiH188/n5gVKs607pMR7Ubtmebk+F4VAvglcUBqTczo7nHWeb0BcP3ACVgp385h/qCbXLaygykzgO8TxAbRV0b6pnGS/iMXB/1ETvm8m4dvXHdxYPXYmbOYgSzsAX3b5J3Lffd/klUnx7t1S4r2wEeInr6C5eF4ImNA343WPprsnL0i5qMcErBTuZo5/WVwpw6cR7O7xekf6ciaExnzsqtVAomD/0i6qF9JFNZClNnGyJl7WJvOqikw6c2pzSB/pcevB6RzKMRCwjsDt+uRsMOGW1q0LA9pAwFrhboZ3qzZmeoPGTOxVjwmYevAmhCbsf5j/pB73m/C4e7x70r/c1d1jcmJ7O7zOfor2TYTaHb+1dL1qn03f8hkCzhDYr3Wh3NebJFVnFixiA7VauK9Qh/vQiRUyjgS7iG1Lf6a7lZbyMwL+yLYxpxvp1EXrnllJeXE+Me518fHj9Uu6xuT0jsGJ9y+/nC8j7/laXnttgh/T3eIeHc/cUTqfv+sWr/MCBGwn8OKAIjHlXjEI2EbAauFuYH2mj/uH8bjftn0TqvGYiiCbwmjCVE3gN5rk/TFJ3oHv1XM10e18TXjz02bMWCmPPvad3KOiPZEINtG/9JLdpcPJ2/s5fe4FgZwJnKJvuC/TN94YBGwjYJIQbGgAAA/TSURBVL1wN8CojmHbtgnneExiYUrAl8TEdNFz2UatqpIztCcCZgcBv0TAp5/OkT+8PF7+8Ifxsnz5ejsmr6Podv1+0vbogdaMh4FAoCEC7dWhY5JUW6LdG0LFz30m4IRwN0yu0a6qb9NV1eftEd3bHaBVQUwYzf4a6+iiXaW/L+/y+2LV0h3fvlCu7e593OyYMUvkb3+fKv/850x5++3pVs25+mB63nWotNq/V/WX+BoCVhP4nf6+/lJ/bzEI2ETAGeFuuqkOm1QhY1ZTItKmDRT2seygnncTA2888eqAccJMDwTTCwGzj8ARuo9Muchsbf36pIwbt1Q/lqQ+v/XHSfLdd4uyvZyv58VaNEqViWyxU6mv9+VmEMiWwE7FBfJUv6JsT+c8COSFgDPC3czePP434n01+XZ52QxctG4CZU02xsGrF76jxQp+pf5umI6ps9bzBrfu1Qz2J62nLpKffTFFSprXLQhWriqXVasqNn5s+Hrq1BUyZcryYAef490blRanxHvTvm1zvBKnQ8AfAo/1jctu2pEbg4AtBJwS7gban7W++43Ud7dl/0RuHK3UWZrywKuAH6DdWW2zy9XT/iEJqbYtyxbjWfmfmTL9hg8lsWTNFj8L+wtN+7dLifdGnVqEfarMLwQEjmlXKMN7ZP+ULAQImIJlBJwT7obfg7OT8uw83O6W7aXIDefwVCnJQtndEm8MSdxubcHV381T8f6BlM9e4dbAPRhti527pMR7rFndTx08uA2XgEDOBJqos90kqXZpbJ+jJufJcQEnCTgp3A3pK6Yk5P2lwZY5c3LFGbTnBHZR4T5Yk1kPVSHfLKAnqlfq78N7/D54vrb5vuDaiYtlhor3tZMW5/tW1l2/9QG9pOzOQ60bFwOCQE0CF3WJyZmdKC9TkwvfB0PAWeFerprd1Kn+XOu8YxCwgUCpemSMgDcdWfs29c87g2i3YfWzH8P6WctT4n319/Ozv4ijZ7Y9ZqB0u3Y/R0fPsKNCoJ+GRb46kKdDUVlv2+fprHA3YJdr4YyLNFn1eyrN2L7PIje+Q1S8GxGfz3KSf9N8j1cWJmU0+9/5/VWxeE1KvK/8Ypbzc8l0Ah1O3V5KL9o909M4HgK+ErirV1wO1r/pGASCJuC0cDfw5pdXyQWTEjJlLVU0gt5M3H9LAqZltqlIsFtxoQzS0mJemCn3+MrCSvmCp01e4LTmGsk1FSnxvvzjqdaMya+BdL5wV+l4+o5+3Y77QCBjAgeqaB+p4h2DQNAEnBfuBuC0dVVy3sRESsQHDZT7Q6AuAia5aU8V8cZr06WxSOc0y0qu02iwL1dW6kdV6vO4NbxJrYux869XVaUSVpe+PdH5qWQ6ga7X7CPtjt0609M4HgK+EXhZw2VsrCbmGwBuZAWBUAh3Q9KImbMnUOPdil3FINIiUKgO+C4q3o2gN0K+JF4ga1Skr0lWbfwssla//0pFOxYtAjNv+1gW/3FMtCatsy27/WBpfVCfyM2bCbtB4HRNUL1EE1UxCARJIDTC3UD8Rhs0nTm+Ikie3BsCEICAJwRm3/cvWfiHbz25lisXKWxaJD3vHizFu3Z1ZciMM0IEzFPS17U0ZHO0e4RW3b6phkq4G7ymyswFGjaDQQACEHCdwNzHv5D5T//X9WlkNP6iDs1TNd6bDWyf0XkcDAE/CFyvzZiO1aZMGASCIhA64W5Ams6RpoMkBgEIQMB1Ague/0bmPPxv16eR0fib9C5JiffGXVtmdB4HQyDfBEzfjif6kqSab85cv24CoRTuZrr/WFIp105FvNe99PwEAhBwhcCi136QWXf/nyvD9WScLXboLGUjD5N4S00AwSBgEYHf94vLzlopDINAEARCK9wNzLcWVcot0xHvQWws7gkBCHhLYMlfx8mMm//p7UUtv1qrfctSnnfLh8nwIkbguPaFcl13vO4RW3Zrphtq4W4ov7QgKSNnJq0BzkAgAAEIZEtg2fuTZdq174lURqckaMmR/aX78AOyRcZ5EPCcQAtNTjVJqp3SLOnr+QC4YKQJhF64m9V9el5SHp6NeI/0TmfyEAgJgRWfzZDp178vyZXrQzKjhqfRfsjPpMulezZ8IEdAwCcCv+kak9M6Ul7GJ9zcphqBSAh3M99nVLw/hHivtvR8CQEIuEpg1ddzZMbwD6R83ipXp5DxuDsN3Vk6nT0o4/M4AQL5IDCwWYH8QRsyYRDwm0BkhLsB+5q2ib99BjHvfm8y7gcBCHhPYM3YhSnxvm7qUu8vbukVu16xl7Q7YVtLR8ewokbgnt5xOaA1SapRW/eg5xsp4W5gU20m6C3H/SEAAa8IrJu2LCXe14xZ4NUlrb9Oj1sOkjaD+1o/TgYYfgKHtCmUO3uRpBr+lbZrhpET7gb/J8sr5ZJJeN7t2oqMBgIQyIZA+fxVKfG+6r9zsjnduXMKimKp7qot9+zu3NgZcPgIvKZJqn2bFoRvYszIWgKRFO5mNb5eVSVnja+wdmEYGAQgAIF0CSRXrJfpGvO+4tPp6Z7i9HHxts1S4r35th2dngeDd5/AWZ1jMqyUJFX3V9KdGURWuJslmrC2Sk4cg3h3Z7syUghAoC4CVRVJFe8fyrL3JtV1SKheb1zWOlXjvUmP1qGaF5Nxi0DXxgWp0pBNCHV3a+EcHm2khbtZt9nrq+TIHxDvDu9hhg4BCFQjMOOWf8qSv4yr9kp4vzQe956mu2pJ0/BOkplZT+DGsrj8vC3K3fqFCskAIy/czTou13D3/b4tD8mSMg0IQCDqBGaN/FQWvfp9JDCYWHcj3gviCKdILLiFk9y9ZaE82pckVQuXJpRDQrhvXNakNiLc9ZtyMZ8xCEAAAq4TmPvIf2T+c1+7Po20xm+qzJhqMxgEgiLwdP8i2bEFSapB8Y/SfRHuNVbbeN6NBx6DAAQg4DqB+c/8V+Y+9oXr00hr/O1O2Ea6XrF3WsdyEAS8JnBC+0K5pjted6+5cr0tCSDct2QiR2jM+xyNfccgAAEIuE5g4cvfyex7P3N9GmmNv+PZO0nnobukdSwHQcBLAq1Us7+upSHbF+F195Ir19qSAMJ9SyapV04cWyET1iDe68DDyxCAgEMEFv9pjMy89WOHRpz9ULtcuoe0H7Jd9hfgTAhkSeDyrjE5uSOlIbPEx2lpEkC41wPqrAkV8vVKxHs9iPgRBCDgCIGl70yU6de978hocxtm9+EHSMmR/XO7CGdDIEMC2zQvkBcGFGV4FodDIDMCCPcGeN0yPSFvLaps4Ch+DAEIQMB+Ass/mSbTf/euVK5P2j/YXEZYWJBq0NRqn7JcrsK5EMiYwP194rJvKyocZQyOE9ImgHBPA9VLC5IycmbI/6NLgwOHQAAC7hNY+eWslOc9sWSt+5OpZwbxVk2k7O7B0mKHzvUcxY8g4C2Bw0oK5baeJKl6S5WrVSeAcK9Oo56vP19RKRdMpNxMPYj4EQQg4AiB1T/Mlxk3fCDrZy53ZMTZDbNx11ZSNnKwNO1dkt0FOAsCGRLQhz2pJNVeTUhSzRAdh6dJAOGeJihz2OS1VXL8GLqsZoCMQyEAAUsJrJ28JCXe105YZOkIvRlWs4HtUw2aijo09+aCXAUCDRA4t3NMzi8lSbUBTPw4SwII9wzBLUlUyWnjEjKLcpEZkuNwCEDANgLlc1bIdPW8r/52nm1D83Q8xbt2TYn3wiaEMHgKlovVSqCHettNaUgqQ9aKhxdzJIBwzwKgqTNz6eSEfLyMpNUs8HEKBCBgEYHE0rUp8b7y3zMtGpX3Q2l9cG8pu+0Q7y/MFSFQC4FbyuJyZFuSVGtBw0s5EkC45wDwgdlJeW4eSas5IORUCEDAAgKV6xIp8b78n1MsGE3+htD22K2k2zX75u8GXBkCGwnspZVlHtIKMxgEvCaAcM+R6P/MT8p9sxDvOWLkdAhAwAIC04d/IEv/McGCkeRvCB1P30E6X7hb/m7AlSGwkcBzWtN9O63tjkHASwIIdw9o/nVxpdwwjYozHqDkEhCAQMAEZt3xiSx6c3TAo8jv7Usv2l06nLp9fm/C1SNP4FcdYnJlN5JUI78RPAaAcPcI6KfLK+XKqQlZi/PdI6JcBgIQCIrAnAc+lwUvjgrq9r7ct9u1+0nbYwb6ci9uEk0CJZqd+vpWcSmJ43WP5g7Iz6wR7h5yHb2mSm7WTqsT9DMGAQhAwGUC837/pcx78iuXp9Dg2MvuPFRaH9CrweM4AALZEjAed+N5xyDgFQGEu1ckN15nTrkR70n5jzZswiAAAQi4TGDBC6NkzoOfuzyFescea9FIyu4aLMU7d6n3OH4IgWwJbNeiQJ7rX5Tt6ZwHgS0IINy3QJL7C2tVs49Qz/s/liDec6fJFSAAgSAJLHpjtMy685Mgh5DXezfqXCw979buqv3b5fU+XDy6BEx1GVNlBoOAFwQQ7l5QrOMaj81Jyu/nEvReBx5ehgAEHCGw5O/jZcaNHzoy2syH2bRfO23QNFiMiMcg4DUBU8/d1HXHIOAFAYS7FxTrucbftOLMnTMTsgr9Xg8lfgQBCNhOYNmHU2TaVe/YPsysx9dip9JUd1UTPoNBwEsCRepsf31gkZiOqhgEciWAcM+VYBrnj1pVlRLv40haTYMWh0AAArYSWPH5TJn+u3cluarc1iHmNK5W+/eUnhrzjkHAawLnl8bk3M4kqXrNNYrXQ7j7tOqLK4x4T8p7S4l79wk5t4EABPJAYPWouTLtuvelYv6qPFw9+EuWHD1Aul+/f/ADYQShItCrqSkNWSREuodqWQOZDMLdZ+wPzk7Ks/OIm/EZO7eDAAQ8JLB2/CKZfsP7sm7KUg+vas+lOpy8nZResoc9A2IkoSBwW8+4HFaCdA/FYgY4CYR7APD/uGhD3Pt6nO8B0OeWEICAFwTWz1gm04d/KGt+mO/F5ay7RucLdpWOZ+xo3bgYkLsE9m1dKPf3JknV3RW0Y+QI94DW4auVRrwnZdJamjUFtATcFgIQyJFAxcLVKt4/kFVfzs7xSnae3vWqfaTd8VvbOThG5SSBFwYUyTbNSVJ1cvEsGTTCPcCFmKfNmox4/2gZrvcAl4FbQwACORAwiaozVLwv/2RaDlex99Qetx4sbQ7pY+8AGZlTBE7uGJPLu5Kk6tSiWTZYhLsFC3LvrKS8MJ+4dwuWgiFAAAJZEKhKVqp4/1CWvjMxi7PtPqWwSTzVXbXl7t3sHiijc4JA+6INSaqtiJhxYr1sHCTC3ZJVeW3hhrj3SiJnLFkRhgEBCGRKYOatH8niP43N9DTrjy9q3zzVXbXZ1h2sHysDtJ/ANd3jckJ7klTtXyk7R4hwt2hdPl+xIe59+jrUu0XLwlAgAIEMCMy+9zNZ+PJ3GZzhxqFNepWkuqs27tbKjQEzSmsJ7FhcIE/3K7J2fAzMbgL/DwAA//+cXAvGAABAAElEQVTtnQd4XMW1x89W7WpXvXfJBRt3MJjecUkjCUl4hLxQAoQWQgu9h2J6EloCIRAChEfHgDEGGww2xYALYNzVu9V7l97MXUmWZa205Za59/7n+/xJunfKmd9Zw99HZ85YBlgjNGEIlHYN0L2lffRpU78wNsEQEAABEAiGQOXf11P10xuDGaKLvp65aZT3wBKyx7p0YS+MFJfA41PtdES0VVwDYZmwBCwQ7mL65qGyPnquuk9M42AVCIAACExAoPrfG6nysfUT9NLf6+hjcph4/wFZrBb9GQ+LhSHw00Qr3ZZjF8YeGKIfAhDuAvtqWV0/PVTWS829AhsJ00AABEDAD4Gal76j8gfW+Xmr38fxPzqAsm87Sb8bgOWaE3CxYPsrMxyUGYF/AGruDJ0ZAOEuuMO+bx+QxPvGFmQ0Ce4qmAcCIDAGgbq3tlHpHWvGeKPvR0mnz6GMq47S9yZgvaYE/pBho3NTbZragMX1RwDCXQc+62Lp7jzy/nIN8t514C6YCAIgMIpAwwe7qfiGD0Y91f+Pqb8/lFLPP0T/G8EONCEw1W2hl1nUHQ0EgiEA4R4MLY37cuHOBTwX8mggAAIgoCcCzeuKqfCalTTQY6yzOxlXHU1Jp8/Wkytgq0AE7p1kp0VxOKQqkEuENwXCXXgX7WvgxlZf6sz3bUid2ZcMfgIBEBCdQOuGciq67n3qbewU3dSg7Mu+/SSK/+EBQY1BZxDgBE5kov1BJt7RQCBQAhDugZISqF8zC1g9yCLvb9Ui9C6QW2AKCIBAAATat+6hIpY2013eHEBvfXSxOKyUd98Sij46Rx8Gw0qhCPz3QAcdGIlDqkI5RWBjINwFds5EpvFykbxsJBoIgAAI6IlAZ2EDFd+0ijp21urJ7HFttce7JfHumZs6bj+8BIHRBM5iB1QvZwdV0UAgEAIQ7oFQErjP5808772PdncgdUZgN8E0EACBUQS6q1qo5JbV1LqpctQb/f4YkRNLefcvIVdenH43ActVJ5DqtEilIb3Q7qqz1+OCEO569Noom2t6BljqTB+trEfqzCg0+BEEQEBgAr1NnZJ4b/6sRGArgzMtclaKdLuqIyEyuIHobWoCN7HLmH7BLmVCA4GJCEC4T0RIR++fquqjx8qROqMjl8FUEDA9gf7uPkm8N67ONwyLqCOypNtVrU6EUA3jVIU3cmiUlZ48AIdUFcZsiOkh3A3hxr2bWNPYL0Xfy7qQOrOXCr4DARAQnUDJ7R9S/Ts7RDczYPviFk+hnDsXBtwfHUHgCSbcFzABjwYC4xGAcB+Pjk7flTPR/jCLvL/fgNQZnboQZoOAKQmU3beWal/ZYpi9J/5yFmVee4xh9oONKEvgVJYqczNLmUEDgfEIQLiPR0fn755lVWe4gO9H8F3nnoT5IGAeAhWPfEF7/rPJMBtO+d18SrtogWH2g40oR8DDMqteYTepprHDqmgg4I8AhLs/MgZ5/nVLvyTev8OFTQbxKLYBAsYnUPXU11T1xFeG2Wj65UdS8m/mGmY/2IhyBC7LtNHZKTgboRxh/c8M4a5/H064g3aWMcMj7y/twcHVCWGhAwiAgBAE9rzwDVX89TMhbJHDiKybT6CEU6bLMRXmMDCB6ewiphfZhUxoIOCPAIS7PzIGfP52nS/6XsvKR6KBAAiAgOgEal/fSmVLPxbdzMDss1jYBU2LKeb4vMD6o5dpCTww2U4nxeKQqmk/ABNsHMJ9AkBGe53PLmp6uKKPPmHVZ9BAAARAQHQCDSt2UjG7qMkIzRYdId2u6p2fboTtYA8KEVgYZ6X7JuGQqkJ4dT8thLvuXRjaBp6s7KO/MwGPBgIgAAKiE2haU0iFV78nupkB2efMiJZuV3VPTQioPzqZk8BL7JDqAW4cUjWn98ffNYT7+HwM/XZdky91ZheLwqOBAAiAgMgEWtaXUuE1K6m/vUdkMwOyLXJ6EuU+sIScKd6A+qOT+Qj8LtVGl2bgkKr5PD/xjiHcJ2Zk6B4Nvb6a72/WInXG0I7G5kDAAATavq2iouvep56aNt3vJmpBJuXev4RskTiIqHtnKrCBjAgLvcqi7i6kuitAV99TQrjr23+yWf9KDY++91IrsmdkY4qJQAAE5CfQsauOim/4gDqLGuSfXOUZY0+aTLn3LFJ5VSynFwK35trpZwlQ7nrxl1p2QrirRVoH62xt90Xf1zcj+q4Dd8FEEDAtga6yJiq+aRW1f79H9wwSfjaDsm48Tvf7wAbkJ3B4tJX+PhWHVOUnq+8ZIdz17T9FrH+MHVp9ih1eRQMBEAABUQn01LVTCas20/JlmagmBmxX8pkHUfqlhwfcHx3NQ+CpaQ6a78UhVfN4fOKdQrhPzMiUPfjB1ceZgN/GovBoIAACICAigT52UJWL96aPC0U0Lyib0v5wOKWcdVBQY9DZ+AR+lWSlG7IRdTe+pwPfIYR74KxM15Pnu/Po+//hxlXT+R4bBgHdEBgYkOq8N7y3Szcm+zM06/rjKOHUGf5e47kJCUQzzc4PqSY5EHU3ofvH3DKE+5hY8HAkgffq+yUBX9aF6PtILvgeBEBAHAKld39MdW9sFcegEC3JXbqIYk+eHOJoDDMigSszbfTbFJSGNKJvQ9kThHso1Ew4prJ7QBLvy+twcNWE7seWQUAXBMr/8hnV/PcbXdjqz0ibx0m59y0mXi4SDQQ4gZkeCz0/HWVD8WnwEYBwxychKAK8bOTjFb3U2BvUMHQGARAAAVUIVP7jS6r+1wZV1lJqEWeql4n3JRR5YJJSS2BenRH4y2Q7HR+L0pA6c5si5kK4K4LV2JPym1Z57vvHjYi+G9vT2B0I6JPAnmc3UcWjX+jT+EGr3VMTpAuaIjKidb0PGC8PgSXxVlqah0Oq8tDU9ywQ7vr2n6bWP1PVJwn4PqS+a+oHLA4CILA/gdqXt1DZ/Wv3f6GjJ96D0ymP364aHaEjq2GqEgQs7GzqK+yQ6mQXDqkqwVdPc0K468lbAtq6sZVH33tpYwvUu4DugUkgYGoC9W9vp5I/f6RrBjHH5VHeA0t0vQcYLw+B89NsdHE6DqnKQ1O/s0C469d3wljOI+685vvTLAKPBgIgAAIiEWhclU9F178vkklB2xL/k+mUfcsJQY/DAGMRyGbRdl4aEpUhjeXXYHcD4R4sMfT3S+ATdmkTz33fiUub/DLCCxAAAfUJNH9aQoV/WkEDvfo9l5N0xlzKuOJI9eFhRaEI/DnXTj9JwCFVoZyisjEQ7ioDN/pyTazaDE+d4dVn0EAABEBAFAKtGyuo8JqV1NfUKYpJQduReuECSj13ftDjMMA4BI6KsdKjU3BI1TgeDX4nEO7BM8OIAAgsH7y0qRKXNgVAC11AAATUINC+rYaKrltJ3RUtaiynyBqZ1xxDib+apcjcmFQfBJ6Z5qB5XhxS1Ye35LcSwl1+pphxkAC/aZXnvq9gIh4NBEAABEQg0FnUSMU3vE8du+pEMCckG3LuOJnilkwNaSwG6Z/A6ck2ujYLh1T178nQdgDhHho3jAqCwEs1vrKRLbi0KQhq6AoCIKAUge7qViq+aRW1ba5UaglF57VG2KXbVaOPzFZ0HUwuJoE4djr11QPtFI9TqmI6SGGrINwVBozpfQS2swOr/ODqOnaAFQ0EQAAEtCbQ19xFxbesIn5wVY/NkeiRxLtndooezYfNYRK4mkXcz2CRdzTzEYBwN5/PNd3xU6xkJE+fGUDZd039gMVBAASIBnr6qPjWD6nxg926xOGaFMfE+xJy5cTq0n4YHTqBOSzH/VmW645mPgIQ7ubzueY7/qqlXxLvm9nlTWggAAIgoDWBkjs+ovq3tmttRkjre+amSrer2uPcIY3HIP0SeJhVlzmGVZlBMxcBCHdz+VuY3XYPXtr0LC5tEsYnMAQEzEyg7IF1VPvSd7pEEH10jiTeLXaIOF06MESjf8Tqud/J6rqjmYsAhLu5/C3cbj9q7KcnK/uI58CjgQAIgICWBCofW0/V/96opQkhrx33gwMo588nhTweA/VHwM4qQvKbVHPYjapo5iEA4W4eXwu707Y+oieYeH+umn2DBgIgAAIaEqh+egNV/v1LDS0IfenE02ZT5tVHhz4BRuqOwIXpNrogDYdUdee4MAyGcA8DHobKS2AtqzjDo+9b2hB9l5csZgMBEAiGQM2L31L5Q58GM0SYvqnnHUKpFxwqjD0wRFkCeSzazqPuVgTdlQUt0OwQ7gI5A6YQdbFqkTz6/gxy3/FxAAEQ0JBA3ZtbqfSujzW0IPSlM648ipJ+PSf0CTBSVwTuyrPTD+NxvkFXTgvDWAj3MOBhqHIEPm/2Rd9ReUY5xpgZBEBgfAINK3dJFzWN30vMt9m3nkjxP54mpnGwSlYCx8Za6W+TcUhVVqgCTwbhLrBzzG5aH8uY4dH3f7I/aCAAAiCgBYGmT4qo8KoVWiwd1pq8wkzuvYsp5tjcsObBYH0QeG66g2Z5kC+jD2+FZyWEe3j8MFoFArzu+5OV/fQ1+4oGAiAAAmoTaPmqjAqvXEH9nb1qLx3Wery2e+59i8k7Ly2seTBYfAK/SbHRnzJxSFV8T4VvIYR7+Awxg0oE+MFVHoHvx9lVlYhjGRAAgSECbVuqqehP71FPXfvQI118jciOpTwm3l2T43VhL4wMjUCiw3dINQYZM6EB1NEoCHcdOQumEm1it61yAf8Fy4FHAwEQAAE1CXTk11PRtSupq7hRzWXDXityZrJ0QZMjyRP2XJhAXALXZdvof5IQdRfXQ/JYBuEuD0fMojKBp1nVGR5974Z+V5k8lgMBcxPormimous/oPate3QFIurwLEm8W10IyerKcUEYe5DXQk9PcwQxAl31SADCXY9eg80Sge9YvXcefV/H6r+jgQAIgIBaBHobOqjoxg+o9atytZaUZZ3YhVMo9+6FssyFScQk8PhUOx0RjdKQYnpHHqsg3OXhiFk0JPAfduMqj763o/iMhl7A0iBgLgL8oGrxzauoaU2hrjae8IuZlHXdsbqyGcYGTuCURCvdnoPfqgROTH89Idz15zNYPAaBbe0Dknj/uBHR9zHw4BEIgIBCBIpvXU0N7+5UaHZlpk05+2BKu+QwZSbHrJoSiGDBdn6TamYESkNq6ggFF4dwVxAuplafwIt7+uipqn6q70HpGfXpY0UQMCeBsns+odrXvtfV5tP/eAQl/3aermyGsYER+EOGjc5NxSHVwGjprxeEu/58BosnIFDcOcDEex+9U4fo+wSo8BoEQEAmAhV/+5z2PL9ZptnUmSbrxuMp4WcHqrMYVlGNwFS3hV5mUXc0YxKAcDemX7ErRmBFfb8k4As6EH3HBwIEQEB5AlVPfkVV//xa+YVkXIHfrhp74iQZZ8RUIhC4d5KdFsXhkKoIvpDbBgh3uYliPqEINLKLDv/Fou/PswOsaCAAAiCgNIE9z22mioc/V3oZ2ea3RUcQF+9Rh2TINicm0p7AiUy0P8jEO5rxCEC4G8+n2NEYBD5jFzZxAb+xBdH3MfDgEQiAgIwEal/9nsru/UTGGZWdypkRTXlMvLunJSq7EGZXlcCLBzpoeiQOqaoKXYXFINxVgIwlxCGwnKXP8Nx33Lwqjk9gCQgYkUD98h1UctuHutmae3oS5d23mJxpUbqxGYaOT+BsdkD1MnZQFc1YBCDcjeVP7CZAAp+zCDwX8ctxgDVAYugGAiAQLIHGDwuo6NqVwQ7TrL/30AzpdlWbx6mZDVhYPgJpTotUGjIS2l0+qALMBOEugBNggnYEdrKDqzwCz0U8Skhq5wesDAJGJdD8eSkVXL6cqF8faXr8oCrPeUczBoFb2GVMP2eXMqEZhwCEu3F8iZ2EQaCW1X0fSqPZjSo0YZDEUBAAgdEE2jZXUsGVK6ivpWv0KyF/TvjpgZR10/FC2gajgiNwWLSV/jEVh1SDoyZ2bwh3sf0D61QmwCu/8/QZLuLXs3QaNBAAARCQg0DHjloq/NN71F3VIsd0is+R/L/zKP2yIxRfBwsoT+CfB9jpkChE3ZUnrc4KEO7qcMYqOiTAK9HwNBpeDx4NBEAABMIl0FXSSIXXrKTO/Ppwp1JlfNrFh1HKOQershYWUY7AL5OsdGM2ou7KEVZ3Zgh3dXljNR0S2N4+lEbTR7wuPBoIgAAIhEqgp6aNiq57n9q+rQp1ClXHZV53LCX+Yqaqa2IxeQlEMc3+KrtJNdmB0pDyktVmNgh3bbhjVR0SqGF58EMHWfORB69DD8JkEBCDQF9rNxXf8AE1f14ihkETWJFz10KKWzRlgl54LTKBKzNt9NsUlJcR2UeB2gbhHigp9AOBQQJ9rDjE0EHWr1qQRoMPBgiAQPAEBvr6qfjmVdT4QX7wg1UeYY10SBc0RR2epfLKWE4uAjM9Fnp+ukOu6TCPhgQg3DWEj6X1T2Bdk+8g63vIg9e/M7EDENCAQOlda6juzW0arBzcko4Ur3RBU+SM5OAGorcwBP4y2U7Hx+KQqjAOCdEQCPcQwWEYCIwksI3lwfvSaPqoCXnwI9HgexAAgQkIlD/0KdW8+O0EvbR/7Z6SQLnsdtWIrBjtjYEFQRNYEm+lpXk4pBo0OMEGQLgL5hCYo28C1d1DB1n7qbBTHxeu6Js4rAcBYxCo/Pt6qn56o/Cb8R6URrn3LyF7jEt4W2HgvgQs7GwqP6Q6yYVDqvuS0ddPEO768hes1QkBdo5Vqgd/x+Z26o/D9eE6cRvMBAFNCVT/eyNVPrZeUxsCWTzm2FxJvFusEICB8BKpz+/TbHRROg6piuSTYG2BcA+WGPqDQBAE7nm3nh76poOip3ooKi8yiJHoCgIgYEYCNS99R+UPrBN+6/E/nkbZt54ovJ0wcF8COSza/sZMB+GfXPty0dNPEO568hZs1R2BLeXddNhdvpJvriQnRU9hAp79sTlxQEh3zoTBIKASgbq3tlHpHWtUWi30ZZJ+PYcyrjwq9AkwUhMCd7A89x+zfHc0fRKAcNen32C1jghw4c4F/FCze+1MwEdKIt4Zg/JcQ1zwFQRAYC+Bhg92S7Xe9z4R87vU3x9KqecfIqZxsGpMAkfHWOmRKTikOiYcHTyEcNeBk2Civgnc8U498ZSZ0c1is0jinUfh3akRo1/jZxAAAZMTaF5XTAVXvCs8hYw/HU1J/zNbeDth4F4Cz7Ka7nNYbXc0/RGAcNefz2CxzghsLumio+4pHddqT7bbl0aDPPhxOeElCJiNQOuGciq47F3q7xK7zmz27SdR/A8PMJt7dLvfM5JtdHUWDqnq0YEQ7nr0GmzWHYH5d5TQ9sq96TL+NiDlwbODrDwKb3UgB9EfJzwHATMRaN+6R4q899Z3CLtta4SNcu9ZTNFH5whrIwzbSyDBYaHXWGnIGGTM7IWik+8g3HXiKJipbwK3LqujB1Y2BLwJB8+D55VomIB3RuO/rAGDQ0cQMCiBzsIGKrxqBXWVNgm7Q0diJOXeu5g8c1KFtRGG7SVwbbaNTk9C1H0vEX18B+GuDz/BSp0T+Lqok467ryzoXVjsI/LgU5AHHzRADAABAxHormqhwqtXUsf2GmF35cqLk8Q7/4omNoF5Xgs9Mw0FEsT20v7WQbjvzwRPQEARAnNvK6bde3pCntub48uD9+aiHnzIEDEQBHROoLepk4quXUmtGyqE3QmPuOfet5gcCfhvlbBOGjTssal2OjIaaZmi+2mkfRDuI2ngexBQkMCNb9TSXz9oDHsFV3LEcDUaK8tTRAMBEDAXgf7uPiq+/n1q+qRI2I1HH5Ut3a5qdSAVQ1gnMcNOSbDS7blIxxTZR6Ntg3AfTQQ/g4BCBD7P76STHww+XcafOY4oXg+eHWRlufD8ezQQAAFzESi+ZTU1rNgp7KbjlkylnDtOFtY+GEYUwYLtr7JDqpkRCALp5fMA4a4XT8FOQxCYeUsxFdWGni4zFgQedY+a7BPwbhaNRwMBEDAPgbJ711Ltq1uE3XDir2ZR5jXHCGsfDCP6Q4aNzk3Fb0b08lmAcNeLp2CnIQhc+2otPfph+Oky/mDw/Hd+K6s3B7ml/hjhOQgYjUDFI1/Qnv9sEnZbKb+bT2kXLRDWPrMbNtVtoZdZ1B1NHwQg3PXhJ1hpEAJrd3XQkr+UK74bN6tAw0tJSvXgWWUaNBAAAWMTqHrqa6p64ithN5l++ZGU/Ju5wtpndsPunWSnRXE4pKqHzwGEux68BBsNRWDajUVU1qDOLYgOVgNeyoNnIh558Ib6GGEzILAfgT0vfEMVf/1sv+eiPMi+5QSK/8l0UcyBHSMInMhE+4NMvKOJTwDCXXwfwUKDEbjq5Rr6xxp1L1Hht7DyFBoehUcevME+UNgOCIwgUPv6Vipb+vGIJ+J8a7FZ2e2qiyjm+DxxjIIlwwRePNBB0yPxG9phIIJ+A+EuqGNglnEJfLS9nX78sHY1mKU8eFaJxpvtNi5k7AwETEyAV5rhFWdEbPZYl3RBk/fgdBHNM7VNZ7MDqpexg6poYhOAcBfbP7DOoAQmX19IVU19mu6O58HzUpI8Cm+1IcqiqTOwOAjITKBpTSG7ZfU9mWeVZ7qIrBhJvLunJsgzIWaRhUCa00JvzXIQjkXJglOxSSDcFUOLiUHAP4HLXqyhp9aqmy7jzxpnjH34IKvDixxHf5zwHAT0RqBlfSnlX/oO0YB4lkfOSJZuV3WmeMUzzsQW3Zxjp1MTcUhV5I8AhLvI3oFthiXwwdZ2+tmj2qXLjAXW6uR58L5KNK4k51hd8AwEQEBnBNq+raKCy5ZTX2u3cJZHHZ5FefctJqsbpQhFcc6CaCs9MRUBHFH8MZYdEO5jUcEzEFCBQM41hVTbqm26jL9tRuX5DrIiD94fITwHAf0Q6NhVRwVXvEs91a3CGR27cDLl3r1IOLvMbNA/D7DTIVGIuov6GYBwF9UzsMvwBC55YQ/9+9NmoffpTmV58DwKz3LhLVbkwQvtLBgHAuMQ6CprosKrVlBnQcM4vbR5lXDqDMq6/jhtFseq+xH4ZZKVbsxG1H0/MII8gHAXxBEww3wEVnzXRr/8e6UuNu6McQweZI0khwf/QdeF02AkCIwi0FPXTkXswGrbd9Wj3mj/Y/JZB1H6Hw7X3hBYQFHsP/FvsJtUExwI1oj4cYBwF9ErsMk0BNKvKqCmjn7d7NcWYR0+yOpKRB68bhwHQ0FgkEBfew8VXbuSWr4oFY5JGhPuKUzAo2lP4IpMG52ZgtKQ2ntifwsg3PdngicgoBqBC/5TTc9/0aLaenIuFDUpUkqj8WShHrycXDEXCChOYGCAiq7/gBpX5yu+VLALZN1wHCX8fEaww9BfZgIzPBZ6YToODcuMVZbpINxlwYhJQCA0Am9/00anP6GPdBl/O3SnuaRbWXkuPPLg/VHCcxAQj0DJHR9R/VvbhTMsd+kiij15snB2mc2gv0y20/GxOKQqmt8h3EXzCOwxFQFeXjnligJq69JPuow/BzljWR78YDlJuwe/YvXHCc9BQCQC5Q99SjUvfiuSSWSLiqDcexZR1IJMoewymzFL4q20NA9nmkTzO4S7aB6BPaYjcO6/q+n/vtRnusxYzrK5WD34yexGVlaJxpWAPPixGOEZCIhEoPKJL6n6qQ0imUTO9CjpdtXI6UlC2WUmYyzsbOpr7JBqnguHVEXyO4S7SN6ALaYk8MbGVvrfp6oMufeoyYN58JnIgzekg7EpwxDY859NVPHIF0Ltxz0tURLvERnRQtllJmN+n2aji9LxG1SRfA7hLpI3YIspCfT0DUjpMl29At5LLpNHItN5HjyLwvM8eARvZKKKaUBAXgK1r2yhsvvWyjtpmLN5D8mQblfl6TNo6hPIYdH2N2fikKr65P2vCOHunw3egIBqBM76VxW9ukG8Ww3lBuCMG5EHH4kojtx8MR8IhEug/p3tVHL7R+FOI+v4mBMmSeJd1kkxWcAE7si1048TcEg1YGAKd4RwVxgwpgeBQAi88nULnf20eJeiBGJ7KH1sLttwJZoI5MGHghBjQEAxArxMZNF17ys2fygTx58ynbJvPiGUoRgTJoGjY6z0yBQcUg0To2zDIdxlQ4mJQCB0Ah3dLF3mynzq039xmaAhRLGDrDyNxpPpCnosBoAACChDoPmzEiq4bLkyk4c4a9Jv5lLG5UeGOBrDwiHwLKvpPofVdkfTngCEu/Y+gAUgIBE4459VtGyT8dNl/LlbyoNnlWi4iEcDARDQnkDrpgrKv+QdGujp096YQQvSLlpAKb+bL4w9ZjHkjGQbXZ2F9EYR/A3hLoIXYAMIMAIvrm+h8541T7qMP6dHxDukQ6xcwNvd+B+FP054DgJqEGjfXkMFl75DvY2daiwX0BqZ1xxDib+aFVBfdJKHQILDQu/MchCr9oumMQEId40dgOVBYIhAS2c/pV5ZMPSj6b/amGjn4j16SiRFxKMevOk/EACgGYHO4kYpbaa7vFkzG0YvnHPnyRS3eOrox/hZQQLXZtvo9CQEUxREHNDUEO4BYUInEFCHwGn/qKTl37aps5heVmFpldKFTjwPPgN58HpxG+w0FoHuPa1UeOUK6thRK8TGrG6HdLtq9JHZQthjBiPmeS30zDSUhtTa1xDuWnsA64PACALPfd5MFz63Z8QTfDuSQCQT7r4oPPLgR3LB9yCgBoG+li4q/NN71LqxQo3lJlzDkexlFzQtIs+slAn7ooM8BB6baqcjo5EvIw/N0GaBcA+NG0aBgCIEGtr6KPPqQkXmNtKkPHWGp9BEscOsdlZaEg0EQEAdAvygauG1K6l5bbE6C06wimtyPOXdu5gicmIn6InXchA4hdVzv53VdUfTjgCEu3bssTIIjEng1McraOWW9jHf4eG+BOzsEid+GyuPwkewy53QQAAE1CFQfPMqanhvlzqLTbCK56A0Sbzb49wT9MTrcAlEsGD7W+yQajI7rIqmDQEId224Y1UQ8Evg6XXNdOl/kS7jF9BYL3ge/KCA52Ul0UAABJQnUHrPJ1T32vfKLxTACjHH5lLufYvJYkMaRwC4wupySYaNzkvFbzrDghjGYAj3MOBhKAgoQaCmpY9yr0W6TKhs+UVOUhSeXeyEBgIgoCyBike+oD3/2aTsIgHOHv+jaZR924kB9ka3UAlMcVvolRn4DWeo/MIdB+EeLkGMBwEFCJzySAWt3oZ0mXDQRiTwPHhfGo0NxYfDQYmxIDAugeqnN1Dl378ct49aL5NOn00ZVx2t1nKmXefeSXZaFIffbmjxAYBw14I61gSBCQg8+UkTXfF/NRP0wutACNg9rB48i77zKDzy4AMhhj4gEDyBmhe/pfKHPg1+oAIjUs8/hFJ/f6gCM2PKIQInxlrpwck4pDrEQ82vEO5q0sZaIBAggcrGXppyQ1GAvdEtEAIWq4WiJkdSNKtEE5mGPPhAmKEPCARDoO7NrVR618fBDFGsb8aVR1HSr+coNj8mJildhqfNoKlLAMJdXd5YDQQCJvDDv5XTxzs6Au6PjoET8GS5pTSaqEmRgQ9CTxAAgQkJNKzcRcU3rZqwnxodeL47z3tHU4bA2eyA6mXsoCqaugQg3NXljdVAIGACj3/USFe/IsYthQEbrbOOrkTncDlJG69zhgYCIBA2gaZPiqjwqhVhzxPuBBanjXKXLiJecQZNfgKpTgutmI1DqvKTHX9GCPfx+eAtCGhGoKS+lw68qUiz9c20sJQHP3iQ1RmL/xGZyffYqzIEWr4qo/yL31Zm8iBmtSdEUu49i8g7Ly2IUegaKIGbc+x0aiKCHoHykqMfhLscFDEHCChEYNFD5fTpbqTLKIR3v2ktNsvgQdZI5MHvRwcPQCA4Am1bqin/krepv70nuIEy93blxlHuvYvINSle5pkx3YJoKz0xFYdU1fwkQLirSRtrgUCQBB5e3UjXv4Z0mSCxydIdefCyYMQkJifQkV9PBZe+Qz01bZqS8MxOYeJ9MTmScL+D3I741zQHHezFIVW5ufqbD8LdHxk8BwEBCBTU9NDsW4sFsMS8JriSfPXgeTlJmxO/EjbvJwE7D5VAd0UzFVz2LnUWNYQ6hSzjoo/Mlm5XtUYgQiwL0MFJfplkpRuzwVROpuPNBeE+Hh28AwEBCJz4QBmtL+gUwBJzm+Dw2tlBVlZOkgl4Zwzy4M39acDugyXQ29BBBVe8S+3f7wl2qKz94xZPpZw7T5Z1TrNPFsUKy7w720leFJhR5aMA4a4KZiwCAqETeOj9Brr5zbrQJ8BIWQlY7L48eC7g3akRss6NyUDAyAT6O3ulajMtX5Zpus3EX86izGuP0dQGoy1+RaaNzkyBclfDrxDualDGGiAQBoGd1d100O0lYcyAoUoR8GQP1oPPQz14pRhjXuMRKLxmJTV9VKDpxlJ+dzClXXSYpjYYafEZHgu9MB2/iVTDpxDualDGGiAQJoFj7y2lDcVdYc6C4UoRGMqD51F4K/LglcKMeQ1EoOTPH1H929s13VH6ZUdQ8v/O09QGIy3+l8l2Oj4W54CU9imEu9KEMT8IyEDgvvca6Pa3kC4jA0pFp3BEsTz4yR6Knsry4KNxWEtR2Jhc9wTKH1xHNf/3nab7yLrpeEr46YGa2mCUxZfEW2lpHv67p7Q/IdyVJoz5QUAGAlsruunQO5EuIwNKVaawsjx4XoVGyoNPQR68KtCxiC4JVP7jS6r+1wbNbLdYLZTDLmiKPWGSZjYYZWELqwj5ziwHpbMbVdGUIwDhrhxbzAwCshI4cmkpfVOKdBlZoaowmTfHLYn4qFzkwauAG0vokMCe5zZTxcOfa2a5Pcblu131kAzNbDDKwuen2ejidBxSVdKfEO5K0sXcICAjgbuX19Nd7A+aPgm4kiOkCHw0KylpdSAPVJ9ehNVKEah99Xsqu/cTpaafcN6IrBhJvLsPSJywLzr4J5DtstCymTik6p9Q+G8g3MNniBlAQBUC35Z10RF3l6qyFhZRjoCD5b5Hszx4nkqDPHjlOGNm/RGoX76DSm77UDPDI2ckS+LdmRalmQ1GWPiOXDv9OAHBCaV8CeGuFFnMCwIKEOB57jzfHU3/BHjUPWqy70InN/Lg9e9Q7EAWAo0fFlDRtStlmSuUSaIOy6TcexeTzeMMZTjGMAJHx1jpkSk4pKrUhwHCXSmymBcEFCDw57fr6N4V2l4brsC2TD8lz4PnlWi8OciDN/2HAQCo+fNSKvjjO5qRiD15MuUuXaTZ+kZY+MUDHTQ9EodUlfAlhLsSVDEnCChEYCOr5X4Mq+mOZkwCPPI+VI2GV6ZBAwGzEmjbXEm7L3qLBnr7NUGQ8PMZlHXDcZqsbYRFf51so2uycEhVCV9CuCtBFXOCgIIE+C2q/DZVNOMSkPLgB8tJ8trwaCBgRgIdO2pp9yVvU19TpybbTz7zIEq/9HBN1tb7ovEOC62a4yCEH+T3JIS7/EwxIwgoSuCWN+vowfeRLqMoZEEm57ewRrM8eB6Fd7OqNGggYDYCXSVNlH/p29Rd0aLJ1tMuOYxSzj5Yk7X1vui1LOJ+Oou8o8lLAMJdXp6YDQQUJ/BlYSedcH+Z4utgAbEIeFkdeH6hE8+HRwMBMxHoqWmjgsuWU8cubW6PzrzuWEr8xUwzIZdlr/O8FnpmGkpDygJzxCQQ7iNg4FsQ0AuB2bcWU0FNj17MhZ0yEnCnsnrwvJwkO8xqteEX0TKixVQCE+hr7aaCK94lnvuuRcu5eyHFLZyixdK6XvOJA+y0IAqlIeV0IoS7nDQxFwioROCG12vpb6saVVoNy4hIwBnjYCk0vii8w4s8eBF9BJvkJTDQ10+FV62g5k9L5J04gNlsXqdUaSbq8KwAeqPLEIFTWD3321lddzT5CEC4y8cSM4GAagQ+291BCx8qV209LCQuAVsErwfvkdJoXEmoPS2up2CZXASKbvyAGt/fLdd0Ac/DL2bKvWcR8Yua0AIjwP7zRCtnOykG2j0wYAH0gnAPABK6gICIBA68qYhK6ntFNA02aUQgKs93kNWbjTx4jVyAZVUiUHr3x1T3xlaVVtu7jPuARHZB0yKKyIzZ+xDfjUvgkgwbnZeKQ6rjQgriJYR7ELDQFQREInD1K7X0+EdIlxHJJ6LYIuXBD5aTtCAPXhS3wA6ZCVT87XPa8/xmmWedeDrv/AxJvNtjXBN3Rg+a4rbQKzNwSFWujwKEu1wkMQ8IqEzgk50d9IO/Il1GZey6Ws4Z6xguJ4k8eF25DsYGSKDqqa+p6omvAuwtX7eY4/Mo977FZLHggHggVO+fZKeT43BINRBWE/WBcJ+IEN6DgMAEpt5QRBWNSJcR2EVCmDacB88q0bgSkQcvhFNghGwEal78lsof+lS2+QKdKP6U6ZR98wmBdjd1vxNjrfTgZCS6y/EhgHCXgyLmAAGNCFzxUg09+XGTRqtjWT0SiJrkq0TjyUIevB79B5vHJlD31jYqvWPN2C8VfJr0m7mUcfmRCq5gnKnfmuWgrAj8hiJcj0K4h0sQ40FAQwIfbmunnzxSoaEFWFqvBCLTXMPlJC1W/M9Ur36E3XsJNHywm4pv+GDvA5W+S71wAaWeO1+l1fS7zFnsgOrl7KAqWngEINzD44fRIKA5gbxrC2lPS5/mdsAAfRJwxvE8eF85SbsH/1PVpxdh9RCB5nXscjp2UZPaLePqoynptNlqL6ur9VKdFloxG4dUw3UahHu4BDEeBDQmcOl/99DT65o1tgLL652AzTWiHjzy4PXuTlPb37qhnHZf+JbqDHL+fBLF/eAA1dfV04I359jp1EQcUg3HZxDu4dDDWBAQgMDK79vp1MeQLiOAKwxjAvLgDeNK026kfese2n3BMurvVO/wvtVtl25XjT4qx7TcJ9r4gmgrPTEVh1Qn4jTeewj38ejgHQjohEDW1YVU34Z0GZ24SzdmRqbzPHhfGg2q3unGbTB0kEBnYQPlX/QW9dS1q8bEkeyRxLtnTqpqa+ptoeenO2imB+dqQvUbhHuo5DAOBAQicNHze+g/nyFdRiCXGMqUCJYHPyTg7ZHIgzeUcw2+me6qFsq/5B3qKlHvsjrX5HjKvWcRuXLjDE43tO39MslKN2Yj6h4aPSII91DJYRwICERg+bdtdNo/KgWyCKYYkYDNbRu+0MmVgHrwRvSxEffU29RJBX98h9q31qi2Pc+8NEm8OxIiVVtTLwtFsX/7r57rJAeC7iG5DMI9JGwYBALiEUi7soCaO/vFMwwWGZJAlFSJJpI8magHb0gHG2xT/d19VHD5cmr9Sr3bpqOPyaW8exeRxYHfUo3+OF2RaaMzU8BlNJdAfoZwD4QS+oCADgic/2w1/Xd9iw4shYlGIhCZ4ZLKSfJUGuTBG8mzxtxL4dXvUdOaQtU2F/fDAyjn9pNUW08vC81gOe4vsFx3tOAJQLgHzwwjQEBIAss2t9IZT1YJaRuMMj6BiHiWB8+j8FM9ZGcpNWggICqBkts+pPrlO1QzL+l/ZlPGn45WbT29LPQ4qy5zBKsygxYcAQj34HihNwgIS6CPZcmkXplP7d0DwtoIw4xPgB9ejZocSdEsAh8Rjzx443tcnzssu38t1b68RTXjU887hFIvOFS19fSw0JJ4Ky3NwyHVYH0F4R4sMfQHAYEJnPNMNb38FdJlBHaReUxjB8/4jaw8hcbD0mnQQEA0ApWPr6fqZzaqZlbGFUdR0hlzVFtP9IV4at0H7CbVBJxSDcpVEO5B4UJnEBCbwGsbWunMfyFdRmwvmc86KQ9+sB68+XaPHYtMoPrZTVT56BeqmZh9ywkU/5Ppqq0n+kLnp9no4nSk1gXjJwj3YGihLwgITqCrd4BSryig7j6kywjuKlOaF8FKSEazNBoehUcevCk/AkJuuvbV76ns3k9UsY1XmMldupBijstTZT3RF8l2WWjZTBxSDcZPEO7B0EJfENABgaXv1tOd79TrwFKYaFYCvjx4342s/FArGghoTaBhxU4qvmW1KmbY493S7areg9NVWU/0Re6ZZKfFcTikGqifINwDJYV+IKAzArWtfbR6W/vwn6qmPp3tAOYanYDFahk+yBqZjjx4o/tb9P3xMpG8XKQaLSInVrqgyT0lQY3lhF7j6BgrPTIFh1QDdRKEe6Ck0A8EdE7gq6JOn4jf2k6f5XfqfDcw32gEPJkuKYWGH2hFAwGtCLSsL6X8P7yjyvKRs1Iol13Q5Ez2qrKeyIu8ztJl8ljaDNrEBCDcJ2aEHiBgOAJ1bSwazwS8LyLfQZVNvYbbIzakTwIRiTwPnqfRRJLNhUNr+vSivq1u+7aKdp3/JlG/8meFoo/MliLvVre5U8Z+nWyja7Lw9z2QvzkQ7oFQQh8QMDiBr4ei8ds66NPdHQbfLbanBwJ2D68HP5gHH2duUaMHfxnNxo5ddbT7gmXU19Kl+NbiFk+hnDsXKr6OyAvEs5KQq+fg73kgPoJwD4QS+oCAiQjU82i8lBvfQavY18pGRONN5H7htmqxsTz4Sb4LnZAHL5x7DG1QV1kT5V/0FnVXtSq+z8RfzqTMa49VfB2RF7g+206nJeGQ6kQ+gnCfiBDeg4DJCWwo5rnxTMSz1BpE403+YdB4+54st6+cJPLgNfaEeZbvqWun/Eveps585St1pZxzMKVdfJh54I7a6TyvhZ6Zhqj7KCz7/Qjhvh8SPAABEPBHoKGd58b7IvE8Kl+BaLw/VHiuIAEXy4PnteCj2R9bBCJ0CqLG1IxAX3sPFVz6DvHcd6Vb+h+PoOTfzlN6GWHn//d0B8314JDqeA6CcB+PDt6BAAiMS2BjcZeUVsNTatbtQm78uLDwUnYCDq99uJykMxaROtkBY8K9BAYGKP+yd6nl85K9zxT6LuvG4ynhZwcqNLvY056SYKXbc1EacjwvQbiPRwfvQAAEAibQ2N4/LOJ5NL68AbnxAcNDx7AI8Dx4XokmilWiiUxDPfiwYGLwuASKrn+fGlflj9sn7JfsfoPcuxdS7EmTw55KbxPwX6CtmeskF36R5td1EO5+0eAFCIBAOAQ2lXRJh1t52cm1iMaHgxJjgyDgyeZ58EzEswOtaCCgBIHSu9ZQ3ZvblJh6eE5bjIvdrrqQog7NHH5mlm8uybDReakoDenP3xDu/sjgOQiAgGwEmjr6pcOtvmo17VSGaLxsbDHR2ARcSSwPfrCcJPLgx2aEp6ETKP/rZ1TzwjehTxDAyIjMaMpZuogipycF0Ns4Xaa4LfTKDKS++fMohLs/MngOAiCgGAEejR8S8Z/sRG68YqAxMTmiWB48Lyc51UPOGIgBfCTkI1D1z6+p6smv5JtwjJkiD0ySLmhypkeP8da4jx6eYqdjYpAvM5aHIdzHooJnIAACqhHg0fghEc+/ltYjN141+CZayGpn9eClPHgPRaZGmGjn2KqSBGr++w2V/+UzJZegqAWZkni3RZnnc3tirJUenIxDqmN9sCDcx6KCZyAAApoR2Fw6GI1nufEfIxqvmR+MvLCX5cHzcpJReciDN7Kf1dpb3bJtVHrnGkWX4wdVc+9ZpOgaok2+kt2kmsxuVEXblwCE+7488BMIgIBABJo7WTSeCfihiHwJovECeUf/priSI3wXOvF68E78Wl7/HtVuB7zSDK84o2TjJSJ5qUiztLPYAdXL2UFVtH0JQLjvywM/gQAICEzgm6FoPEupWbMDufECu0pXpkl58NJB1kjkwevKc2IZ2/xpCRVcvlxRo/jlTPySJjO0VKeFVszGuZTRvoZwH00EP4MACOiCQAuPxjMBP/SnuA658bpwnMBGWtmv5aVKNEzEu5EHL7CnxDWtdWMF7b5gmaIGpl18GKWcc7Cia4gy+Z15dvpRPH4bNtIfEO4jaeB7EAAB3RL4tmxvpZqPtiMar1tHCmK4N2cwDz4XefCCuEQ3ZrRvq6Hd579B/V19itmced2xlPiLmYrNL8rEC6Kt9MRUHFId6Q8I95E08D0IgIAhCLR2DUbjWX78qm0dVFzXY4h9YRPqE3CnRLAoPCsnyfLgrQ5E/tT3gD5X7CxqZJH3N6m3XrkgQs5dJ1Pcoqn6BBSE1bymO6/tjuYjAOGOTwIIgIDhCXw3GI3nIv6j7e2G3y82KD8BR7TddyMrE/BO9j0aCExEoLu6lfIveou6Spsm6hrSe5vHyS5oWkjRR2SHNF4vg36RZKWbsvF3bshfEO5DJPAVBEDAFATaBqPxXMTz/PiiWkTjTeF4mTZpZdVnpAudmIDn0Xg0EBiPQF9zF+2+5G3q2F4zXreQ3zlToyTx7pmVEvIcog/0ssIya+c5RTdTNfsg3FVDjYVAAAREJLClvEtKp+Ei/kP2Bw0EAiXgZfnv0SyNhn9FAwF/BAZ6+ij/0neodUOFvy5hPXcfkEC5SxdRRHZsWPOIPPiaLBv9OhmlIbmPINxF/qTCNhAAAVUJtHfz3PgOWjVYO74Q0XhV+et1MV8evIeip7I8eHZDKxoIjEWg8KoV1PRJ0Vivwn7mnZ8uXdBkj3WHPZeIE8zwWOiF6SgNyX0D4S7iJxQ2gQAICEHg+/JuFo3fW3JSCKNghLAEnDF2XzlJlkbDa8OjgcBoAsW3rKaGFTtHP5bl55jj8yTxbrEZ8xD1U9McNN+LfxhDuMvy1wWTgAAIGJ1AR/fAPiK+oAa58Ub3eaj743nwPIUmiufBs9tZ0UBgJIGye9dS7atbRj6S7fv4n0yn7FtOkG0+kSZawuq5L2V13c3eINzN/gnA/kEABEIi8H1F9/DlTzw/fmAgpGkwyOAEvHk8D95DvC48GggMEah49Ava8+ymoR9l/Zp0xhzKuOIoWecUZTJ+SJUfVjVzg3A3s/exdxAAAVkIdPQM+ET8YG58PqLxsnA10iT8JlYu4HkUHnnwRvJs6HupfmYjVT6+PvQJxhmZesGhlHreIeP00OerC9NtdEGauZU7hLs+P7uwGgRAQGACW0dF4/sRjRfYW+qa5ox1DJeTRB68uuxFXK32lS1Udt9aRUzL+NPRlPQ/sxWZW6tJs10WWjbT3IdUIdy1+vRhXRAAAVMQ6ByKxg8ect29B7nxpnD8BJu0RbB68CwCHz0lklxJyIOfAJehX9e/u4NKbv1QkT1m334Sxf/wAEXm1mrShybb6YRYYx7ADYQphHsglNAHBEAABGQisK1y39z4vn6ZJsY0uiUQxfLgeQqNNxt58Lp1YpiGN31cSIV/ei/MWfYfbnXZKefuhRRzTO7+L3X65OgYKz0yxbyHVCHcdfrBhdkgAAL6J9DVO5gbz6PxLD9+F6Lx+ndqGDtwp7mkajTRTMRbbCh7FwZKXQ5t+aqM8i9+W3bbHUkedkHTQvLMTZN9bq0mXD7bQelOc/4dgXDX6lOHdUEABEBgFIHtI6LxvH48ovGjAJnkRykPnpWT5ALe4TVvZNEk7t5nm21bqmnXOa/v80yOH1yT4iXxzr8aoZ3BblG9mt2masYG4W5Gr2PPIAACwhPoHhGN5yJ+VzVy44V3mswG2lyDefAsF96V5JR5dkwnKoGO/Hrafe4b1NfWLauJnrmp0gVNjkSPrPNqMVm8w0Kr55jzkCqEuxafOKwJAiAAAkES2FHly4333eTaQb19KFUTJEJdd4+axPLgeT145MHr2o+BGt9d0Uy7fr+MeqpbAx0SUL/oo3Mk8W6N0P9vcm7LtdNPE8x3SBXCPaCPOjqBAAiAgDgEepho55c+SSJ+awftrJY3MifOTmHJaAKR6S4m4H1pNBarOXN8RzMx6s+9DR20+8Jl1FnQIOsW435wAOX8+SRZ59RisnleCz0zzXxRdwh3LT5tWBMEQAAEZCTAhfsq6fKnDknQc2GPZmwCEXGsHvzghU4OjzlzfY3tYd/u+jt72YHVt6jtu2pZt5t42mzKvPpoWefUYrIXD3TQ9Ehz/QMWwl2LTxrWBAEQAAGFCPAUGl803ifieYoNmnEJ2Nw2iuZpNOwgqysRefBG9XT+pe9Qyxelsm4v5bz5lHbBAlnnVHuyn7BUmT+zlBkzNQh3M3kbewUBEDAdAR6NX73NJ+K5oOeHXtGMSUC60Iml0XiyUA/eiB4uuu59alydL+vW0q84kpLPmCvrnGpO5mQp7l8c5CQzxdwh3NX8hGEtEAABENCQQF//AMuLHxTxLLVmO6LxGnpDuaV9efC+W1mRB68cZy1mLrnjI6p/a7usS2ffcgLF/2S6rHOqOdmVmTb6bYp50sUg3NX8dGEtEAABEBCIAL/wiV/8xCPx/A+/EArNOAQi4n158LwevD3SPMLGOB4ceyflD31KNS9+O/bLEJ5a7FZW430RxRyfF8Jo7YdMcVvolRnmOaQK4a79Zw4WgAAIgIDmBPhlT0MCnn/dxi6DQjMGATvLg+eVaKQ8+ATkwRvBq1VPfEVVT30t21bscW7pgibv/AzZ5lRzoicOsNOCKHOUhoRwV/OThbVAAARAQCcEdvNo/GAknn/t7EE0Xieu828mSwSO5pVoeB58JvLg/YPSx5s9z2+mir99LpuxETmxlHv3QnIfkCjbnGpNdGKslR6cbI5DqhDuan2qsA4IgAAI6JQAS43fK+JZas1WRON16sm9ZkdmuHwinqXRWMx0sm8vAkN8V/fGViq9+2PZ9hI5K0WKvDtTo2SbU62J1sx1UowJtDuEu1qfKKwDAiAAAgYhkF+zNzeeXwKFaLx+HRvBUmf4razIg9evDxve303FN34g2waijsiSble1Reorreq8NBtdkm78sxwQ7rJ91DERCIAACJiPwMCIaDwX8VsrkBuvx08BP7w6VE6Si3k0fRFo/rSECi5fLpvRsYumUO5dC2WbT42JUp0WWjHb+IdUIdzV+DRhDRAAARAwCYECHo0fzI3nQr6jG7nxenK9hZ3vi5rE8uBZCo2HpdOg6YdA2+ZK2nX+m7IZnPiLmZR53bGyzafGRPdPstPJccY+pArhrsYnCWuAAAiAgEkJjBTx35cjGq+nj4En0+WLwjMRj6YPAh07amnnOa/TQE+fLAannH0wpV1ymCxzqTEJryzDK8wYuUG4G9m72BsIgAAICESgsNYXjV81WDu+HdF4gbzj3xSeOhM9WE6Sl5ZEE5tAV0kj7Tr3Dept7JTF0PRLD6fkMw+SZS41Jlk2y0HZEcY9cQ3hrsanCGuAAAiAAAjsR+BDlkrD02l4VH4LovH78RHtgd0zlAfvIX65E5q4BHpq2qS0me7yZlmMzLrhOEr4+QxZ5lJ6ktOSbHR9tnH/gQnhrvQnCPODAAiAAAhMSKCIReOHRPzqbR3U1sVuhEITkoDFapFqwfOa8LysJJqYBPpau2n3BcuoY2dt+AayAHbu3Yso9uTJ4c+l8AxeptnXzjPuAWsId4U/QJgeBEAABEAgeAIfbvdF4rmI/66sK/gJMEIVAp4s93A5SVUWxCJBERhgVyLnX/Q2tW6qCGrcWJ1t0RGSeI86LHOs10I9uznHTqcmGvOQKoS7UB81GAMCIAACIDCaQFHdYKWarR1SWk0rovGjEWn+syuR1YNnEfjoKZFkcxk3TUFz0CEaUHDlu9S8tjjE0XuHOTOipQuaIg9M3vtQwO9meCz0wnRjpnNBuAv4gYNJIAACIAAC/gl8JEXjfSL+W0Tj/YPS4I3da6dodqETLycZEWdM4aQBVlmWLL55FTW8tyvsudzTkyTxHpEZE/ZcSk7wHBPus5iAN1qDcDeaR7EfEAABEDARgWIpGu8T8fyQa0sncuNFcL/FNiIPPh158CL4hNtQes8nVPfa92GbE3VoJuXcs5Ds0eL6dkm8lZbmGa80JIR72B9fTAACIAACICAKgTU79or4b0qRGy+CX6Q8eFZOkh9mRdOeQMUjn9Oe/2wO25DYEydR7j2LiCziRrW/PNhJDnHNC8kHEO4hYcMgEAABEAAB0QmU1Pf6bnEdrBvfjGi8pi5zJQ3mwTMBb3MZ8+CgpoCDWLz6cIbVbgAAGtJJREFU6Q1U+fcvgxgxdteEnx5IWTcdP/ZLAZ5elmGjs1ONdeYCwl2ADxZMAAEQAAEQUJ7AxyOi8ZsRjVceuJ8VHCwPPmrwQqeIWOTB+8Gk+OOal76j8gfWhb1O8m/nUfofjwh7HiUmyHZZaNlMY33GINyV+KRgThAAARAAAaEJlA5F4wcvgWruQG682g6z2C1S+gwX8ZFp4uZKq81FzfXq39lBJbd/GPaSaRcfRinnHBz2PEpM8NhUOx0ZbZzf8EC4K/EpwZwgAAIgAAK6IvDJTl9uPL8EanMJcuPVdp4n2+0T8awiDZq6BBo/KqCia1aGvWjmtcdQ4i9nhT2P3BMcFWOlR6cY55AqhLvcnxDMBwIgAAIgoGsCZQ2+3PhVg7nxTYjGq+ZPV3LE8IVOtgjjRElVAxjiQi1fllH+JW+HOHrvsJw7T6a4xVP3PhDku1VzHJRgkFOqEO6CfKhgBgiAAAiAgJgE1o6Ixm9CNF4VJzmifHnwvBKNE3nwqjBv/34P7Tz7tbDWsnoc0u2q0UdmhzWP3IPPYQdU/8gOqhqhQbgbwYvYAwiAAAiAgCoEyoei8SylhteNb2xHbryS4K0sSho1ySMdZkUevJKkfXN3FjZI4r2/vSfkxZypXsq5exF5ZqeEPIfcA+PZ52g1i7oboUG4G8GL2AMIgAAIgIAmBNbt6iCeF89F/MZi5MYr6QRvjpsJeCbi85AHryTn7qoW2vW7N6inpi3kZdxTE5h4X0iu3LiQ55B7IL+MiV/KpPcG4a53D8J+EAABEAABIQhUNPYOi/jVLD++AdF4Rfzi5nnwg+UkbU79CzFFIIU5aW9TJ+0+703qLGoIeSbvwemUs3QhOeLF+IfWPK+Fnpmm/6g7hHvIH0kMBAEQAAEQAAH/BNbtZpVqBg+4bkA03j+oEN84ou3D5SSdMfoXZCFiUGxYf3cf7f79m8Rz30NtMcflUu7SxWRxiPEPrNdZTfc8Vttdzw3CXc/eg+0gAAIgAAK6IMCj8Tydxveng+rb+nRhtx6MtDJRyCPw/CCrOzVCDybrykZebYZXnQm1xf94GmXfemKow2Ud94skK92Ure/SkBDusn4kMBkIgAAIgAAITEzgUx6Nl4R8B31d1DnxAPQIiIA3N1IqJ4k8+IBwBdypkNV5b2L13kNtSb+eQxlXHhXqcNnG8cyq9Qc5ZZtPi4kg3LWgjjVBAARAAARAYJBAZdNQNN6XWlOHaHzYnw13Cs+D91D0lEjiEXm08AnwG1b5TauhttTfH0qp5x8S6nDZxl3PIu6nsci7XhuEu149B7tBAARAAAQMSeCzfC7gfRH5rxCND8vHzhhWD56Xk5zC6sGznHi08AiUP7COal76LuRJMq46mpJOnx3yeDkGTnFb6JUZ+j0TAeEux6cAc4AACIAACICAAgSqpGj8UFpNO9W2Ijc+FMxWliMRzSvR8Dx4Fo1HC51A5T++pOp/bQh5guzbTqT4H00LebwcA//NqsvMZVVm9Ngg3PXoNdgMAiAAAiBgSgKf53cOH3L9shC58aF8CHgePBfx/CtaaAT2PLeZKh7+PKTB1gi7VOM95tjckMbLMWhhnJXum6TP38BAuMvxCcAcIAACIAACIKAygermvmERv4qVnUQ0PjgH8Ao0Uh48E/HIgw+OHe9d+/r3VLb0k+AHshGOxEhW430ReeelhTRejkGfsUOqbh2mukO4y+F9zAECIAACIAACGhP4ooBF45mA5ze5IhofuDN4DfihcpK8Njxa4AQaVu6i4ptWBT5gRE9XXpwk3t2T40c8Ve/bSzJsdF6qTb0FZVoJwl0mkJgGBEAABEAABEQhsGcwGs9FPC87WdOC3PiJfGOL4PXg2UFWFoHnt7OiBUageV0xFVzxbmCdR/XyzEllFzQtIkeyZ9Qb5X9MdVpoxWz9HVKFcFf+s4EVQAAEQAAEQEBTAutZNH5IxPPv0cYnwOvAcxHvzXGP3xFvJQKtmyrYLavLQqIRfVQO5d6ziKwu9X/b8fAUOx0To698GQj3kD5mGAQCIAACIAAC+iTAo+9DIp5H43l0Hm1sAu60CIoeLCdpteuzCsnYO5P/acfOWtp51ms00Nsf9ORxP5hKOX8+Oehx4Q5YEG2lJ6aq/w+GcOyGcA+HHsaCAAiAAAiAgM4J8Hx4Sciz/HieJ4+2PwFn7Ig8+Ch9Cb39d6Pck66yJtp59uvU1xT85yjxtFmUefUxyhnnZ+b3WLpMCkub0UuDcNeLp2AnCIAACIAACChMoHZUNJ5XrkHbS8DmYnnwPAKPPPi9UEZ911PXTrt+9zp1V7SMejPxjynnzqe0CxdM3FHGHr9NsdGVmfo5pArhLqPzMRUIgAAIgAAIGIkAj8bzdBr+h9eQR9tLIGrSYB58NvLg91LxfdfX3kO7z3uDOnbVjX414c/plx9Jyb+ZO2E/uTp4mWZfO88p13SKzwPhrjhiLAACIAACIAAC+ifA68QPiXj+taoJ0Xju1cg0lxSBj5riIatNPykXin8iBwZoFzuw2ra5Muilsm4+gRJOmR70uFAH3Jlnpx/F6+OQKoR7qF7GOBAAARAAARAwMYGvigaj8Sw3/jNE48kZ52A3svrSaBxe5MEP/dUouHw5NX9aMvRjQF8tdqt0u2rsCZMC6h9upxkeC70wXR+lISHcw/U2xoMACIAACICAyQnUtbFoPBPwvoh8B1U29ZqWiM1lkyLwXMS7kvSTgqGkw4pu/IAa398d1BL2ODfl3r2QvIdkBDUu1M4vz3DQVLf4vzGBcA/VwxgHAiAAAiAAAiAwJoGvh6Lx2zro090dY/Yxw0N+iJUfZvUiD55K7/6Y6t7YGpTbI7JjmHhfRO5piUGNC6XzTxOtdFuO+L8pgXAPxbsYAwIgAAIgAAIgEBCBeh6Nlw64dkhfKxrNF42PTPflwfMovMXEefAVf/uc9jy/OaDPzVCnyJnJknh3pkcNPVLs66b54v+GBMJdMfdjYhAAARAAARAAgdEENhR3+YQ8S61ZZ7JofEQ8qwcvXegUSQ6P+NHd0b6T4+eqp76mqie+CmqqqMOzKHfpIrJ5lRXW12TZ6NfJYpeGhHAP6qODziAAAiAAAiAAAnIRaGjnufG+SDy/BMos0Xib28YOsvrKSboSlRWjcvlKznlqXvyWyh/6NKgpYxdOkXLegxoUZOdsl4WWzRT7kCqEe5BORXcQAAEQAAEQAAFlCGwcjMZzEb9ulwly49lZSB6B5yLek2WuevB1b22n0js+CuqDlHDqDMq6/rigxgTb+alpDprvFfeQKoR7sB5FfxAAARAAARAAAcUJNLb3Syk1XMTzHPnyBmPnxkdm8Dx4n4i3WMUVjnI6vnF1PhVd935QUyafdRCl/+HwoMYE0/mEWCs9NFncNCYI92C8ib4gAAIgAAIgAAKaENhU0kWSiGe58WsNHI2PiHcOl5O0e8TOt5bjg9CyvpTy//BOUFOlMeGewgS8Uo3fpMpvVBWxQbiL6BXYBAIgAAIgAAIg4JdAU0c/rRquG99OZQaMxtsjffXgeSqN0fPg27ZU065zXvfr77Fe8JQZnjqjRLsw3UYXpImp3CHclfA45gQBEAABEAABEFCNAI/G+0pOttMnO42VG2/hefCDN7J6Mo2bB99Z2EA7z3yV+jsDT4nKXbqQYk+eIvvnLN5hodVzxDykCuEuu7sxIQiAAAiAAAiAgFYEmnk0fjAvnov50vrAhaBWNge6rieT5cFL5SRZPXgDpsF3V7fSrrNeo5669oCQ2KIiWJnIhRR1WFZA/YPpxPPceb67aA3CXTSPwB4QAAEQAAEQAAHZCGwu3RuN/3iHMaLxEQnO4XKSPKXGSK2vuYt2srSZrpLGgLblTI+WxHvkjOSA+gfaaX6UhZ46QLyoO4R7oB5EPxAAARAAARAAAV0TaO70VapZPZgfX6LzaDw/vDpUTpKLeaO0gZ4+2nXeG9S+tSagLbmnJUoXNEVkxQTUP9BOy2c7KN0p1q82INwD9R76gQAIgAAIgAAIGIrANyOi8Wt0HI3n5SOjBi908rCykkZpuy9+i1q/Kg9oO95DMiTxbo+Vb/9nsFtUr2a3qYrUINxF8gZsAQEQAAEQAAEQ0IRAy1A0XsqP76Diuh5N7Ah3UX6AlYv46CmecKcSYnzh1e9R05rCgGyJOXGSJN7lqoPvZCnu6w8S6zcZEO4BfRTQCQRAAARAAARAwEwEvi3bmxv/0Xb95cbzEpJD1WjsbrGixsF+jkpu+5Dql+8IaFjCTw+krJuOD6hvIJ1uy7XTTxPEOaQK4R6I19AHBEAABEAABEDAtARau/bmxq/apq9oPM+Djx4sJ8kvd9JrK7t/LdW+vCUg85P/dy6lX3ZkQH0n6jTVbaGXZ4hzSBXCfSKP4T0IgAAIgAAIgAAIjCDw3XA0voM+3B5Y6cIRwzX51mLz5cFHs3KSkTrNg698fD1VP7MxIH5pFy2glN/ND6jvRJ1ePNBB0yPFOKQK4T6Rt/AeBEAABEAABEAABPwQaBuKxrNIPK8fX1Qrfm68J2swD55F4vXWqp/dRJWPfhGQ2ZnXHEOJv5oVUN/xOv2IpcrcyVJmRGgQ7iJ4ATaAAAiAAAiAAAgYgsCWcp4b7xPxHzIhL3JzJbE8eH6hEzvMqqc8+NpXt1DZvWsDQptzx8kUt2RqQH3H67RhvpNEyHSHcB/PS3gHAiAAAiAAAiAAAiESaO/mufFMxA/WjS8UNBrv8NqHy0lGxImTzz0e9oYVO6n4ltXjdZHeWSMdlHv3Qoo+KmfCvuN1uDLTRr9N0f6QL4T7eF7COxAAARAAARAAARCQicD35d1SOs1qqeSkeNF4i91CPAeeR+Aj0+Wrhy4Tvv2mafqkiAqvWrHf89EPHCleSbx75qSOfhXwz6nsIqYV7EImrRuEu9YewPogAAIgAAIgAAKmI9DRPbCPiC+oESs33pPt9lWjmRQptG9aN1TQ7guXTWija0qCJN5deXET9vXX4YkD7LQgStuEGQh3f97BcxAAARAAARAAARBQicD3Fd0sraZ9+M/AgEoLT7CMlAfPDrHykpI2l7ai1Z+p7dtraOdZrxH1jw/Ne1Aa5dy9iByJof1j5JgYKz08RdtDqhDu/j4FeA4CIAACIAACIAACGhDo6BkYFvCrWX58vgDReEfUYB48S6URMQ++q7RJEu99LV3jeizm2FzKWbqIrM7Q8tU/muukWA21O4T7uO7FSxAAARAAARAAARDQlsDWUdH4CQLLihprZXnwQzeyRqaJlQff29BBO898lbqrWsdlEP+jaZR924nj9vH38rw0G12SHpro9zdnMM8h3IOhhb4gAAIgAAIgAAIgoCGBzpHReJZas3uPdrnx3hxWD54fZhUoD76/s5d2nv0adebXj+ulpNPnUMZVR43bZ6yXXqbZ187T7gZaCPexvIJnIAACIAACIAACIKADAtsq982N7+tX32hXcgTLgY+UIvG2CDHy4Hed+wa1fVs1LozU8w+h1N8fOm6fsV7eP8lOJ8dps08I97E8gmcgAAIgAAIgAAIgoDMCXb375sbvUjka74hmefAsAs9FvDNW+9KJ+X9cTi2fl4zrxYwrj6KkX88Zt8/ol3O9Fvr3NG32B+E+2hv4GQRAAARAAARAAAQMQGB7FYvGD17+tIpdBNWnUnK81WEdvtApMjVCU5JF179Pjavyx7WB57vzvPdg2rJZDsqOsAQzRJa+EO6yYMQkIAACIAACIAACICAuge4R0Xgu4ndVd6tirJQHz0pJRuWFVoJRDiNL71pDdW9u8zuVhVWYyWWVZnjFmUDbaUlWuj5b/fIyEO6Begj9QAAEQAAEQAAEQMAgBHbwaDw73MpFPP/a2zd+DfRwt+1OiRiOwtuc6ueHl//1M6p54Ru/23AkRLIykQvJe1C63z6jX2yar/4hVQj30V7AzyAAAiAAAiAAAiBgIgI9TLQPi3iWWrNTwWg8z4PnlzlF8Tz4GHXzxKv++TVVPfmVX8+6cuMk8e5mt6wG0m7OsdOpier+IwTCPRDPoA8IgAAIgAAIgAAImIQAF+6rt3awaLzvJlcu7OVuVhZ15+I9mh1mdauYB1/z32+o/C+f+d2OZ04qu111ITlTvH77DL3Ic1vo9Rnq/uMDwn2IPr6CAAiAAAiAAAiAAAjsQ4Cn0AxH45mQ5yk2cjdvLhPwTMTzr2q0umXbqPTONX6Xij4qm4n3RWSLnFiUPzfdQbM86h1ShXD36za8AAEQAAEQAAEQAAEQGEmAH2odyovngp4fepWr8cj7UDlJHpFXsvFKM7zijL8Wt2Qq5dxxsr/Xw8+XxFtpaZ56h1Qh3IfR4xsQAAEQAAEQAAEQAIFACfDyksMinuXG8/KTcjSe+87TaKJYLryT5cQr1ZpZjfcCVuvdX0v81SzKvOYYf6+Hn395sJMcKgXdIdyHseMbEAABEAABEAABEACBUAnwC5+G6sbzaDy/ECqcxm9h5RF4LuJ5VRolGr9dld+y6q+l/G4+pV20wN9r6fkfM2x0Tqpt3D5yvYRwl4sk5gEBEAABEAABEAABEJAI9PWTlBvPBTz/s60yvGg8rwPPBbw3R/48+M78etp51qvU39U3pvfSLzuCkv933pjv+MMEFm5fNWfifHi/EwTxAsI9CFjoCgIgAAIgAAIgAAIgEDyB3TwaPyji+dfOntCi8TwPfqicJL+hVa7WXdUqiffe+o4xp8y66XhK+OmBY77jDx+baqcjo+Wzx99CEO7+yOA5CIAACIAACIAACICA7ARYavw+In5rRfDReGesLw+el5PkteHlaH2tXbTzzNeoq7Rpv+ksNotUaSb2xEn7veMPjoyx0mNT5LFjzAUGH0K4j0cH70AABEAABEAABEAABBQlkF8zGI1nB1x5NL4jiGi8lAc/eKGTOzn8PPgBluOz8+zXqWN7zX57tse6JPEedWjGfu/4A54uw9NmlGwQ7krSxdwgAAIgAAIgAAIgAAIBExgYFY3/PohofNQklgfPIvDeHHfA6/nruPvCZdS6oWK/1xFZMdIFTZHTk/Z7dzY7oHoZO6iqZINwV5Iu5gYBEAABEAABEAABEAiZQMFQNJ5F4vlNrh3dE+fGR6a5hstJWu2hR8ALr1pBTZ8U7Wd75IxkyuW3q2ZE7/OOl55ff5Bzn2dy/wDhLjdRzAcCIAACIAACIAACIKAIgaEDrlzEf18+fm68M85BPAeeV6NxRIWWf158y2pqWLFzv71EHZZJuUvZ7apR+6bn8MuY+KVMSjUId6XIYl4QAAEQAAEQAAEQAAHFCBTW+nLjV0m58R3U3s1qUI7RbC5WD57lwUczAe9K2ldoj9F9v0dl966l2le37Pc89uTJkngf+WKWx0LPTVeuNCSE+0ja+B4EQAAEQAAEQAAEQECXBD4cTKdZva2DtpR3jbkHKQ+eiXhvdnB58BWPfkF7nt2035wJP59BWTcct8/z12c6KM8VeorOPpON+gHCfRQQ/AgCIAACIAACIAACIKBvAkUsGs/TabiI5+k1bV37RuMj00fkwbNSj4G06mc2UuXj6/frmnzmQZR+6eHDz09NstLN2aGl5gxP4ucbCHc/YPAYBEAABEAABEAABEDAGAQ+2s4Pt/pE/Hdle6PxESwPnqfRSHnw3onFdu3LW6js/rX7QUn7w+GUctZBw883zVfmkCqE+zBifAMCIAACIAACIAACIGB0AsV1PBrPRPxg3fhWFo23uW1SDjwvJ+lKGl9017+7g0pu/XA/TJnXH0uJp86Unl/PIu6nsci73A3CXW6imA8EQAAEQAAEQAAEQEA3BD7a7ovE85Sab1k0fuggqyfLfx5808eFVPin9/bbYw4rExm3cAplsxz3ZSzXXe4G4S43UcwHAiAAAiAAAiAAAiCgSwLFdb1STjwX8esaWSQ+0y1F4i1j5MG3fF1O+Re9tc8+bV6nVGkm6vAs+vc0B831BpY/v88k4/wA4T4OHLwCARAAARAAARAAARAwL4E1Ozrojd2d9FknUUeSixyefW9Gbd9WQzvPfHUfQM70KJp6/xI6dlYcPT7bf9R+n0EB/gDhHiAodAMBEAABEAABEAABEDAvgW9qeulfBd30Nbv3qSNy70HW7tIm2vHbV6mvbe+FUO5piTTv8R/T6uNiyC1jqjuEu3k/f9g5CIAACIAACIAACIBAkAT6B4hWNPTTC6U9tK3XlwrTW99BO1jkvae6dXi2o8+dR2fdcTSdl7pvlH64QwjfQLiHAA1DQAAEQAAEQAAEQAAEQODz5n5aUd9P79b1UW9XnyTeOwsaJDDHH59JN7/+czoxVr6QO4Q7PnMgAAIgAAIgAAIgAAIgEAaB7e0D9J8dbbS6ZYB6H/2MNr66nV5+6Yf0q19NpbVN/XRMjDziHcI9DCdhKAiAAAiAAAiAAAiAAAgMEdjTM0DvsQj8VLeFjoiWR6wPzc2/QriPpIHvQQAEQAAEQAAEQAAEQCBMAr0sD34NKyd5cpy84h3CPUzHYDgIgAAIgAAIgAAIgAAIqEEAwl0NylgDBEAABEAABEAABEAABMIkAOEeJkAMBwEQAAEQAAEQAAEQAAE1CEC4q0EZa4AACIAACIAACIAACIBAmAQg3MMEiOEgAAIgAAIgAAIgAAIgoAYBCHc1KGMNEAABEAABEAABEAABEAiTAIR7mAAxHARAAARAAARAAARAAATUIADhrgZlrAECIAACIAACIAACIAACYRKAcA8TIIaDAAiAAAiAAAiAAAiAgBoEINzVoIw1QAAEQAAEQAAEQAAEQCBMAhDuYQLEcBAAARAAARAAARAAARBQgwCEuxqUsQYIgAAIgAAIgAAIgAAIhEkAwj1MgBgOAiAAAiAAAiAAAiAAAmoQgHBXgzLWAAEQAAEQAAEQAAEQAIEwCUC4hwkQw0EABEAABEAABEAABEBADQIQ7mpQxhogAAIgAAIgAAIgAAIgECYBCPcwAWI4CIAACIAACIAACIAACKhBAMJdDcpYAwRAAARAAARAAARAAATCJADhHiZADAcBEAABEAABEAABEAABNQhAuKtBGWuAAAiAAAiAAAiAAAiAQJgEINzDBIjhIAACIAACIAACIAACIKAGAQh3NShjDRAAARAAARAAARAAARAIkwCEe5gAMRwEQAAEQAAEQAAEQAAE1CDw/1P/FC0nKN5/AAAAAElFTkSuQmCC;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"569.33\" y=\"314.5\" width=\"40.11\" height=\"34.87\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-39\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;ODCS&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"619.12\" y=\"461.12\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"gM56yTRo4Hwrsk5AQHmB-5\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://cygri.github.io/rdf-logos/png/no-text-256.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"628.68\" y=\"314.5\" width=\"31.5\" height=\"31.5\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-18\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Databricks_Logo.png/800px-Databricks_Logo.png;clipPath=inset(2.53% 35% 34.81% 31.67%);\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"357.33\" y=\"488.75\" width=\"35.35\" height=\"35\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-19\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;databricks&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"350\" y=\"517.25\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-21\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;snowflake&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"405\" y=\"518.25\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"AiJdHj6Q9A8rBBn62U_L-22\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/f/ff/Snowflake_Logo.svg/184px-Snowflake_Logo.svg.png;clipPath=inset(0% 75% 0% 0%);\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"416.15\" y=\"491\" width=\"27.7\" height=\"26.5\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"vhxLvn33Ns0gdgc_sjcq-0\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Azure&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"295\" y=\"517\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"vhxLvn33Ns0gdgc_sjcq-1\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Microsoft_Azure.svg/2048px-Microsoft_Azure.svg.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"305.43\" y=\"490.69\" width=\"27.13\" height=\"27.13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-0\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"27\" y=\"252.76999999999998\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-1\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;SQL DDL&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"25\" y=\"289.77\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-2\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"82\" y=\"253\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-3\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Avro&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"80\" y=\"280.77\" width=\"50\" height=\"33\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-4\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"27\" y=\"310\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-5\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;JSON Schema&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"25\" y=\"342.64\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-6\" value=\"SQL\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=19;fontColor=#000000;fontStyle=1\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"37\" y=\"259.4\" width=\"30\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-7\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAIAAAAiOjnJAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAyKADAAQAAAABAAAAyAAAAACbWz2VAAAimklEQVR4Ae2dddgWxRbAL3ZesbsLu1tQEBRM7I7HeCws7ECwA1HBwFZMVEws7O4u7MLu7ri/e/e5+ywbs+ecndn3fT++7w+Yd+bMmXNmz87OnJoO//zzz7/a/9pnwPcMjOcbYTu+9hn47wy0C1a7HASZgXbBCjKt7UhbVbB+/PHHP/74o60+v7/++uv999//9NNPW5fBCZqc9F9++eW11157880333777ffee++DDz5gxj/66KPvv//+1VdfXWihhZqcfgN5Y8aM6dq1K/zSt2PHjgsssMD888+/0v/+4HfSSSc14Ky/S4cmPBV+9tlnd9555z333PPoo48yv3///XfuvLRVwerfv//RRx+dy/KEE0645JJLdunSZY011lh11VWnnHLKXLCmqESwmuTvyy+/HDp0KLM23niiDzSC1SSU+yVj4403lkjGJJNMsuGGG1533XW///67XwK8YPuXFywVkdx1113rrLPO+OOPL5nQGKatCla3bt1iHiWFGWecsV+/fmzIKj4Fv90bLFi33nrrUkstJZm+LExbFSy+cVlmS2tYwHbYYYcXXnjBr3yYsTVMsH744YfNN9+8dL4cAG1VsDp37uzg2t3Eqn/iiSeyKzULhK+Oot2MmxltK2fpYcOGLbbYYldffbW277gAP8EE9qM6c3vIIYesueaa7777bmPnqm7BeuONN1ZZZRUWbXQHjeW8DY9+9913s8EYOXJkA3msVbBuvPHG5ZZb7oknnmggw+PI0N99990GG2wwaNCgRvFbn2CdddZZG220EYrNRrE6ro3LbumAAw7YdNNNEbL6ea9JsE444YQ+ffrAav0cjuMjjhgxomfPnj/99FPN81CHYHFOOeyww2pmrH24eAYef/zxrbbaqsiAEYP5LQQXLN6YQw891C/R7di0M3DzzTefd9552l5V4O0nW8moGPu23nprCWQ7TDwDnJr//e9/8xPdweeff47i4IsvvohbzQXUEGuttdbcc89txqDr6EshlsXzzTffzDnnnDpqMtDz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;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"38\" y=\"313.64\" width=\"26\" height=\"26\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-8\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"86.7\" y=\"256.2\" width=\"40.11\" height=\"34.87\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-9\" value=\"\" style=\"rounded=1;whiteSpace=wrap;html=1;fontFamily=Courier New;fontSize=14;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"27\" y=\"424\" width=\"48\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-10\" value=\"&lt;font style=&quot;font-size: 8px;&quot; data-font-src=&quot;https://fonts.googleapis.com/css?family=Architects+Daughter&quot; face=&quot;Architects Daughter&quot;&gt;Data &lt;br&gt;Catalog&lt;/font&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Courier New;fontSize=8;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"26\" y=\"457.14\" width=\"50\" height=\"13\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-11\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/512px-Amazon_Web_Services_Logo.svg.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"32.329999999999984\" y=\"430.52\" width=\"37.33\" height=\"22.39\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"bEfSKmc3PETLs6-9SY3m-12\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://github.com/bitol-io/artwork/raw/main/icon/color/Bitol_Logo_icon_color.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"88\" y=\"425.78\" width=\"36\" height=\"36.32\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"jAT-YumnwRCWpeC2Bskx-0\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"36\" y=\"373.97999999999996\" width=\"28\" height=\"28\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"jAT-YumnwRCWpeC2Bskx-1\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://miro.medium.com/v2/resize:fit:1400/1*tp1LD0dN1Aexp01R-rH5_Q.png;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"86\" y=\"319.28\" width=\"40\" height=\"22.15\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"jAT-YumnwRCWpeC2Bskx-2\" value=\"\" style=\"shape=image;imageAspect=0;aspect=fixed;verticalLabelPosition=bottom;verticalAlign=top;image=data:image/png,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;\" parent=\"AiJdHj6Q9A8rBBn62U_L-1\" vertex=\"1\">\n          <mxGeometry x=\"94.35\" y=\"372.98999999999995\" width=\"23.29\" height=\"24.36\" as=\"geometry\" />\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n</mxfile>\n"
  },
  {
    "path": "diagrams/datacontract.drawio",
    "content": "<mxfile host=\"Electron\" modified=\"2023-09-19T08:15:52.509Z\" agent=\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.1 Chrome/112.0.5615.204 Electron/24.6.1 Safari/537.36\" etag=\"nHi0674EmmKcNZRs2zl2\" version=\"21.6.1\" type=\"device\" pages=\"6\">\n  <diagram id=\"sqOdmxP-wpawTkpXsF98\" name=\"Default\">\n    <mxGraphModel dx=\"1434\" dy=\"777\" grid=\"0\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"4681\" pageHeight=\"3300\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"0\" />\n        <mxCell id=\"1\" parent=\"0\" />\n        <mxCell id=\"2\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"60\" y=\"76\" width=\"605\" height=\"221\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-17\" value=\"\" style=\"group\" parent=\"1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"99\" y=\"77\" width=\"532\" height=\"223\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-7\" value=\"Data &lt;br&gt;Product\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontStyle=1;strokeWidth=1;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fillColor=none;strokeColor=#6c8ebf;spacingLeft=12;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry y=\"123\" width=\"150\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-12\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"143\" y=\"157\" width=\"12\" height=\"6\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-8\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=2;fontFamily=Architects Daughter;fontSize=14;fontStyle=1;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"143\" y=\"153\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-6\" value=\"Data Product&amp;nbsp;/ Dashboard /&lt;br&gt;ML Model\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontStyle=1;strokeWidth=1;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fillColor=none;strokeColor=#d79b00;spacingLeft=31;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"379\" y=\"123\" width=\"153\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-10\" value=\"&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;font-size: 11px;&quot;&gt;Input Port&lt;br style=&quot;font-size: 11px;&quot;&gt;verifies guarantees of&lt;br style=&quot;font-size: 11px;&quot;&gt;Data Contract&lt;br style=&quot;font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Architects Daughter;fontSize=11;entryX=0;entryY=0.5;entryDx=0;entryDy=0;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeColor=default;fontStyle=0\" parent=\"z94eKqQJERM4FfAnxR9R-17\" target=\"T3_DJ9xneiyqL2eggwZx-6\" edge=\"1\">\n          <mxGeometry x=\"0.2858\" y=\"52\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"368\" y=\"151\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n            <mxPoint x=\"292.3636363636365\" y=\"84.81818181818187\" as=\"sourcePoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-11\" value=\"Data Provider\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;curveFitting=1;jiggle=2;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"22.5\" y=\"193\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-12\" value=\"Data Consumers\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;curveFitting=1;jiggle=2;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"403\" y=\"193\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-13\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=2;fontFamily=Architects Daughter;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"366\" y=\"153\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-28\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuMTQgNi45NGEuNzcuNzcgMCAwIDAtLjQ4LjJjLTEtLjgtMi4xNC0uMjUtMyAuNzJBMTYuMTIgMTYuMTIgMCAwIDAgMTYuMTUgMTBhLjI4LjI4IDAgMCAwIC40LjMyYy4wOCAwIDEuMzktMS4yMSAxLjQ3LTEuMjguNzMtLjY4IDEuMzUtMS40MiAxLjgxLTEuNDhzLjMyIDAgLjQxLjA5YTE5IDE5IDAgMCAwLTIuMDcgMi44MWMwIC4xMi0uMzEgMCAxLjUzIDEuNzFsLjI3LjI0QzE5IDEzLjU3IDE2IDE2LjczIDE1Ljc0IDE3YTIuNjYgMi42NiAwIDAgMS0xIC40MyAzLjcyIDMuNzIgMCAwIDEtLjIyLTEuNTJMMTcuNyAxMmEuMy4zIDAgMCAwLS40Ny0uMzdjLS43Mi44OC0zLjQ1IDMuMzktMy42OSAzLjkxYTQgNCAwIDAgMCAuMjggMi42MiAxIDEgMCAwIDAgLjkzLjMyIDQuMjYgNC4yNiAwIDAgMCAxLjc2LS42NWMuNi0uNjIgMy44Ni00Ljc5IDQuNjUtNS4zMWEyMCAyMCAwIDAgMCAxLjc3LTEuNjQgNC42NyA0LjY3IDAgMCAwIDEtMS4zN2MuNS0xLjU3LTEuODItMi42Ni0yLjc5LTIuNTdabTEuNjYgMi4zM2ExMi45IDEyLjkgMCAwIDEtMS41OCAxLjg4Yy0uOTEgMS0uNjUuNzQtMSAuNDYtMS41Mi0xLjI2LTEuMzMtMS0xLjI3LTEuMjFsMi0yLjE2Yy4zNC0uMzgtLjA2LS40NS43LS4xNS40NC4xNiAxLjQzLjYzIDEuMTUgMS4xOFoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwMjAyMDIiIGQ9Ik03LjIgMjIuNTNjLTEuNDgtLjI1LTEuNDgtMi4xMS0xLjYxLTMuNTNhNDAgNDAgMCAwIDEgLjE1LTYuNTdjLjE4LTIuNDYuNi0yLjI1LjU5LTUuNTEgMC0xLjczLS4zMy00LjA2LTEuNzktNWE0MC4yOSA0MC4yOSAwIDAgMSA2LjI0LjA4YzIuNjQuMTggNS43MS0uMTQgNi45MS42M0MxOS4yMyAzLjYzIDE4LjEyIDYgMTkgNmEuMzIuMzIgMCAwIDAgLjMxLS4zNmMtLjA2LTEuMzEuMjQtMi40NC0uODEtMy40NEE1LjgyIDUuODIgMCAwIDAgMTQuNzYgMWE3NS40NiA3NS40NiAwIDAgMC04LjU3IDBDNS43NyAxIDEuNiAxLjUgMSAyLjA4QTMuMTcgMy4xNyAwIDAgMCAwIDQuNSA0LjYxIDQuNjEgMCAwIDAgLjcyIDdhMS45MiAxLjkyIDAgMCAwIC45My42MmMxIC4zMSAzLjI0LjI1IDIuODYtLjU1QzQuNCA2LjggMy4xOSA3IDMuMTEgN2EyLjM1IDIuMzUgMCAwIDEtMS43Ny0uNTYgMy43NyAzLjc3IDAgMCAxLS40OC0yIDIuMzEgMi4zMSAwIDAgMSAuNzYtMS43MyAzLjU0IDMuNTQgMCAwIDEgMS4yNy0uMzFjMS4xMSAwIDEuNjQuNjYgMiAxLjczYTE0LjEzIDE0LjEzIDAgMCAxIC4zIDQuNDYgMzMgMzMgMCAwIDAtLjU1IDdjMCAxLjQzLjE5IDUgLjg0IDYuMjJhMi4xIDIuMSAwIDAgMCAxLjY3IDEuMjQuMy4zIDAgMCAwIC4wNS0uNTJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuODUgMTkuNTRhOCA4IDAgMCAxLTEuNzEtMy4xOS4yOS4yOSAwIDEgMC0uNTcuMTVjLjc1IDMuMzMgMi4xOCA0IDIuNzkgNC43OS0uMzQuMDgtMTMuMjYgMS4xLTE0IDFhLjMzLjMzIDAgMSAwLS4wOS42NmMxLjYxLjI2IDEwLjU5LS4yMiAxMy4xLS40OWEzIDMgMCAwIDAgMi0uNjVjLjYzLS42Ny0uNzEtMS40Ny0xLjUyLTIuMjdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNOS42NyAxNi44NmMuMzkgMCAuNDYuODQuNSAxLjI2IDAgLjEzLS4wNy43OC4zNS45NWEuNTEuNTEgMCAwIDAgLjQ1IDBjMS42My0uODUuOTMtLjE4IDEuNDYtLjE4LjY4IDAgLjU2LTEuMzktMS4yNS0xIDAtMS4yNC0uMzQtMi4yOS0xLjU5LTIuMmEyLjc1IDIuNzUgMCAwIDAtMi4xOCAxLjgxIDMuOTIgMy45MiAwIDAgMC0uMzQgMS4wNWMuMTEgMS44NC44Ni0xLjY4IDIuNi0xLjY5WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTguNTcgOC40MWM1LjI4LjE5IDIuMzIgMCA2LjA4IDBhLjM0LjM0IDAgMCAwIC4zNS0uMzUuNDcuNDcgMCAwIDAtLjM5LS4zN2MtLjI4LS4wNi0yLjEtLjMtMi45NC0uMzNhMTcuODQgMTcuODQgMCAwIDAtMy44NC40OC4zMS4zMSAwIDAgMCAuMi41M2MuMDkuMDIuNDguMDQuNTQuMDRaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTMuMjIgMTEuNjRjLTUuMi0uMTUtNS40OS4xMi01LjU3LjM0YS4zLjMgMCAwIDAgLjE3LjM4IDEuMjMgMS4yMyAwIDAgMCAuNDQuMWMuODQuMDYgNy4yOC4zOCA3LjI0LS40Mi0uMDMtLjU4LTEuMzctLjMzLTIuMjgtLjRaIi8+PC9nPjwvc3ZnPg==;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"226\" y=\"30\" width=\"64\" height=\"64\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T3_DJ9xneiyqL2eggwZx-5\" value=\"&lt;span style=&quot;font-size: 14px;&quot;&gt;Data Contract&lt;/span&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Architects Daughter;fontSize=14;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontStyle=1\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"207\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-6\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNNC44NiAxNi4yNGE4LjUxIDguNTEgMCAwIDAtMS42OC4xMSAyLjc3IDIuNzcgMCAwIDAtLjcxLjA3LjU5LjU5IDAgMCAwLS4zNi4zNSA2IDYgMCAwIDAtLjIzIDIuMTJjLjA2IDEuNTguNDEgMy40Ni41MSA0LjQzYS4yOC4yOCAwIDAgMC0uMTcuMjguMjkuMjkgMCAwIDAgLjMzLjI1Yy4zMSAwIC41OS4xMi44OS4xNGEyLjQxIDIuNDEgMCAwIDAgLjM4IDAgMi4yIDIuMiAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYy4wNy0uOTUuMTQtMS45LjE4LTIuODUgMC0uNjMuMDYtMS4yNy4wNy0xLjkxIDAtLjIzLjA3LS44LjA2LTEuMjRhMS42NyAxLjY3IDAgMCAwLS4xOC0uNzcgMSAxIDAgMCAwLS43My0uMzhabS0uNzIgNi42NmEyLjU1IDIuNTUgMCAwIDAtLjM5IDAgMi42MyAyLjYzIDAgMCAwLS4zOS4wNiAyLjU1IDIuNTUgMCAwIDAtLjM5LjEzYzAtLjg3LS4xMi0yLjI2LS4xMi0zLjU0YTguNjkgOC42OSAwIDAgMSAuMTctMmwuMjEgMGMxLjc3LS4wOCAxLjQ1LS40MSAxLjQ5IDEuMjMgMCAuNjMuMDYgMS4yNS4wNyAxLjg4bDAgMi40NGMtLjIxLS4xLS40Mi0uMTgtLjY1LS4yWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTExLjIzIDEzLjQ2YTEgMSAwIDAgMC0uNzQtLjQyIDkuMzYgOS4zNiAwIDAgMC0xLjY4LjExIDMuMjIgMy4yMiAwIDAgMC0uNzEuMDYuNjcuNjcgMCAwIDAtLjM3LjM1IDEwLjYgMTAuNiAwIDAgMC0uMjMgMy4xYy4wNyAyLjQ3LjQ0IDUuNjMuNTIgNi42NmEuMjguMjggMCAwIDAtLjE3LjI4LjI5LjI5IDAgMCAwIC4zMy4yNWMuMzEgMCAuNTkuMTIuODkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMiAyLjIgMCAwIDAgLjM3LS4wNmMuMy0uMDYuNTctLjE0Ljg2LS4yMmwuMDcgMGEuMzMuMzMgMCAwIDAgLjM0LS4zMmMuMDYtLjkzLjE0LTIuOTQuMi00Ljc3LjA1LTEuMzEuMDgtMi41My4wOC0zLjE5IDAtLjI3LjA2LTEgMC0xLjQ0YTEuMyAxLjMgMCAwIDAtLjE0LS41M1pNOS43NyAyMi45YTIuNTUgMi41NSAwIDAgMC0uMzkgMCAyLjYzIDIuNjMgMCAwIDAtLjM5LjA2IDIuNTUgMi41NSAwIDAgMC0uMzkuMTNjMC0xLjIyLS4xNC00LjEyLS4xLTYuNDJhMTMuODMgMTMuODMgMCAwIDEgLjE3LTIuMzVsLjE5IDBjMS43NS0uMDcgMS40Ni0uNDEgMS40NiAxLjIzIDAgLjc5LjA3IDIuMzcuMDkgNGwwIDMuNTdjLS4xOS0uMTItLjQxLS4yLS42NC0uMjJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTYuMTIgMTYuMjRhOC41MSA4LjUxIDAgMCAwLTEuNjguMTEgMi43NyAyLjc3IDAgMCAwLS43MS4wNy41OS41OSAwIDAgMC0uMzYuMzUgNiA2IDAgMCAwLS4yMyAyLjEyYy4wNiAxLjU4LjQxIDMuNDYuNTEgNC40M2EuMjcuMjcgMCAwIDAtLjE3LjI4LjI5LjI5IDAgMCAwIC4zMy4yNWMuMzEgMCAuNTguMTIuODkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMzggMi4zOCAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYy4wNy0uOTUuMTQtMS45LjE4LTIuODUgMC0uNjMuMDYtMS4yNy4wNy0xLjkxIDAtLjIzLjA3LS44LjA1LTEuMjRhMS42OCAxLjY4IDAgMCAwLS4xNy0uNzcgMSAxIDAgMCAwLS43My0uMzhabS0uNzIgNi42NmEyLjY4IDIuNjggMCAwIDAtLjQgMCAyLjUgMi41IDAgMCAwLS4zOC4wNiAyLjU1IDIuNTUgMCAwIDAtLjM5LjEzYzAtLjg3LS4xMy0yLjI2LS4xMi0zLjU0YTguNjkgOC42OSAwIDAgMSAuMTctMmwuMjEgMGMxLjc3LS4wOCAxLjQzLS40MyAxLjQ5IDEuMjMgMCAuNjMuMDYgMS4yNS4wNyAxLjg4bDAgMi40NGMtLjIxLS4xLS40Mi0uMTgtLjY1LS4yWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTIyLjY1IDEwLjE1YTEuMyAxLjMgMCAwIDAtLjE2LS41NyAxIDEgMCAwIDAtLjc0LS40MiA5LjI5IDkuMjkgMCAwIDAtMS42OC4xMSAzLjIyIDMuMjIgMCAwIDAtLjcxLjA2LjYyLjYyIDAgMCAwLS4zNy4zNiAxNy4zMyAxNy4zMyAwIDAgMC0uMjQgNC4yNWMuMDggMy41Ni40NSA4LjI0LjUzIDkuMzhhLjI2LjI2IDAgMCAwLS4xNy4yOC4yOS4yOSAwIDAgMCAuMzIuMjVjLjMyIDAgLjU5LjEyLjkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMzggMi4zOCAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYzAtLjkxLjE1LTQuMTkuMjEtNy4xLjA1LTIuMTMuMDgtNC4wNy4wOC00Ljc0YTEzLjM1IDEzLjM1IDAgMCAwIC4wMS0xLjRaTTIxIDIyLjlhMi42OCAyLjY4IDAgMCAwLS40IDAgMi42MyAyLjYzIDAgMCAwLS4zOS4wNiAyLjg0IDIuODQgMCAwIDAtLjM4LjEzYzAtMS40NC0uMTMtNS43OS0uMDktOS4xM2EyOC40NiAyOC40NiAwIDAgMSAuMTctMy41MmwuMTcgMGMxLjc3LS4wNyAxLjQ3LS4zMyAxLjQ1IDEuMjMgMCAuOTEuMDggNC4xOC4xMSA3LjA4bDAgNC4zMmMtLjE3LS4wNy0uMzgtLjE1LS42NC0uMTdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMTkuNjcgMy40OWExLjY1IDEuNjUgMCAwIDAgLjgyLjIgMi4xMSAyLjExIDAgMCAwIC41IDAgNC4wNiA0LjA2IDAgMCAwIC42My0uMjQuMzEuMzEgMCAwIDAgLjE4LS4yMSAxLjUzIDEuNTMgMCAwIDAgLjcxLTIgMS42NyAxLjY3IDAgMCAwLTIuMjctMUEyLjM4IDIuMzggMCAwIDAgMTkgMmExLjc5IDEuNzkgMCAwIDAgLjE3LjkgMTMuMzIgMTMuMzIgMCAwIDAtMS4wOCAzLjE0Yy0uMTEuNDQtLjIyLjg4LS4zNSAxLjNzLS4xOC41NS0uMy44YTMuMTMgMy4xMyAwIDAgMS0xLjI1IDEuNDYgMS42MSAxLjYxIDAgMCAwLTEuNzktLjMgMS4zMSAxLjMxIDAgMCAwLS4yNC4xN2MtLjI3LS40Ny0uNDYtLjk0LS42OS0xLjRhNS45MiA1LjkyIDAgMCAwLS42OC0xQTMuOTEgMy45MSAwIDAgMCAxMSA1LjkzYTEuNyAxLjcgMCAwIDAgLjEtMS41MSAxLjY3IDEuNjcgMCAwIDAtMi4yNy0xQTIuNDEgMi40MSAwIDAgMCA3LjUgNS4zYTEuODEgMS44MSAwIDAgMCAuMDYuNTdoLS4wOGE1LjcxIDUuNzEgMCAwIDAtMS42NSAxIDUuMTIgNS4xMiAwIDAgMC0uNTkuNTUgNy41MiA3LjUyIDAgMCAwLS41LjYyYy0uMy40My0uNTMuODgtLjc3IDEuM2ExLjY1IDEuNjUgMCAwIDAtMS4zNiAwIDIuMzggMi4zOCAwIDAgMC0xLjI4IDEuODkgMS40NSAxLjQ1IDAgMCAwIDEuNTMgMS42NiAyLjA3IDIuMDcgMCAwIDAgLjUgMCAzLjcxIDMuNzEgMCAwIDAgLjY0LS4zMy4yOS4yOSAwIDAgMCAuMTgtLjIxIDEuNTEgMS41MSAwIDAgMCAuNzEtMiAyLjA3IDIuMDcgMCAwIDAtLjM5LS42NWMuNC0uMzguODItLjc4IDEuMjMtMS4yMS4yMi0uMjMuNDQtLjQ4LjY1LS43MnMuNDItLjQ5LjY1LS43MWE1LjcyIDUuNzIgMCAwIDEgLjczLS41OXMwIDAgLjA2IDBBMS41NSAxLjU1IDAgMCAwIDkgN2EyLjA3IDIuMDcgMCAwIDAgLjUgMCA0LjE2IDQuMTYgMCAwIDAgLjY0LS4yNC4zLjMgMCAwIDAgLjE3LS4yMSAxLjU5IDEuNTkgMCAwIDAgLjI2LS4xNC4yNC4yNCAwIDAgMCAuMTQuMTQgMy45MSAzLjkxIDAgMCAxIC42OC41OCA1LjIzIDUuMjMgMCAwIDEgLjQxLjU1Yy4xNC4yLjI3LjM5LjQyLjU4YTE2IDE2IDAgMCAwIDEuNCAxLjc4IDIuMzEgMi4zMSAwIDAgMC0uNTMgMS4yNSAxLjQ1IDEuNDUgMCAwIDAgMS41NCAxLjY2IDIgMiAwIDAgMCAuNDkgMCA0LjE2IDQuMTYgMCAwIDAgLjY0LS4yNC4zLjMgMCAwIDAgLjE3LS4yMSAxLjUxIDEuNTEgMCAwIDAgLjcxLTIgMSAxIDAgMCAwLS4wOC0uMTggMy44IDMuOCAwIDAgMCAxLjY4LTEuNDggNS4yNyA1LjI3IDAgMCAwIC40Ni0uOTIgOS40IDkuNCAwIDAgMCAuMzktMS40MyAyMC43MiAyMC43MiAwIDAgMSAuNTgtM1ptLjQzLTEuNjhhMS4zNSAxLjM1IDAgMCAxIC42Mi0uNjcuNjkuNjkgMCAwIDEgMSAuMzkuNzguNzggMCAwIDEtLjMzIDEuMTQuMzQuMzQgMCAwIDAtLjIxLjI4TDIxIDNhMS4zNSAxLjM1IDAgMCAxLS40IDAgLjY2LjY2IDAgMCAxLS42LS41OSAxLjEyIDEuMTIgMCAwIDEgLjEtLjZabS0xNi4zOSAxMGEuMzQuMzQgMCAwIDAtLjIxLjI4bC0uMTYgMGExLjMzIDEuMzMgMCAwIDEtLjQgMCAuNjcuNjcgMCAwIDEtLjYxLS41OCAxLjI0IDEuMjQgMCAwIDEgLjE0LS41MSAxLjQ0IDEuNDQgMCAwIDEgLjYyLS42Ny43MS43MSAwIDAgMSAxIC4zOS43OC43OCAwIDAgMS0uMzggMS4xWm02LjE3LTUuOWEuMzYuMzYgMCAwIDAtLjIxLjI4bC0uMTYgMGExLjMzIDEuMzMgMCAwIDEtLjQgMCAuNjcuNjcgMCAwIDEtLjYxLS41OCAxLjI0IDEuMjQgMCAwIDEgLjE0LS41OCAxLjQ5IDEuNDkgMCAwIDEgLjYyLS42Ny43MS43MSAwIDAgMSAxIC4zOS43OC43OCAwIDAgMS0uMzggMS4xN1ptNS42MyA1LjlhLjM3LjM3IDAgMCAwLS4yMi4yOGwtLjE2IDBhMS4zNCAxLjM0IDAgMCAxLS40IDAgLjY3LjY3IDAgMCAxLS42MS0uNTggMS4yNCAxLjI0IDAgMCAxIC4xNC0uNTggMS40OSAxLjQ5IDAgMCAxIC42Mi0uNjcuNzEuNzEgMCAwIDEgMSAuMzkuNzguNzggMCAwIDEtLjM3IDEuMTdaIi8+PC9nPjwvc3ZnPg==;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"392.00074074074064\" y=\"146.00407407407403\" width=\"24\" height=\"24\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-7\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAEtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwMDAiCiAgIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAwIgogICBleGlmOkNvbG9yU3BhY2U9IjEiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAwMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAwMCIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iNzIvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iNzIvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wMi0yMlQxNzowMzo1OSswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wMi0yMlQxNzowMzo1OSswMTowMCI+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InByb2R1Y2VkIgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJQaG90byBpUGFkIDEuMTAuMyIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMi0wMi0yMlQxNzowMzo1OSswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+5Bqi7gAAAYBpQ0NQc1JHQiBJRUM2MTk2Ni0yLjEAACiRdZHfK4NRGMc/24iYpkguqCWUQjO1uFG2NGpJM2W42d79Uvvx9r6T5Fa5XVHixq8L/gJulWuliJRcyjVxg17Pu6kt2XN6zvM533Oep3OeA9ZQWsnoNS7IZPNa0O91zocXnHXPWGnDQR+dEUVXx2dmAlS1jzssZrwZMGtVP/evNcbiugKWeuExRdXywpPCgdW8avK2cKuSisSET4X7Nbmg8K2pR0v8YnKyxF8ma6GgD6zNws5kBUcrWElpGWF5Od2Z9Iryex/zJfZ4dm5WYpd4BzpB/HhxMsUEPjwMMSqzhwHcDMqKKvmuYv40OclVZFZZQ2OZJCny9Iu6ItXjEhOix2WkWTP7/7evemLYXapu90Ltk2G89UDdFnwXDOPz0DC+j8D2CBfZcn7uAEbeRS+Ute59cGzA2WVZi+7A+Sa0P6gRLVKUbOLWRAJeT6ApDC3X0LBY6tnvPsf3EFqXr7qC3T3olfOOpR9npWfmjQ3JvAAAAAlwSFlzAAALEwAACxMBAJqcGAAAIABJREFUeJzs3XeUXlW9//H3M5NGSAIJPfQOAkE6IlIEREBFiigiXkG8+OOCiorYC6KoiHQEFQuKBUQE7KgUadIJvYVeQggJpE9mht8f38wFc5PJ88yc8+xT3q+1PsvFvS55Zu/T9jl7fzdIkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkgqkkfoHSJKkzDUWZCiwAjAeWBqYC7wCvLDgP+cDvYl+oyRJWogDdEmSyqUDGAEsCwwDXgVmAT3AEGAdYEdgJ2JgPmrBf69jwX+3hxiYzwEeBX4CXLPgn19t498hSZIW4gBdkqTiaxCD8jcBHwHWI76Idyz4//cSg+sGMBwYDYwhvqB3LPw/tsCrxBf1KcBU4O/AmcCzxCBekiRJkiTx2hT1twC/Ae4EHgdmEwPoVzNMLzANeAC4Etic+BovSZIkSVItNYgv3uOAY4AbgUnEoLzvK3ne6QIeAX4OrISz7SRJkiRJNdK3rnwr4HzgLmAy0E17BuWLyizgVmBb/JouSZIkSaqwvkH5BOBbwA3El+sZtO9r+ZLSAzwMfHDBb5UkSZIkqRI6iCJuGwNfAa4CHiLWf6f8Wr6kPAscBSyVfZNIkiRJktQefcXe1gM+D/yDKMY2ldjuLPXgu9k8DxxNMQfpfS8+RhPbzy294J87cQ29JKlEvGlJkpS9xoIsD+wPvAtYG1iB17Y/K6PJwPHAr4F5iX5DBzEAH73gP9cFdga2IIrrDSVmI8wkZif8ldjnfTpuHydJKjgH6JIkZadBfGHeATiU2K5sZWAsMXCswn33aeD9RIX57jb+e4cBBxDr4ccv+Oe+dfxjgJFEMbsG8cW/l9jnfTrwEnALcDZwDzFzQZIkSZJUMQ1iKvVqwCeAq4HHiC+4RSn2lmV6iT3ZV6c9LxwawPrEev2niS/3rbZrL1F872HgEqIwn5XpJUmSJKkiGsTX252AC4CJxBTwMq0rH2i6gXOBUYNuxf71Dc5vJvZnz+K3zyEG6j8kXqp05Pw3SJIkSZJy0kFMWz+WWNs8iep+Le8vLwGbke8Ad3ViKn0eLz1mENPdP0WsZ5ckSZIklUCDqAq+FfHl+E7gBerxtXxx6SWq0udV1X154gVIVl/OF/c3vECsTz8wx79FkiRJkjRIHUTl9Q8CfyOmRr9C/b6WLy6/Jwq0ZW0p4A/EevN2/B09xPr2vwHbEwXoJEmSJEmJ9e1bviVwHnAH8Cz5fskta/IYoHcSsxRmJvh7uoBHgR/g+nRJkiRJSqYDWA74EK99LZ+BX8v7y5eI7c2y0gAOIortpWz3GcDdwNHkXwhPkiRJkrRAB7As8DmiWrhfy5vLfGA74ot3VpYjquH3FODv6yVeFPyDqD0wNMO/U5IkSZK0QN/e5WsCpwK3AVMoxsCwLLmdWJ+flQ7gdGIbtNR/2+vTRcymOBkYR3v2fpckSZKkyusgpmS/Ffg1sc3WdByYt5pe4L1kW0xtWeAxirukYBpwHbANMCTDv1uSJEmSaqVBFDM7hti66zFgNsUdDBY9twOrkO3X5LcDLxfgb+sv84FHgG8QLxQkSZIkSU1qEAOp44GbiDXFdd67PIt0A7uT/VfkY4BZBfj7mslLwLXA5mS7Bl+SJEmSKqcBLAN8Avg3sb68m/QDuyrkPPL5erw7xf+C/vrMBx4CvgCMzqE9JEmSJKnUGsS2WP8PuJH4Yu7APLs8BmxEPvuDjwHuo3z1AF4ktuXbCL+mS5IkSRIN4ivm/xAD8+dxYJ51uoDdyG+7sQbwZmBqAf7WVjMPuJ+Ypr901g0jSZIkSWXQAEYA7wP+hQPzvNILfAhYqqleGbihwIGUa6r769toMvBH4A34NV2SJElSTfQNzA8kqrI/jcXf8sxXgLG0Zw/wkcB7iO3vUv/dA8lc4AHga7hvuiRJkqSKGwLsAPwZeBIH5nnne2S/pdqSLAXsDDxHebfCmwrcTOwXvzQO1CVJkiRVSAewNnAh8DCx7jf1IKzqOQlYjXyKwi3JEGACsZ1ZWV/C9BCzO64F9idmB0iSJElSaXUSa3ovIKp8z6K8X1XLkl6i4NnKpBmc92kQL2WOpJzr0vsyH3gK+DuwDzFQ94u6JEmSpNLoAFYHzseBeTvTBRxA7HVelEHkaGBz4DLi96Vuo8G07ZPEtmz74NR3SZIkSQXXIPbEPhG4C5iBA/N2ZRqwO/lXax+IBvHCZkdiS7Oy7Zf++rx+oP52/KIuSZIkqWAaxEDlcGIv85dwYN7OPE7sQ57XPudZ6QQ2BI4nXt6kbrfBZB7wBPBP4GBgGRyoS5IkSUqog1jr/EngOuBZ3Mu83XkA2IYozFYWY4lK73dR/uOlC3iGeDH1cWB53EddkiRJUht1AKsCJwN3AC9Q/oFWGTMJ2JpyDgiH8NrX9DIXketLNzAZuBX4PFFBv4z9IkmSJKlERgLHArcR657LvJ64zHkO2I5yDwIbxNf07Yip4mXdku316QFeJGYHfBUYT9pq+pIkSZIqqBPYCbiK+FLowDxdXgHeQrmmtfenE1iLWMs9lfTtm0V6F/wtE4FTgfWpTn9JkiRJSqSvsNfFwKOUe6usKmQO8DZgWH+dVlIjgS2IZRNVWTLRC0wnthv8IbApxS/mJ0mSJKlA+qqy7wX8gShENpv0g526Zz5wEDBi8V1Xeg1gA2IwO5f0bZ5VeonK9Q8BNwCnE9vijcEp8JIkSZIWoQGMBj4N/JvYRmoe6Qc3JgbnBwOjFtt71bIKcRzOJH3bZ51uojDe48DdxEuwnajmrAhJkiRJLWoAKwDnAHcCU3CNeZHSBXyAGJzXaa/tscCBVGdd+uIyD3gMuAl4Bw7UJUmSpFpqEFNsTyeKWb1CTMVNPWAxr2UmsC/1G5z3GUl8XX6c6h+bPcCTwM1UqwigJEmSpH40gJWBnxLbQb1M9Qc/ZcwTwG5Ue815M4YQxeNuoTrF4/pLD7HH/bXEfup1fDEjSZIkVV4Hr1Vkv4f4OuvAvJi5HNgaK3736SCKx/2C+tRF6AbuB34MLDP4JpQkSZKUWoP4Avs+4F/Ag8RWXakHH2bR6SKKo61DbHGn1zSIL8qfISqip+6rdmUm8ULtEJxNIUmSJJVSJ7A58Eui8NvT1GN6cJnzDLAnsCxOa+7PWOCdwLPUawbIM8Q0/43w5Y0kSZJUCsOAjxB7LT8MzKJeg5iy5mJgG6zg3azhRHvVZV16X3qIvdR/Rey84IscSZIkqWAaRLXrLwC3As9Rr0FLmTMLOBJYC7+KtqoTWB84D5hL+r5sZ2YD9wLHAaMH25CSJEmSBq8DWBX4PjGN/UX8Wl6mXA/sTAyw/BI6MH07EnwIeIn0fdruTAHuAA4ClhpcU0qSJEkaiOHA/sA/gPtw//KyZSbwSaKivntdZ2MUsV/6A8Q08NR93M70EjUmbicK6I0lXt5JkiRJykkDGAOcRXwxewqYT/rBgWltIHUFsCOxbZZfzbM1BNgE+Dn12Ypt4eNrClHx/ZfABHwBJEmSJGWqQRSD+jkwEb+WlzWTgHcBa+KgKU8NYtnHh4nBal3PldlEkcjbgPcSs24kSZIkDVAHsDZwCfFFzGrs5cw84EvE18zh+NW8XUYDOwA3Uu+Cia+f/v4mLEQoSZIktaSTGFj8FbgfmEP6h3wzsPwLeCswDtcEpzCEqPL+FWAa9X7B1UvM4vg7UVTPF0WSJElSP4YBhxL7l08Cukj/UG8GlheJrdM2AIailBrAcsAuwHVYt6GLKCz5XdyeTZIkSfo/hgIfA24GnqHe03HLnlnAl4GtcOu0ohkKrAccBTxB/Sq9L5zpwN3AAcTLQUmSJKnWhgPHArcCk3HAUOZ0AecA2+N09iLr2wnhjcCJwFTqPe39VWI3iH8TW/553EqSJKlW+gYIpxJFm17AAUKZ00Nsm7Yrsa7XAlzl0AEsT7xQ+THwMvU+D3uAh4DfEi+YJEmSpErrANbgta3S6j4gKHt6gauBPXHbtDLrBMYT+9L/kJj2Xefzcg5wL7HrwNKDaFdJkiSpcBrENPZDiGre9+NWaWVPL7Gv9P7Aurh2tyqGAKsA2wDfI4r81fk8nUqsT/8sMGoQ7SpJkiQl17d/+XnAHVj4rQrpBW4C3kFs2zUCC8BVUQewIlHk70Tgeeo9UJ8C3AOcC6yAx7wkSZJKokEM2vYDrgIeAGZQ74f7qmQi8B5iYD4cByl10LdGfSvgi0QhtToXcZxBbM32F2LrQGstSJIkqZD61pb3fS1/CvdZrkomAu8iBiRL4cC8jjqIomkTgKOBB6n3bJguopjcDcC2WHtBkiRJBTEcOIj4Wn4/fi2vUp4DDgc2xi/mCh3E7gsbEcsc/gHMI/2xmio9wKPAzcQsAwfqkiRJaru+LdJOI7ZIexq/llcps4HjgM2JwlgOzLUow4F1gHcTxR+7SH/spkoP8AjwT2A1PGckSZLUBg1gWWIbprtwi7SqpQf4DfDmBf3sIEPNGAGsRwzUr6HeL+vmEzOJTgVGD6ZRJUmSpMXp+2J+PrEe2Wns1ctEYF+ijoCFr9SqvuKQ6wJvB26h3mvUXybOqR1x2rskSZIyNAI4BbgTmIkD86rlTqLi/oa4zlzZGEZ8Ud8DmEy9rxmTiIrvbs0mSZKkQRkBfItYYz6dej9kVy29xFZRHyCKfbmXufIwFHgD8AlgFumP+1SZR5xvHyPONUmSJKkpDWLd5CnEVmnTcGBepfQQVbf3Ir6Yj8SBufI3BtiC2HqxzteTycTU//WIaviSJEnSInUSFbsvJdZN+sW8WukB/gTsCaxNTEGW2qlBbNd3CjCH9OdEqvQCzxP7p78DWI44H31RJkmSVHMN4sHwEGKLpIep94NzVXMDMTBfCwfmSm8FYHvgBdKfG0XIHGKbykuJmS3L4td1SZKk2lka+CpwK/AM9a62XNU8Qrx8WR8H5iqWTmJt+jeA2aQ/V4qSbmAq8cL0HcR12i/rkiRJFTYCOBm4G7dKq2J6iaJ+BxIDINeYq8iWI9am+zV90efyS8AFwAZ4HkuSJFXKSsB3iLWPfi2vXrqAPwDvJB7ml8IHepVDg3iZ9FdgPunPpaJmEvARrAIvSZJUSisCBwFnA/eT/uHS5JNZwKnAW4A1cR9zldeawMHEzJ7U51WRMwv4PjBhYM0sSe3hw4ikulsJ2GVBdiaqJau6ZgMnAlcCTxDb4XUn/UXS4I0ENgX+DIxL/FvK4E7gh8AviZ03JEmSlMgqxNemc4EHSP9Vx7Qn3cSa1DcBY7Has6qnA9gMuBanvDebOcQgfXf8aCVJktQW44H3Az8AHiT9A6Fpb3qINbq7AasSVbClqmoQ2wLuBrxI+vOvTHkM+AqwRquNLkmSpMVbDfgAMX3xYdI/9Jk0mUsUf3sbMWAZilQfQ4kCcifgdmytpoe4duzRcqtLUgacziOp7FbntTXkuwDrJPwtSqsXeIhYvnATUXn/OaJSu1RH44gvwj8ktmVzBklr7gPOIJbHzEn8WyTVhAN0SWUzkhiI77kgGyb9NSqCecQ60p/x2qB8JjFgl+quAaxNrE+/ABiT9ueU0kvES46zgacS/xZJkqTkNgc+A/yDmLqcegqkKUbmEHvUb08U/xuCpMUZDmwD3EtM4059/pYx84GLgB1abHtJkqRSWwE4hPgi+hzpH8pMsTIHOI2oyL4iTtuVmtUBbAT8BF92Dja3EPVOrG8hSZIqZyixB/k3gduIqcmpH75M8TIHOAnYDgfm0kA1iN0tDif2AE99Xpc9zwJfIl4sS5IkldbywBHAZcArpH/IMsXNLOBM4M3EceMe5tLgjSamak/EKe9ZZC4xM+GNrXSCJElSSqsBxwBXA92kf6AyxU0PMAk4EtgSv5hLeegENga+R8xQSX3eVyVXA/vhy0RJA2AVd0l5Ww84ANifKFDkdUeL8yowFbgY+C0xdfQZoiL7qwl/l1RlDWJ69gTgN8TWbMrG48BZwI+Al9P+FEll4YOypDxMIAbk+xNb+0iL0ktMC50EXE58dXoemEIM1Ocn+2VS/QwF3kC8HFsHv/5maSZR9PQM4KHEv0VSwTlAl5SFBrAtrw3K10v7c1RAvURBqjuAa4h1r1OI9eWziX2GX+G1pQ+S2q8BbAj8gdg73UF6tl4F/gKcDvw18W+RVFAO0CUNxjbAocRau9US/xYVx1xgMnA/cDdwO/AUMQCfQUz1nE0Mxvsq9ksqjo2BPwNr4LNiXu4nvqhfQFwPJQnwoiupdSsRe78eBmyS+LeoGGYDNxJrx+8hpnPOI4pOzVqQLhyMS2XR4LVB+ur4vJinacAPgbOBJxP/FkkF4AVXUjOGAvsQg/K9gSFpf44S6wVeAC4kHuCnEF/FXyIG6w7EpfJrABsR9SFck56/HuBSYvr7dYl/i6SEHKBL6s9mxKD8A0SVX9VPL/GFp2/t+K3Ai8RAfAqxrtx141J1bQhcQnxRd5DeHrcRA/XfELOPJNWIA3RJCxsLvJ8YmG+V+Leo/eYSVYYvIqatTyemq88k1pDPIqqrOyCX6mN94HzgTTiDqp2eB85dkMmJf4skSWqjDuDtxNv6ucTgy9Qjs4kH7z2JSvwTiCr8Y4kHcV/kSoKo6v5z4oVd6utW3TKX2KZtiyX2kiRJKrUVgROAp0n/AGLan4uJ6aujgGE4fVVS/8YDxxEzaVJfv+qaa4B34ctTSZIqZX1iytwc0j9smPbnIWBXJKl1ywK7ELUpUl/L6pz7gMOJl6uSJKmktiWK/fSQ/uHCtD/zgK8DI5CkgRtCLId5BO8nqfMMcDywTL89JkmSCqMBvIOYFpf6QcKkSS/wC2INqSRloUEskfkR1i4pQl4GTgZW7a/TJElSOkOBDwH3kP7BwaTLH4HNkaR8rAzsTmy/mPp6Z2Km1E+ATfrrNEmS1D5jgE9j4be650ZgJyQpf0OJAeGZWNukKOkF/oD3AUmSklkF+Daxb3XqBwOTLvcB70aS2m9FYBvgQVybXqRcC7yln36TJEkZ2ozYx9q9aeudp4iKvp1IUjodwAbAwcALxJfc1NdHE/kzsOXiu06SJA1UB7Av8E/S3/BN2kwlljRYmV1SkYwkpr2/F3gcB+pFSS9wMbDRYntOkiQ1bQxwLPAo6W/yJm1mAd/ArXUkFdtSxGDwTcDPcY16UdJNFJNbc/FdJ0mSFmd9ovjODNLf1E3azAPOIWoOSFJZdALjif3TPwRMxq/qRcg84vlipcX2nCRJ+l97ENtk+RBjZgOn4x63kspvaWL6+37AJCwoV4TMAk4CxvbTb5Ik1dJI4EjgXtLfsE36zAC+g183JFXPCGBDYDei0KUvo9NnGvAZYFg//SZJUi2sTmyTNpX0N2iTPtOBrwPLIUnVNpRYp3488SU39fXXxFZ5e/XXaZIkVdWbiYqq3aS/IZv0eRH4IhZ/k1Q/ywLbE9fB1NdiE7kcWLe/TpMkqQqGAYcCt5L+5muKkeeB44BRSFJ9dQKbATfhi+uiZC6xa8jIfvpNkqRSWgn4CvAc6W+4phh5CvgYsRWRJAkaxFfbo4CZpL9Om9fuV+/tp98kSSqNLYGfEduZpL7BmmJkElEM0EI8krRoo4EtgDvwa3qRchUxy0GSpNLZg7iRpb6ZmuLkQWIP4CFIkpakAawHHAK8QvpruIl0A2cQdQMkSSq0BrAv8G/S30BNcXI38D6gA0lSq0YCmwN/BLpIf003kReAw/rpN0mSkukEDgYmkv6GaYqT64kXNg0kSYPRANYAdgQew33Ti5Q/AuMX33WSJLXPUODDwMOkv0GaYqQX+D2wA5KkrHUS+6YfAEwl/TXfRF4CPtBPv0mSlKulgGOAJ0l/UzTFyFzgR8SDoyQpXyOATYCvArNJfw8wkUuBFRffbZIkZWs0cDwwmfQ3QVOMTAe+BayCJKndxgFbAXcBPaS/JxiYArynv06TJGmwxgFfI6Zwpb7xmWLkaeDTxEsbSVI6DWB9otr7y6S/P5jIb4Dl+uk3SZJatjJwMjCD9Dc6U4zcQ2yVNhRJUpGMBCYAN+De6UXJ80SxVEmSBmVN4GxgDulvbqYYuQbYByuyS1KRNYB1iDoxM0l/7zCRC3DfdEnSAGwA/AT3WTWRHuASYDskSWUyBngT8CxuyVaUPA28rb9OkySpz+bEWikLzJhXiZkT5xFrGiVJ5dRJVHo/l9hpI/W9xcTLktOA4f30mySpxrYFriD9DcsUIy8B3wBWQpJUFSsBOxBbo/o1vRiZCGzaX6dJkuplE+D3pL9BmWLkSeBYYBSSpCrqBDYCjsLCr0XJHODjWNtFkmptLeBnOJXdRG4FDgWGIEmqg9HAG4F/AfNJfx8y8Fdglf46TZJUPSsCZwDzSH8jMmkzG/gxsA2SpDpqAGsD7wBeJP19ycAU3I5NkmphGeDrOJ3NwIPENPaxSJIUhco2Bc7CInJFyQ+ApfvrNElSOS0FHAdMJf3NxqTLfOC3wG64xk2StGgrAtsDd+MSuCLkQWDrfntMklQaQ4D/JvbaTH2DMenyNPBlYDySJC1ZB7G15nvx5X4R0gV8fkG/SJJKqEHcVB8i/U3FpEkv8DdgPyz6JkkamKWInV6+TFQZT31vq3uuAdbot8ckSYWzF3A76W8iJk2mAt8lvnxIkpSFccCWwPW4d3rqTAfe3393SZKKYAfizWrqG4dJk5uA/wJGIElS9vqqve8DTCP9fa/uuZAo/itJKpjNgMtJf6Mw7c9MosLrFkiS1B7DgDcA3wG6SX8vrHMeB3bst7ckSW2zDvALrLBax9wHHINvziVJ6YwBtgNuIP19sc7pBk7EejOSlMzKwNlERc/UNwXTvnQBvwZ2RpKkYmgAo4Djgdmkv1fWOTdj/RlJaquRwAnALNLfBEz78gTwBWAlJEkqro2JvdNT3zfrnJnAEUvqKEnS4L0feIr0F37TnvQAfwLeCXQiSVI5DAdOweV3qXMpsNwS+kqSNABbAdeR/kJv2pMHgC8CayFJUnntBEwi/X21znkW2GNJHSVJas5KwI9xr9E65AXgdGAbJEmqjlHETiOp77N1Ti9wKjGzQZI0AMOA44BXSH9RN/llNvArYG+suipJqra9ia+5qe+9dc5EYNMldZQk6T+9E3iI9Bdxk096gH8AHwJGI0lSfYwjXkynvhfXOXOAjxOV9yVJ/dgY+AvpL9wmn9wNfAZYDUmS6u0g4EXS35vrnL8CqyypoySpjpYl1h7PJ/3F2mSbx4DvApsjSZJeb2XgCtLfq+ucKcC+S+ooSaqLDuCjxMUx9QXaZJc7ga/ioFySpGYcjjV3Uuc8YOSSOkqSqmwXYiCX+oJsBp8e4FrgWGBtJElSq9YA/kj6e3qd8yCw9ZI6SpKqZi3gt6S/CJvBZQ4xLe/DwApIaputvt9lYSOpug4mth1NfZ+va7qAzxOzPCWp0kYCXycGdqkvvmZgmQb8AjiQ2NNVkiRlbzngZ6S/79c51xCzGiSpkg4BniL9xda0ll5iv9DTgT2AoQt3rKT22ur7XZ6HUn3sATxK+ueBumY68P4l9pIklcgWwPWkv8Ca5tI3ID8D2J94gy+pILb6fldn6t8gqe1GAicD3aR/TqhrLgSWWVJHSVLRHQPMI/1F1Sw+DsglSSqHLYHbSf/sUNc8Duy4pE6SpCIaA1xE+gup+b9xQC5JUnkNAY4DZpP+maKO6QZOXNAPklQKmwMPkf4CaiIOyCVJqp51gb+Q/jmjrrkZWH+JvSRJiR2BFdqLknnAZ3FALklSle0B3Eb65446Zibx7CtJhTMStwIpYnqAS4EdFt91kiSp5BpEpfFJpH/2qGMuxQ8ikgpkY+Ae0l8cTf+5Hng30LHobpQkSSU3DPgYMIX0zx11y7PEbAZJSuoQYnpP6ouiaT4PAkcCIxbRn5IkqfzGAF8HZpH+uaNO6QVOBYYvuYskKVvDgfNIfyE0A89k4EvAOCRJUhWtApwH6/K+AAAgAElEQVQLzCf9c0edMhHYtIn+kaRMrIt7cFYps4AzgbWRJElVtCFwCemfOeqUOcDHifoAkpSb/YHppL/omezTDfwG2BpJklRF2wKXE1OxUz931CV/JWYySFKmhgKnkf4iZ9qTq4C9kCRJVTQB+CXxcj71M0cdMgXYt6mekaQmrAHcRPqLm2l/bgHehSRJqqJ1gR8A80j/zFGHnEdsTSxJA7Y3MJX0FzSTNrcD++E6KkmSqmhV4Hu4M0878iAuJ5Q0AJ3ASbhGyfxn7gIOxIG6JElVtDyxPds00j9zVDldwOeBjua6RVLdLQ9cTfqLV5YXwceAa4HLiEGmb4gHl3uA9+GNRZKkKhoNHE9syZr6maPKuYZYSipJi7Ux8CjpL1iDzSPAMcB4Fv+1dzywE3EDctu4geU+4BBixoUkSaqWpYDDsBZRnpkOHNxsh0iql90p/5Sm64F3M7Avu+sDXyC+sKf+O8qWB4EP4kBdkqSqmgCcjdvt5pVfAMs03RuSKu9IYD7pL06DyXfJbsr1FsDFQE8B/q4y5RHgcGBI600uSZJKYCR+Vc8rjwM7Nt0Tkiqpg6jamfqCNJjMJ14w5GEj4ALK//Ki3ZkEHIpr1CVJqjK/qmefbuBE/Ngh1dIo4HLSX4gGk1nA27JumEVYh9i7sqvNf1/Zcyew1wDaW5IklYdf1bPPzcTyS0k1sRpwB+kvPoPNCVk3zBK8Abguo99ep/wT2GYA7S1JksrFr+rZZSZwRGvNL6mMtgaeJf1FZ7B5gdgGpN0awEcof0G9FLkY3wZLklQHfV/VbyT980fZ8ztgudaaX1JZ7E9MC099ockiR2fcNq1aCfgV6duhbJkPfB9YufUmlyRJJTQBOAu/qg8mzwJ7tNrwkorts0Av6S8wWeQRYGi2zTNgbyeKoqVuk7JlJvB10syCkCRJ7edX9cGlFzgVGN5qw0sqlqHAj0l/Ucky7820hQZvJPBtrPY+kEwBPgEMa7nVJUlSWU0ATqMayy7bnYnApq03uaQiGAdcTfoLSZa5hVgHXkQTsILpQDMJ+ADF7VtJkpS9DmBXYrecF0n/PFKWzAE+js9NUqmsDzxE+gtI1tk1y0bKQQdwFPAy6duqjLkD11hJklRHQ4ilgz/F9erN5i9Y10cqhV2AqaS/aGSdP2fYRnkbD/yW9G1W1lxG7D8vSZLqZzjwbuDXVKfAcV6ZAuw7sGaW1A6HAV2kv1hknR5iCnnZ7EtcOFO3XxkzF/gGsHTLrS5JkqpiJFF/6FLi2SD180lR86mBNrCkfDSAb5H+4pBXfpZdU7XdeOAfpG/DsuYp4OCWW12SJFXNGOCDwJ+wOO+i8pGBN62KzoID5TIUuAB4X+ofkpN5wAbAk6l/yCB0AMcDJxBrrNS6fwEfA+5M/UMkSRIAI4BNiFmOGyz4v3UR26neCfwbeCWnf/dywAHE1/VdiGetuusFDiGWBkhKZARwBenf2OWZ72bWWulth/umDyY9wLnETVmSJLVPBzEYP5youn4n0M2S79u3AUcCS+X421YC/ge4ZsG/M/XzSsrMB94xuOaUNFBLU/2p09OI7eKqZAzwK9K3bZnzEnA00Nli20uSpOasQhRqOwn4J/ElfDD37qnA58h/JuF4Ysbd9cQX5dTPLCkyh+LvfCRVzjLEhSf1BSDvfCarBiugw4kpYKnbuMyZSExrkyRJAzcS2An4NHAxsawwr3v3zcBG7fmzWB34JHBTjn9PUTMD2HbwTSipGcsDt5P+xM87TxJT+KtsQ+rRl3nnIuImLEmS+tcBbEprU9Wzzmxgt7z/0IWsCRwH3DrI316mTAU2y6LxJC3eeOBe0p/w7chhGbVZ0Q0DTiV9e5c9s4AvU/2XOpIktSLrqepZZTbppmGvS0y3v38Jv7EKeQ5YL5tmk7SwtYBHSH+ityN3U79qnPsAL5C+7cuex7A4iiSpnpYmpqofB/yW2Ko09X25v8wC3pBLSzSnAexJbNtW5fXqj+NMQylzq5LveqCiZZ9smq10VgH+Tvr2r0IuBlZurfklSSqVvq3GziTNVPUs8m+KUfR1Q+Asqlsf6AFgxcxaS6q5pYktKlKf2O3K1Zm0Wnl1AJ8ltslI3RdlzzRia5dGSz0gSVIxLQfsD5xBFEqtylffIhUFXoYoLPcY6dsl69wBLJtdU0n11AFcSvoTup3ZLpOWKz/3TM8u/wI2bq35JUlKbhywH3A61RqQL5yXKF4NmU6i7a8mfftkmeuJj3+SBug7pD+R25mLs2m2yhgD/Ib0/VKFzAO+BgxvqQckSWqf1w/I76K6A/JF5dAM2i8vmwM/BuaSvp2yyJX4PCQNyIdJfwK3M11YZXJxjiYGmKn7qAp5gCigI0lSamOJCuunUb8B+cK5bpBt2Q7rAleQvq2yyKXAkGybR6q2txID1tQnbztzaiYtV11bU831UCnSC/yIeDCSJKldXj8gvxPoIf09sSiZT3kGjPsAD5O+zQabH2bdMFJVbUisxUl90rYzLxHTutS/ZYHfk76/qpLngfe11AOSJDVvLLAv8RHiDhyQLyllmkk5HPg8sVVc6nYbTI7LumGkqlmOaryRazXHZtF4NfIprPKeZf4IrNlSD0iS9H8NA/YATsEB+UDy9tabPLk1gRtI33YDTQ9R90DSIjSAv5H+RG13HiFuaGrNm4AnSd9/VclMYluVIuzFKkkqjzWAjwKXU909tNuVo1ts+6IYAnyb8tYQmEUspZS0kONIf4KmyAFZNF5NLQf8ifR9WKXcCmzRSidIkmplKLArcDJwL+nvW1VK2WdU7gVMIX07DiTPAqtn3yRSeW1J/YrCvUrsT63BaQCfA7pJ359VSTfwXWBkC/0gSaqu8cARwO+AV0h/n6pq9my2QwpsVeAa0rflQHIXMDr7JpHKZ2ngQdKflO1OL7BtBu2nsDPx9jN1v1Ypj1HO9XCSpMEZQmzJeRIxaEl9P6pLVmumc0qgEziX9O05kPwRl/tJ/JD0J2OK/DKLxtN/WBG4kvR9W7X8akHbSpKqa2XgMOAiYBrp7z11y/Qld1HpfJ307TqQnJlHY0hlcQDpT8IUmYNVs/PSAXwVK8dmnZeADzffDZKkgusAdgBOBG6jvAW+qpIb+u+u0jqGch5bx+TRGFLRrUb99jvvy7cyaD/1b3dgMun7umq5CtighX6QJBXHCsChxMyoqaS/p5jXcnw//VZ2B1O+WlPdwN55NIZUVB3Eg37qky9FXgDGDL4J1YRVKG+hkiJnLvAlopKvJKnYtiBmlt2Ms8uKmqeBpRbTf1WxJ+Xbhm8GMCGPxpCK6HOkP+lS5agM2k/N6wS+STmnVxU99xDTIyVJxdEAtie2QZtE+nuFWXI+ssierJ63Ei/5U7d3K3mS+OAjVdq6lO/kzCr3E5VR1X57AS+S/hioWnqB7wPLNN8VkqSMdQBvAU4HniL9vcE0n/upV9XwAyjfTI5bcOtZVdwVpD/RUuWdGbSfBm514HrSHwdVzDPETVeS1B6dwG7ES9LnSH8fMK2nC3jbwh1bA/9N+rZvNb8jXoRJlbM36U+wVPlnBu2nwRtCFOlzyns++T3V2cdVkopmGDEj7HycFVb2zKbeRci+QPo+aDXfyaUlpISGAQ+R/uRKkR6iSIuK4+1Ewb7Ux0YV8wqxPYlvmiVp8EYA+wIX4P7kVckrwE7oNNL3Rat5Ty4tISXyWdKfVKny08E3n3IwHqu855mbgM2a7g1JUp+liYHAr4lK0qmv5ya7TAG2RhAFDX9B+j5pJa8AG+bRGFK7jae+N5hZwKqDb0LlpBM4gfIVLClLuoCvETNoJEmLNwY4hFjrOpv012+TbZ4EPoVb7S5sKOWrD3QP8RJNKrULSX8ypcoJGbSf8rcb8Dzpj5eq5h5g26Z7Q5LqYRxwGPAH6rvDTdVzJ/AB3MWnP6sAz5K+r1rJhbm0hNQmbyH9SZQqTwOjBt+EapOVgb+T/ripanqAU3CrEkn1tjxRxfpvwHzSX5tN9ukilie4zrx5bybaLXXftZKjcmkJKWedxJvD1CdQquw/+CZUm3UAXwK6SX/8VDWPALs22yGSVAENYjuti4B5pL8Om3zyOPB5YCU0EEeRvg9byTycHagSeh/pT55UuSyD9lM6OxN7e6c+jqqaXuA8XIsnqdpWBb4IPEb6667JJz3An4B34u4lWfgx6fu0lTwBLJdLS0g5uYH0J06KzABWz6D9lNYKwF9IfzxVOU8B+zTbIZJUAp3Au4ArcDZWlfMC8C1gbZSl4cAtpO/fVvIXfDmjktiK9CdMqnwyg/ZTMTSILQJdJ5hvLiTWZUpSWa0NfANnX1U91xHV9oejvKxOvABJ3det5Kt5NISUtZ+Q/mRJkduIt+eqljcTW6SkPr6qnBeIZTGSVBbDgPcCVxJLd1JfR00+mQF8H9gMtctulOuc6gH2zKUlpIwsD8wh/cnS7nQTMwdUTeOAy0l/nFU9lwHjm+wTSUphY2JXiimkv2aa/DIR+H/AaJTCyaQ/BlrJi8AaubSElIHPkf4kSZHTs2g8Fd4nKd9WIGXLdOCIZjtEktpgJPBfxBTn1NdIk1/mEcuudkSpDQNuJ/0x0UpuXvC7pULppJ5TgZ/AN6x1si1W5W1H/o4FeCSltQVwDvHiMPU10eSXx4iaMyugItkImE3646OVnJNLS0iDcADpT4x2pxd4axaNp1JZFvgd6Y+/qmcm8AmskCqpfcYAHyXqyqS+Bpr80kNU298b7zFFVrb90V8lCglKhXEV6U+KdufUTFpOZXUMMJf0x2HVcwOx7lOS8rIxcC7xYjD1Nc/kl8lExf01UVlcQfrjppXMAjbNpSWkFm1G+hOi3bkXGJFF46nUtgQeJv3xWPXMBb4IDGmuWySpKXsSexmXqWq0aT3XELuFuEa4fFYAnif9MdRK7sbt+FQA55H+ZGhnuoi1aRLAKOB80h+XdcidxEsRSRqopYAjiRftqa9pJr/MIrZI2wSV3V6kP55azSm5tITUpGWIi2DqE6Gd+UImLaeq2R+YSvrjs+qZD3wLZ7BIas144JvElkipr2MmvzwJfAYYi6rkTNIfW62kF9g1l5aQmnAE6U+CduYGomK9tCjjgStJf5zWIQ/gdjiSlmxrYvsst8msdq4HDsKlUFU1AniI9MdZK3mC+JAptd21pD8B2pWZwHrZNJsqrEHsmW4BufzTC5xFLDOQpD6dwHuIQVvq65TJL13Ey5dtUB3sSvpjrtX8PJeWkPqxFvUqrHJ4Jq2mupgA3EP647YOeRx4W1O9IqnKlgE+TVwTUl+XTH6ZApxIzFpTvfyE9Mdfqzkol5aQFuNLpD/o25XzM2oz1csI4AzSH791yfnEPsaS6mU9Yo3qDNJfh0x+mQh8GGuQ1Nk44AXSH4utZCq+TFIblW0tyEBzB94MNDhvB54j/bFchzwB7NZct0gqubcClwM9pL/2mHzSS+yF7XVdfQ4h/XHZav5KLIGUcrU96Q/2dmQasE5GbaZ6WwG4jPTHdB3SC5wNLN1Uz0gqk+HAYcBdpL/WmPwyg5iBZu0fLcpfSH+Mtpqjc2kJ6XXOJv2Bnnd6gXdm1WDSAh+lflsTpsojwFua6xZJBTeK2OZ0MumvLSa/TAKOxerX6t/alO9ZajawYR6NIQEMox77iH4zqwaTFrIhcBvpj/E6pAf4Hi5TkcpqBLEzRtnWnZrWcjXwbqADqTmfIf1x22puwa0AlZN3k/4Azzt/x/3Ola+hwEm4drJdeQDYrqmekVQEQ4AjgadJf/0w+WQuUZX7jUitG0LUiUp9HLeaE/JoDOkS0h/ceeYpYr2w1A47A0+S/rivQ7qJmTHDmuoZSSl0AB8glqikvmaYfPI88BVgRaTB2ZryfejoJmp5SZkZC8wj/cGdV6YDm2XWWlJzlgV+Rfrjvy6ZCGzRVM9Iaqf9gHtIf40w+eR24IP4klTZOo30x3areRgL2SpDR5D+oM4r84Bds2sqqWWHAi+T/lyoQ7qILziuBZPSextwM+mvCyb79BI7mOyElI9RlHMm4nl5NIbq6QrSH9B53UAOzrCdpIFaC7iO9OdEXXIrsEkzHSMpc28mioOlvg6Y7DMPOB/YCCl/7yD9MT+Q7J1HY6helgbmkP5gziPHZdhO0mB1Al8C5pP+3KhD5gLHY2FIqV22AP5E+nPfZJ+Xge8A45Ha62LSH/+t5iliBoA0YPuR/kDOI2dk2UhShrYj1imlPkfqkhuBDZrqGUkDsRFwETFrLfX5brLNs8SLTvcvVyqrELWkUp8LreaUPBpD9fET0h/EWecS3HNTxTaKmCaY+lypS2YDnwAazXSOpKasRTxDdJP+HDfZ5n7gw1j4TcXwUdKfE61mPrB5Ho2h6usEppD+IM4y/wJGZNlIUo72B6aS/rypS64B1mmqZyQtzsrAWVR795e65gbg3fgyU8XSoJx1fG7Ec0kD8BbSH7xZ5jpgdKYtJOVvPPBn0p8/dckM4m28pNaMA74NzCL9eWyySy9RLHhHpOJ6A+V8KfjfeTSGqu27pD9ws8rVuPegyu2/icFj6nOpLvkbsFpTPSPV21Dg07hdZNXSA/wSd7xQeZxA+vOm1bwErJBHY6i6HiL9gZtFrgRGZtw2Ugpr4/ZE7cw0Yp96SYu2K3Av6c9Vk116gAtxqzSVz3DgAdKfQ63mgjwaQ9W0MekP2CzyJ1xzrmppAB8nCpulPr/qkt/hG27p9cYDvyL9uWmySzfwC2BDpPLamXLuGLFLDm2hCvos6Q/WweYyrDCq6tqAKDCS+jyrSyYTxZGkOhsCfAp4hfTnpMkm3cQXPLebVFWUcRece3GHKTWh7A/+lxDr4qQq6yReppWxMEpZ8zPc81f1tDNwD+nPQZNNuonr2fpI1TKWeKme+hxrNe/JozFUHeOINUipD9SB5tfEW36pLjYDbif9uVeXPAns3lTPSOW3CrEmOfV5Z7JJN/BTYD2k6no/6c+1VnN7Li2hytiP9AfpQHMB8VVRqpuhRAXT+aQ/D+uQXuBMLECp6hoCHIvV2auS+cBPgHWR6uFq0p93rWbPPBpC1XA66Q/QgeQcXL8hbY1VlduZh4Dtm+oZqTx2Au4m/fllBp/5wI+BdZDqZVPK99Hi6jwaQtUwkfQHaKv5ci4tIZXTcOBkyr1UpUzpBr6JRSlVfisTlbxTn1Mmm+vSz3Aqu+rtNNKfi61mh1xaQqW2POXanqAbODKXlpDK783Aw6Q/T+uSu4AJTfWMVCydwCdwOnsV0kO8ZLEquxRFXZ8n/XnZSq7IpSVUageQ/sBsNnOJ9fKSFm8kcBblevFW5swDPoe1MFQeOxIvl1KfO2Zw6SGK5G6MpNf7L9Kfn62klyj+K/2vs0h/YDaT6cSWL5KasxvwBOnP3brkBpxaqmJbiSismvpcMYNLL3AxsAmSFqUBXE/6c7WVXJhLS6i0yrDH6bM4jVQaiDFEsaDU53BdMgv4H+LhQCqKTuBjxIvu1OeIGXh6gd/h85DUjDdSrro83cDaubSESmcF0h+QS8pDwFo5/f1SXexDvOhKfT7XJVcCqzfVM1K+tgHuJP05YQaXy4AtkNSKs0l/7raSr+TTDCqb95D+YOwvtxAvESQN3lj8mt7OTAc+1EzHSDkYAXyb+CqT+lwwA88fiK00JbVuLDCN9Odxs7kvn2ZQ2ZxD+oNxcbkSGJXfny7V1m7Ao6Q/x+uS3xNrf6V22QF4gPTHvhl4/gxsu3DHSmrZZ0l/PreSzfNpBpXJfaQ/EBeVi3B/YSlPI4l90/261p5MAQ5sqmekgRtJ7AFcpnWX5j9zJfCmhTtW0oAtBTxD+nO72ZyUTzOoLNYj/UG4qJwDdOT4d0t6zVbAHaQ/7+uSXxJT7qSs7QI8Qvpj3Aws/yS2v5OUvSNJf443m0k5tYFK4tukPwgXzlfz/IMlLdIQYgrYHNJfA+qQZ4G9m+oZaclGES+2e0l/bJvWcw3xckVSfoYQRadTn+/NxuUtNTUUmEz6A7AvPcTWRJLSWR+4ivTXg7rkR8DopnpGWrS3AY+T/lg2rec6oh6IpPZ4L+nP+2bzvZzaQAW3J+kPvr7MI04aSek1gI9QrqqnZc5j+PVMrVsGOJ/0x69pPTcSL1YktVcDuI3014Bm8vSC36ua+RjpD75XgRnAHjn/rZJatwpwCemvEXVIL3A6UchGWpJ9iIe31MetaS03A3stoj8ltc+BpL8WNJudcmoDFdj3SH/gTcM1FlLR7U+smU59vahDHgC2a65bVEPjgJ+T/jg1reUu4F2L6E9J7TccmE7660IzOSOnNlCB/Y60B900+P/s3Xe8HUX5x/HPTbkhhYQSSgiQEHovB6QJIggC0kUEpP1EgUtRRKUJiNIRaQKHDlKkW0CQ3jtcEAi9J0ACSUhvJ8nN74/nXLlJbjlld5/dne/79XpesUDO7Mw5szs7M8+wYexXKSJRGABciZJQJRGzgTPRMZMyrz2A0fh/PxWVx7vA3miZqkjaXI1//1BJvBJXBUh63YbfF24CsFH8lygiEduKbGVBzXK8BqxbUatIng0Ebsf/+6ioPD4FDga6t9OeIuJvK/z7iUpiNtA3niqQtLoAny+bBuci2bYQcBYwC/+bV95jJvA79KAfqm3R9pIsxWgsv0+v9hpTRFKjARiBf59RSWwVTxVIWh1N8l+yCWjPuUherAu8jP/NK4R4AVi1smaRHGgE/oy2lGQlvgaORzNdIlnyJ/z7jkri+LgqQNJpDZL9gk1EyY9E8qY78BtgKv43sbzHNOzFqvaz5tvqwKv4f98UXcdk4DQsR4eIZMsv8e9DKol/xVUBkl7vksyXS4NzkXwbBtyH/40shHgMGFpRq0jWHIa9iPH+jik6j+nYSThLtN+MIpIBh+Pfl1QSX8ZVAZJexxL/F2sisElSFyQirnbHEiR539DyHpOAn1fYJpJ+A4F/4v+9UnQes4ArgGXbb0YRyZCf4d+nVBrDYqoDSamFgJHE94WaAWyW2NWISBr0wZLIlfC/qeU97gOWqaxZJKW+hxLBpT3mADcBK3bQhiKSPQfi37dUGj+JqQ4kxfYhvi/UkQleh4iky2rAw/jf2PIeXwP7Vtgmkh6NwHkoEVza4+/Amh20oYhk15H49y+VxiUx1YGk3IVE/2W6K9ErEJG0+jHwOf43uLzHHdhSaUm/1YBX8P/OKDqOB9CRsCJ59ij+/Uyl8XxMdSAp151o9781A4skegUikmYLY8dG6ez0eONLYNcK20R8HIZOPUhzPA18p8PWE5E8WAGYjX9/U2m8Fk81SBZ0w5bb1fsluhbb2y4iMr+1gSfxv9nlPf6Kjn5Km8VQIrg0RzOwQ4etJyJ58m/8+5xq4tV4qkGyZA/gQ6r/8owHDnUor4hkzwHYbK/3TS/PMRLYttIGkVgVgI/x/04oFoy3gD2Bhg5bT0Ty5AD8+51qozmWmpDM6QkcAbxE11+a14FDsMzNIiKVWgS4FMuQ7H3zy2u0AJcBfStsE4newdiJJt7fBcW88TGWxbl7x00nIjmzD9la2t4aL8VRGWmjt6TVWRbYBliOb47z+bAc7wNvOpVLRPJhA2wQubF3QXLsQ+AgbH+tJKMX9gLqYO+CyDxGAacDV2NHQYpIGH6Cbf/K4ku5F9EzkoiIJKwB+DkwDv831XmNOcA52PFeEq8hVLYCTZFcjAV+C/TupN1EJJ/2J9ur9ZTFXURE3CwOXIXOho4zXgPWqbRBpGrbYYNB73ZWWEwEfg/076zRRCS3DiXbg/O5aPWbiIikwCbonOg4YyZwHHZ6h0SjATiJ7D8I5iWmAediL/1EJDyLA3fi3xdFEddGXDciIiI16Q4cCUzA/+aY13gKGFZpg0iHFgHuwb89Fbav/FJgUKctJiJ5tgOWb8K7P4oqjoy2ekRq1x/YDDv+5HAsucN3gOU9CyUiiVsSuALNTMYVk7H9/1KbdYAP8G/H0GM2cD0wtLPGEpFc64O9oPPuj6KOTaOsJJFq9cIeFB/AlmB29EUdDpwMrOxTTBFxsA7wCP43yrzGPcBSFbeGgCUemoZ/24UcLcAdwGpdtJWI5NtGwDv490lRx2x0lLU42hc7l7TaL+5zWAKIAckXWUQc7Iod8eh908xjjAH2qLwpgtVIPmdpshb3Aut30VYikm99gbOBWfj3SXHE8OiqSqRyvYHbqP8LPB24Bfg+SnwkkneNwK/R/vS44gb00rMjy2Ivhr3bKOR4HNi8i3YSkfzbCxiJf58UZ/w1stoSqdDiwMtE/2X+DDgLWDW5SxERB0sARWwJmPdNNG/xKbB15U0RhK2Br/Bvm1DjJewYOxEJ26rAQ/j3SUmEEsRJonpib8Hj/mK3LoFfJJGrEhEPaxPOzTrJaAEuBBaqvCly6zj0IsgrhgO7d91EIpJzrcvZO8tTlacoodwwkrBLSPZLPh24FdgeLYEXyatdgPfwv6nmLd4CClW0Q570B+7Cvw1CjA+wE1x0zxaRHwEj8O+XkozbI6k5kQqtj83MeH3hP8PewCnrq0j+9ASOAcbjf3PNU5Sw0zO6V94Umbcm8C7+dR9ajAQOAXp03UQiknNrAA/i3y95xDYR1J9IxdK0FPU5LIO8HgRE8mUglmlby5KjjeeBVapoh6z6MTAF//oOKb4CfoW2VIgIrAjcCMzBv2/yiPeBhrprUaRCq+H/pW8vPgGOBvrFduUi4mFNwn37HldMBY4gnw8PPYDz8a/jkGICcBK6/4oILAdcSX6PTas0jq23IkWqcTz+X/rOYjyWAX5QXBUgIi52At7Bv4/JUzwADK6mEVJuCeAx/Os1lJgCnAksWknjiEiuLQVcDMzAv2/yjpnY/UgkMU/g/8Wv9MdxLbb3RUTyoSe2UuZr/PuYvMTXwD7VNEJKbUR4CYi8YgJwBnoAFRFYDDgHW5nl3TelJYp11ahIDT7D/4tfTbQA9wJbxVAXIoLGvP0AACAASURBVOJjcewkidCX0EUZtwNLV9MIKXIwmrVJIr4ETsAy44tI2PoDpwIT8e+b0hSfAwNqr1aR6nUj2w/EL2GJg0LKYiySZysDl2PHMHr3L3mI8cChZGdveiNwBf71lvf4FDgK6F1Zs4hIjvUBjgPG4d83pTF2q71qRWrTG/8vfhTxEfALoG+01SMiTpYETkMPDFHF01hyvjQbjJ3i4V1XeY53gIOwrSUiErZe2LPzaPz7prTGXTXXrkidRuL/A4gqxgGnY4ktRCT7+mIzfR/j379kPUrYPuM0Hpm1B3oZE2c0A3tiq+ZEJGw9gJ+jHB9dxXiUoFocpekM9KhiOnAhGqiL5EV3YG9soOHdv2Q93ge2qa76Y9MXuBr/OslrPAlsX3FriEiedQP2Az7Av2/KQvy8tmoWicZf8P8RxBVTgXOBgZHVloh42xq4H//+JetxA7aVwMuGwHvtlEtRf9wHfLvyphCRHOsF/Awda1pN/JPs5G6RnDoQ/x9C3DEZW9qps11F8mMd4EaynejSO6YAZ2HH6iSlG5Y5vBThdShgDpa5f73Km0JEcmwAlvztC/z7pyzF8yiBpqRAL/K1D72zmAj8AR2XIJInywF/Bibh38dkNSZix+vEfdzWxljCOu/rzVOUgGuAVapoBxHJr2Ww1aM6Lq36+BBYovoqF4nHEfj/KJKMr4GTgIWjqDwRSYVFgOPRbEE9MQ6b3Y76RIzVgL+n4PryFFOBi7AXVCIiq2I5PWbi3z9lMcaiF52SMiHNos//YzwOOwNSRPKhEdu6o4RytceXwCnAGlXW/fwGA1cBs1NwTXmJCdiWLc3yiAjAJsA/gBb8+6esxnRg82orXiQJOxPuXs4vgV+RzuOHRKR238b25Ybat0UR72D71DeqsM6HYAmJbgGmpaD8eYkvsdUNcW9DEJH0awB+gJ3U4N03ZT1asGMoZT7KkpceewM3E+5ZqaOwB9ErsSVCIpIPywJNwCHoVId6jAAex/Y2TsWSzE3FZh/WA7YFVvQqXE6NAP6E7TOf7lwWEfHVE9gH+C2wlnNZ8uK3wHnehRDpykFomcwI4DCsIxSR/FgI+D/gVfz7GYWis3gHux/rPiQi/bCVniPw75vyFH+pphFEvO0MvIv/D8c7PsYekEJdUSCSZ1sAd6D90Yp0RTO23FL3HRFZAjgNS27s3TflLa5Eq7glg3pgs8ij8P8RecfrwI71VaeIpNRy2NaWsfj3NYpw40lge0REYBhwGcrjEVdcigbnknF9sWy+k/H/QXnHY1SeKElEsmUh4GDgNfz7GkU4cR+WzFBEZAPgNrSyK864oOLWEMmAJbE3TqFnQ27BOk8lQhLJr+8Ad6GHJEU8MQe7j6yHiAh8D3gI/74p73FupQ0ikjWrYA+u3j8y7yhhySV0Fq1Ifi0PnI2WvyuiiRKWjX0VRCR0vbCkpf/Fv28KIU6vrFlEsm1T4Gn8f3DeMQk4GdsKICL51Btb/q4HKUUtMR17obscIhK6JYHfA6Px75tCiVMqahmRHNkNOw7G+8fnHaOAQ7HkeiKSX1sCd6Ll74quYwp2vu7SiEjo1sJW0MzAv28KKY6vpHFE8qg147veBtrLit3rq04RyQBlf1d0FJOAM4GBiEjIGrBTgLS/PPmYiW0hEAleP+BUlPF9LvAMsHldtSkiWbAQ8FPgVfz7HYVvjMfugYsiIiHrg01cvY1/vxRijAG26LKVRAKzFFBEGd/nAv8EVquvOkUkI7YAbkd9X2gxBjgB6I+IhGwZbPXMOPz7pVBjOLBCVw0lErLVgIfx/7F6x2zgSmBQfdUpIhmxLHAGNnDz7n8U8cUo4NcoSahI6ArATdhJDd79Usjxb2DhLtpKRMr2RfvT5wJTgdNQ5yESioWAg1D297zFSOCocvuKSJi6AXsAT+HfJyksIWe3TltMRBawCHApMAf/H7F3fAUcCfSsq0ZFJEu+B9yPf/+jqD0+Bg4BGhGRUC0MHA18hH+fpLBkcD/ttMVEpEsbAc34/6DTEO8DP6qvOkUkY9YGrsMeKrz7IEVl8R62EkLHaIqEayhwPjAR/z5JYfEZSgYnEpnu2PJAdXIWz2NnK4tIOAZhx7R9jX8fpGg/3sS2aHXvoA1FJP82B+7E8gl590mKb+IOYLFO2k1EajQIuBX/H3la4m5gjbpqVESypi/wC7RcMk3xKvBD7AxjEQlPD+zl3Iv490eKeWMyOt9cJBHbYsu9vX/0aYjZwFUo47tIaLoDewEv4N8PhRovAjt31VAikluLAsdjS6e9+yPFgvE8sGKHrScikesFnArMwL8DSENMBU5HGd9FQrQF8C+gBf++KIR4Gvh+RS0jInm0CnAZ9uzl3R8pFozZwB9RHhARNysDD+LfGaQlvsL26yvju0h4VgWuAKbj3xflMR4Btqq0MUQkd7bBzs7Wy9D0xkdYHgARSYGj0Gx623gfW/4qIuFZAlthNA7/vigP8R9gs2oaQERyoxe2h/k1/PsiRcfRAlwJ9G+/GUXEy/rY8TbenUSa4gVsz76IhKc/cAowAf++KGvRgm0b2KjqWheRPFgS+D0wGv/+SNF5DEez5iKp1g+4Ef/OIm3xOPDt2qtVRDJsUeAMLJutd1+U9pgD3A6sW1NNi0jWrQ1cg1ZlZiGmA79D2zpFMuNAYAr+nUfa4n5gwzrqVUSyawngz8A0/PuitMVs4CZg9ZprV0SyqgH4AfAw/n2RorJ4CFipvcYUkXRbFfgv/p1IGuOf2FtiEQnPIOASYCb+fZF3lIBr0YOeSIj6AE3AO/j3RYrK4itgv/YaU0SyYyHgb/h3KGmMFuBW7EWGiIRneeBqYBb+/ZFH3AgMqbsWRSRrlgJOA8bi3w8pKosWbOvBYu20p4hkzErACPw7ljTHbOA6YGhtVSwiGbciNlidg39/lGScGkHdiUh2rI69lNT+8mzF28CW7bSniGTQ6sAX+HcsWYkSUAQG11LZIpJ5q2MJ0kI543cstsRVRPLtu8C9hNO35SVmYCeRNC7YpCKSRQsDn+DfuWQxpgMXYEeMiEh4ivj3Q0nFLyOqMxFJlx7AvkAz/v2Movp4FFhlgVYVkUy7HP/OJesxBTgLO6JJRMJQIKw96Z9iD/Iikg/9gV+j7Y1ZjbHAQfM3qohk31ZoGVOUMQFbYjSgijYQkezpBQzHv89JOvaPovJExNWywHnARPz7FEVtcT0wEBHJpf/g38nkMSZhS9+HVtwSIpIl5+Dfz3jEG9g5yCKSPesDNxPWyp+8xbtYngARyanlCC8TcdIxG7gN+FaFbSIi6bcpYfedO9VfhSKSkAZgR+AR/PsORe0xE/gjtnpLRHLsd/h3OCHFU8BuQLdKGkdEUqkP8B7+/Yl3XyYi6dYLOBh4E/8+Q1FfPImdHCIiAbgX/04nxHgfOBwdWSSSRRfj34ekITartyJFJBaLYRMwo/DvJxT1xVfYSxZtKxIJyAf4dz4hxzjgDGDprhpKRFLhuyipZmvcXWddiki0VgQuAabi3z8o6osScD5KOCwSnEZsf7R3J6SwfUXXAmt12mIi4mlh4GP8+4u0RAuwZl01KiJR2Az4O2HnxchT3AusiogEaTX8OyHFgnE/sG0n7SYiPq7Ev39IW1xfT4WKSM26AT8EnsW/H1BEE28DOyAiQfsB/p2RouN4DTgQW+kgIr62x79P6CqeIfkZtBJ2GoiIJKMPcCTaopinGA8cDfRERIL3C/w7JUXX8QVwArBo+80oIjFbBPgM/76gs2gB1gUec/jsv9RetSJSoaWxnDXj8O9vFNHEHOByYCAiImUX4d85KSqPKdiD8IrtNaaIxOZG/H//XcWt5bIe4vDZM9Asukhc1gCuwX5n3v2MIrp4DHupKiIyj3vw76AU1ccc4C50xJFIEvbE/zffVcwGVimXdzFs2XnSZbiiptoVkY5sA9yHTo3IW3yM5Q4QEWnXW/h3VIr64jlsANEdEYna8tjeQO/feVdxzXzl/rdDGUrAClXVrojMrwfwE+AV/PsVRbQxBTubfiFERDrQAEzHv8NSRBMfYTkF+iEiUegOPIX/b7urmIm9SGjrJ05lua6aChaR/+kP/AYYgX+foog2WoAbgGUQEenCsvh3WoroYzxwNjAYEanHqfj/niuJi9spez9gmkNZ2i61F5GuLQ/8GZiIf1+iiD5eADZGRKRC38G/45qLZUY+CiU/iTpK2BtbJSARqd4W2GDT+3fcVUwFlurgGm5zKtPNlVSwSOAKwN+AWfj3I4ro43PgAGy1qohIxf4P/w5sLpbwrAewHvBuCsqTx3gY2AHdKEQqsSjZWWZ6VifXsZtTmeYAa3ZRxyIhagB2wucoREUyMQM4E203FJEanY5/R9YaQ8tl6gf8NQXlyWu8CRwM9EJEOnIX/r/VSmIC9jKhI73K/4xH2e7soo5FQtIPWyn4Hv79hiK+uAslyhSROt2Cf2fWGlvOV7b9gckpKFdeYzRwMjAQEWnrUPx/n5XGSRVcz7VOZWvBVkWJhGwItr/c60WZIpl4HNgUEZEIvIh/p9Ya+7dTvpXRMSNxxzSgiJI6iQCsgU9itVriKypbQrmtYxnvrqB8Inm0BTabmoU8Fora4xVge0REIjQO/86tNX7XQRl7AReloHx5jxbgXyy4kkEkFAsBr+H/W6w0flXhdXXHVsx4lfNbFZZTJOt6YpMNL+PfPyjijfeBvVFeHxGJ2CL4d3Bt44ouyrsL6XqhkOd4Cbvx9OiiTUTy5BL8f3uVxkjshUKl/uJY1vurKKdIFi2BbRn7Av++QRFvfI5tg9LzkYjEYgP8O7q28Z8Kyrws8GQKyhpKfAocA/SvoG1EsmwX/H9v1cQhVV7fZs7l1cocyaO1gWuA6fj3CYp442vgOKA3IiIx+hH+HV7beKvCcncH/ogd4+Nd5lBiInAesFwF7SOSNcsAY/H/nVUaH1D97E0D8IljmV9CS0ElHxqAnYFH8O8LFPHHVOzItEUQEUnA8fh3fG1jcpXl3wpbauRd7pBiFvA3oNB184hkQg/gafx/W9XET2q81rOdy71fjeUWSQMdkxZWlIBLgaUREUnQVfh3gPPHYlVew0Dg3hSUO8R4HJtF0KyYZNkF+P+WqonhQLcar3Vd57KPQMtDJXuGomPSQooW4GZgGCIiDh7FvyOcP2o5M7cB2yc9MwXlDzHewRKm6MFbsmYv/H8/1cbudV7z687l7+i0DpG00TFp4cW/gXUQEXH0Cf6d4fyxax3Xsx42u+R9DaHGGOAPwJJdNZRICqyObavx/t1UEy9GcN1HOF/DZGCpCK5DJA6N6Ji0EONp4NuIiDjrRTqTrB1V53UtBFyILVHyvpZQYzq2fWL1LtpKxEs/LCml92+l2tgugmvvD0xxvo4rI7gOkSjpmLQw4zVgJ0REUmJt/DvG9uJPEV3ftiiBnHe0YPkBtu6irUSSdhv+v49qo5JjKCvlnX9kNrBWhNcjUisdkxZmfIgl26w1n4eISCz2xL+DbC9ui/AaFwPuSME1KeAVLINzz05bTCR+R+P/e6g2SsAqEdbBBim4pgcivB6RauiYtHDjE+Aw9CwiIil1Ev4dZXvxfAzXeiB2jrf3tSngM+BYdJ6o+NgcG+x6/w6qjahWFrX1Ugqua/sYrkukIzomLdx4D/g/NDAXkZS7Ef8Os734IqbrHQo8lYLrU1hMxnIFDO24yUQitRTZ3PYyClg4hvo4OAXXNhzoHsO1ibQ1FB2TFmoMB/ZF/YyIZEQaZk/aixYsi2ocugEnkM0ZtLzGbOB2YONO2k2kXt2Bx/D/vtcSB8ZQHwB9SMeA5dCYrk9Ex6SFG83AHth2BhGRzJiEfwfaUQyL8brB9l9mMYNz3uNp7IxnJW2RqJ2L//e7lniOeB8wL07BNX5JPCsEJEw6Ji3seBbYERGRDFoG/060s/hufJf+P72BS5yuT9F5vI+d1dynw9YTqdzu+H+na4k5wIYx1Edba6TgOudiL1BE6qFj0sKOx4BtEBHJsK3x70w7iwPju/QF7IDt8fS+ZsWCMQ44A1i6w9YT6dzqZDdB5NUx1Ed7nkzwmjqKErBm3BcqubQOcC06Ji3U+A+W/FNEJPOa8O9UO4uT47v0dg0E/h5R2RXRx0zgOuy8WpFKLYatxvD+/tYSE7AZwSTsm9A1dRVPxH2hkhvdgF2AR/H/3iqSjxbgH0ABEZEcuQj/DrazuCq+S+/UQaQjaZKi43gA2K6D9hNp1YNsn3F8dPRV0qFG4KuYrqPaOCDma5Vs6wf8guy+eFPUF3OAW4C1EBHJofvx72g7iwfiu/QuLYstmfKuA0Xn8Tr2QiWujP+SbZfh/x2tNd7EXjAkKS1J9L4EFo35WiV7hgLnoxfoocYsbBXdKoiI5Ngn+He4ncU7sV155Q4mu3tXQ4ovgBOx5cwiAIfj/72sJzwSHa2ILRv1vva5QDHma5Xs2BLbfqZj0sKMGVh/MBQRkZzrTXoexDqKqbFdfXWWw2bzvetDUdl35hJsoCHh2hqbbfH+PtYad0VfJRV7sJNyJRlzgI1ivlZJr+7A3uiYtJBjKnABduKQiEgQ1sW/860kBsZVATX4Oek+N17xTczBZlyU1TU8K2GZ/72/g7XGNGBI5LVSuTQdR/cylghMwtEHOBL4CP/vn8InxgCnkq7nPxGRROyFfydcSWwQVwXUaHngIfzrRVF5PA/8CJuRkXwbALyN/3eunvhD5LVSnR7AZ/jXQ2scEe/lSkoMxL77Y/H/zil84gNsa1JvREQCdQr+nXElsVtcFVCnw4DJ+NePovL4GPgllgFY8qc72U/s+CnpeDg9Dv+6aI0JwFLxXq44GgZciq0c8f6uKXziBWBPtFpGRISb8e+UK4lfxlUBERhKto9wCjXGA+cAgxdoUcmy8/H/btUbe0ZeK7XpT7oyZd8U7+WKgw2B21Dit1CjBbgHSwAoIiJlzfh30JXEn+OqgIg0YEuypuBfV4rqogTcCKy3QKtK1vwU/+9TvfFI5LVSn7Pwr5O2sVWsVytJ2R54FP/vk8InZgLXAGsgIiILyMry7DviqoCIrQA8hn99KWqLR4AdsRcuki3fxh76vL9D9cQsYK2oK6ZOSwHT8a+b1ngL6BnrFUtcegD7A6/h/z1S+MQE4GxgECIi0q7B+HfWlcYLMdVBHBqw7LOaTc9uvAUcjD1QSvqtCnyF//em3rg46oqJSBH/umkbv4n3ciVi/YBfYbkVvL87Cp8YARwDLIyIiHRqa/w77UpjVEx1EKdhwBP4152i9ngHO25K0msIMBL/70q98RmWfT6NhpGuPcKTgKVjvWKJwlLAmcDX+H9nFD7xGrAfetktIlKxQ/HvvCuNFqBXPNUQqwYswd1U/OtQUXs8DWyKpM0g7Ege7+9HFPGDiOsmarfgX0dt4/pYr1bqsQpwJTAD/++JwiceArZDRESqdh7+nXg1sVI81ZCIlYCn8K9DRX1xF7AykgaLA8Px/05EEVnITr4e/vXUNlqAjWO9YqnWJsA/gDn4fz8Uyccs7GSg9RERkZr9C/8OvZrYOp5qSEwDtq85D3tlQ45Z2Hm9SyJeFgZewv+7EEWMBhaLtnpicz/+9dU2XgUaY71i6UoDsDN6AR1yTAYuwLYbiYhInd7Cv2OvJg6KpRaStwiWDCpNezoV1cck4GSgL5Kk3uQrt0NazjyvxFb419f8cWGcFywdasSONczac4QiuhgFnAgsioiIRKIb2dsfdkosNeFnbeBx/OtVUV98ARwCdEfi1hO4D/82jyrujLZ6EvEc/vU2f+wc6xVLW/2BY4HP8W93hU+8A/yMbOYFEhFJtSH4d/LVxjWx1IS/vbEMzt71q6gv3gJ2QeLSHbgD/3aOKsZiWa6zZjf86669uhwc50ULg4E/ARPxb2+FTzyF3eMaEBGRWHwP/86+2ngolppIh77AWcBM/OtZUV88AXwLiVIDcC3+bRtl7BdpDSWngXQua34azejFYQ3gOnRvCjXmYMlRN0FERGLXhH/HX228G0tNpMvK5GsJb8hxO7AiUq/eWGZg7/aMMu6JtIaSdxD+ddhe3IVt35L6bQn8G8uW792uiuRjOnA5OrVERCRR5+N/A6g2JsdSE+m0M/Ah/nWuqC9KWELAgUgtlgVexr8do4wJZH85dk9gBP512V5cHuN1511PYF/gefzbUeETY4E/olNKRERc3IP/jaCWCCljdi/gJGAq/vWuqC8mYtlueyOV2gzLEuzddlHHz6KsJEdH41+XHcWp8V12Li0N/B5LeOnddgqf+Ag4EuiDdGQF4FfAVdhWtpHAe1iy35uxPnGoU9lEJCfewf+GUEuEuGR4efKVHCvk+Aw4GC3D7crB5HPPa57yaPQFxuFfpx3FifFdem5sgg0s8vhbU1QWLwF7oVNIOtIdO07wGSqv01exHCNKpiciVemOLb31vjHUEpvHUB9ZsQ3wJv5toKg/3gB2RTfw+fXAtgR4t08cMZn8za4cj3+9dhZ/QS/D5tcI7A+8iH/7KHyiBbgX2ArpzBbAa9Rez81YLgcRkYoMw/8GUWv8MIb6yJIewDHoqJu8xOvYMXsaRMBiwCP4t0lccWR0VZUafUj/sujbUXZ3gGWA04Av8W8ThU9MBC5Eid+60oAdKRhFnc/Glr6LiHTp+/jfKGqNI2KojyxaGvgryrCbl3gPW0bXkzCtRb6TIj5JfldLHIZ//XYVjwFLxFUBKbc5cCvZXTWnqD/eAg4H+iFd6YW91Iu6Da4gv/cAEYnIkfjfMGqN02KojyzbFHgW/3ZRRBOfYr/PhQjHD7Hl3951H1dMA1aKrLbSpwfwPv713FV8gW0TCkEf7Ci8ZvzrXeETc4B/Ad9DKtVAvAmU/5jcpYhIFl2E/82j1rgqhvrIg52A/+LfPopoYjRwLLAw+TUYuBP/uo47fh1VhaXYj/Gv50piDnAm9lIhb7oD2wM3ku8XXorO42vgPCzjuFTnVOJvn72SuhgRyZ778L+J1Br3xFAfedGAPSi/i387KaKJr7GHhsXIj+7AL4BJ+Ndv3PE8YeQXaCBbs7XPAavHUhPJ2wjbVzwa/3pV+MUbwCHomLRafY9ktgx+DSya0DWJSMZkYTliR/FSDPWRN63HgnyKf3spoonJwLnAUmTbhsDL+NdnEjEDWCOaasuE7fCv82piFnABMCCOyojZMOAU9DI29JgN3IWysdergWRXIJ6bzGWJSJb0wB5MvG8stcbI6KsktxqBo9DMSp5iOnAJsDzZ0h878moO/nWYVJwQSc1lSxaz8H8F/Jz0r3QYiCVJVc4RxVjgLLJ3H0irvUm2/aaT/ZftIhKxFfG/udQTJZQJs1p9sPOKv8a//RTR/Q6uBVYh/fYi/UdxRR2Pkv4BXxy+hX/d1xrDgf/DXmymRW9s8HAPysKugFew72hISUST4LE957BErkxEMuO7+N9k6o2BkddKGAZgWfCVQCg/MQc7Qmkd0mcY8B/86yjpGIOdOR2qu/Bvg3riC2z1wyJRV0yFlgT2A24ijDwNis5jFtbHb47EYTl82vWBJC5ORLJjP/xvOPXGWpHXSliWAM7Hlll5t6UimmgB7gY2xt8wbBn+NPzrxSN2qr8KM201bG+sdzvUG5OB64AdgZ6R1tC8GoGtgXOAV0kmUZUi/TEaO5Yr5Jd9SWjCp31LpGu1jog4Ow7/G0+9oXM9ozEYuIJs5yRQLBgPYytlkrYxdmxaSPvM548L667FfLga/7aIMr7mm8H6YGp7sG7Ekgbujm05ug7bTz4lBdenSE+8gE2kaPCWjJvxa2vlEJB2aR9vmC7GEodl2f7Y8j+JxorYUV77Eua+2bx6Hlsp8Xds0ByHbsAuwG/QEsxXgU2wmZHQLYudFpLnvbKTsGRdY8oxDjtBYyFs73jb6A8MKf//IvMrAbdjiTRfdC5LaB7DLwv+pth9WkQk8/sD52KDAYnemthgzrt9FdHGp8BviXZPbW9saeB7Kbi+NMRkspGwL0l/wr9dFIo0x+fAySijt6d38Gv/HyVwfSKSEc/jf1OqN86LvFakrY2wBCbe7ayINqYA12ArUIZSmyWBP2Azht7Xk6Y4sMb6zLPFgAn4t41CkbZ4Gvgx8eY2kMp4JmI8M4HrkwzSEvcwjcSWH2bZzdgeLYnXd4Az0NLlvPoMeAZ7aTcOmwWeVP5zCnZawgrlGFb+cyPyvWy5FuqPOnYi1oeIhG4GcAu2jP1V57KIWQL4yvHzHwS+7/j5klIaoIenGzAT6OFdkDo9ghLFJWlH4HRgfe+CiKTMB8AG2EsNWVAfrI4GeRdExMlI4DIsceJY57LMo1AsNWB5EbpjpwfMbm5qnOtbqkRtiiVq9DIOHRss7dAAPTxLA6O8CxGBN9FRa0lrAPbEjn1ZzbksImkwC9gMeNm7ICm3C/Av70KIJOwJbLb8n8SXpLNmhWKpJ7ADsA82kzwaO6rzEWBCc1Nj6socg/2AG53LMAz42LkMkjLK1hyewd4FiMgS3gUI0FzgDuzFyP8Bn7iWRsTfCWhwXom7sdwHInk3GTu6dB0sM/hdpHNwvgjwN+xUn12BLbHj/84HbgO2LxRLffxKmJgVvQsAFLwLIOmjGfTw5GUmYyrQz7sQgWsEfg78Di1flfDcj239CGk5aD36Aa9hs0UiefMKNjD/G5a/I7UKxVJ/7Ei3LbAtKPObhS3LvxG4FBjX3NTYklwJE3UDljTV0znA8c5lkJTRDHp48jKD3tu7AEIJu3mvCByJHeUlEoLRWNZ2Dc4rNwV7EE7dbKJIjaZi+8o3wmZBryQbg/M7sdn9jmbIe2IJQY8CLgSGFIqlvI4X0jCDvqF3ASR98vqDk47lZYDeDWWSTovp2EB9JeAA4C3f4ojEai420PTM/JtVzwLnehdCpE6vAYcDy2CryDKxzaVQLPXFBudbAr26+McbsGMSdwUuAVYuFEvd4y2hzULWywAAIABJREFUizQM0LXEXRagAXp48jJAB82ip81sbEncWthethd9iyMSi3OAh70LkWG/x5YDi2TJNOA6YBNgPaCIHUmZCYViqRHLIVPJ4LytvsDWWLK7FXM2SO8HLOVdCGAR0vGiQFJEA/Tw5GmAHkICkyyai2Wt3RjYBg1mJD+eB072LkTGzcJe4H3pXRCRCgzHlnovA/wUeMG3ONUrD6r/BnyX6gbnrRbCBvbnA8vmaLl7mvJhaJm7zCMvPzKpnAbokqRHgW2xPXp/R3t2JbsmYscRzfYuSA6MwAbpM70LItKOGVjysM2BtbEl3hNdS1Sj8mD6MuD71LctsBf2wv0UYLHy+elZl6ZZaw3QZR4aoIdHA3Tx8DLwQ2AN4HpsFk0kSw5BRwtG6TngYO9CiLTxNnA0Nlt+IJYzIet+C+yJLVWv10Llv+tg8vH8pQG6pJYG6GHpAwzwLkSEtAc9e97BzlBfCdvTNt23OCIVuQQ7lkiidTNwpnchJGgzse/hltgL5IuA8a4likihWNoNOAJYlOiOVe5f/jvXLhRLPSL6O72s5F2ANjZAR19LGxqghyVPs+eQjze4oRoB/AIYApwBTPAtjkiHbgV+6V2IHDsJuMu7EBKc94DfYM9F+wFP+RYnWoViaVXs5ddgoh/4DQaasCRrWZamGfT+wMrehZD00AA9LBqgS9qMwR7QhwDHYedLi6TF/djRgS3eBcmxuVgdP+NdEMm9EnAblpV8VeDPwDjXEsWgUCwNBG4CViGe5/xuWMK5ARnfi56mATpombu0oQF6WAZ5FyBiWuKeH5Ow85FXwM6X/di3OCI8i+VNUL6E+E0Dtgee9i6I5NKH2AvgZYG9gcd8ixOfQrHUB/gHdhRcnEeiDQCyvMS9J7C8dyHmowG6/I8G6GFZ1LsAEdMMev7MwM6XXRlbdjjctzgSqDeAnbCBoyRjCrADOVtqLG5mAXdip4isjL0AHuNaopiVzzpvPeI07sHzNLKdQ2YI8b7AqEXBuwCSHhqgh0UDdMmKOVjinnWAXbCMzyJJ+AjYjpwkisqY1kH6k94Fkcz6GDgRmx39EfAwARzvWT7r/FYs2V3PBD7yZWBac1NjVus2bcvbAdZH4zIp0xchLIt4FyBiGqDn31zgHmAzYCvgQdfSSN6NwmbclAvBz1RgR+AJ74JIZszClnXvgGXmPouAfsNtzjrfDjuvPG5zseNSs7zCKI0D9IWx3AgiGqAHJm8z6NqDHpYngO9jy8DuRIm7JFrjse/XR94FEaYCP8CS9Il05A3gGCwB7h7Y9yWo+0I5Sdvx2PnkSU1ajAJeJNv5OdI4QAftQ5cyDdDDkrcBumbQw/QKtnRxDeBasv2QIOkwDdtz/oZ3QeR/pmJtcqF3QSRVxmOzxRtiW6AuIOd7y7uwO3bkWZRnnXflT8CYDC9vh/QO0LUPXQAN0EOjJe6SJ+8CBwPDgIuxI3REqjULm3171rsgsoA5wK+AQ9CLuJC1YNub9sFOozkCaHYtUQoUiqU1gDOAZUhucP45lohuZkKfF5e0DtA1gy6ABuih0Qy65NFnwC+B1YBbCCAhkERmDrA/8IB3QaRTV2G5AXJ3ZrV06kPgZGAotv3kVrI/MIxEoVgaAPwVy1Cf5LP8ccCojM+eN2Av9tMo7uPxJCM0QA9L3mbQtQdd2voY2Bf4FvC4b1EkA6YAuwK3eRdEKvIEdnzUW94FkVhNxQaeW2GDz9OBkZ4FSptCsdQTm8VOejD3BJYVP+ur1QaR3gmevsDq3oUQfxqgh0Uz6BKCl4HvYvtX33Qui6TT58AWwL3eBZGqfIgN0q/0LohE7hngZ9jg6SBsMJjlWdpYlDO23wJsSvxnnbc1AzgWGJvx2XNI7/L2VtqHLon+uMVXN2CAdyEilroBejmjajfswWJuDm5kWXYvltX3IOCP2D49kdewDOGfexdEajIFOBS4G7gaWNq3OFKHL4AbgOuA95zLknrl54vTSe44tbZ+Cbze3NQ4J+HPjUPaB+gbYqtIJGCaQQ9Hf5JLIpKURu8CtFUollbFBoUvAy8AtxSKpUJ5OZr4mANcgy2VPAmY5FsccXYf8G00OM+De4G1gb97F0SqUsKOyfwBsDxwAhqcV2p34ECgX8KfexfwL/Kz/z8LA3QJXN4GbNKxFcjf+b6PAVt7FwKgUCxtgM3mrAm0DshnYDMEE7G33vc1NzXm5QaXVUsAp2AzcHpxEpbLgF9gL20kXw7ATnLI2yqxPHkVuB64GSX7q1qhWFoJWzWyKslOro3AXqa81dzUmJcz5v+GnQiQVtOxSbXZ3gURPxqgh2N97PzoPEnFAL1QLA3CZnPWof2ELXOxGbvx5X/uz8DXObrZZdFKwFnAnt4Fkdi1AL8FzvcuiMRqMHAmlpVfzzbp8Ao2W34n8L5zWTKrUCz1BR7F9iYnmRRuBrAD8HRzU2OeBosvYMlk02xd4HXvQogf3cTC8V2sg88T9wF6+cb5IJa4qJIb5wRgVDlOA57TrLqrTYA/YcueJX+mAT/BMh5LGDYELkC/aS8vAXdgg/KPncuSeYViqQf2Yn9rks0b1QLsBfw7h88oY4HFvQvRhZ9iuRkkUBqgh+MHwL+9CxEx1wF6eW/5vdhxMNUul56Nnd89CXgKOBv4QrPqbnYCTsQy40o+jAZ2xnJCSHj2BM7FtndJfOYCz/PNTPkI3+LkRzkp3NXYcuykj5U9Cri+ualxSsKfG7f+2LbDtLsEawMJlJLEhSNVCdVy4lRgM2rby9wDGIotiz8AeAh4olAsbVsolpLOzir28moz7GXLA75FkQi8ia2O0OA8XHdi5wkfC4xxLkvezMRW5P0SWA7rO89Hg/OoNQG7Agsl/LnnAbdhZ9LnTVZe2G3gXQDxpRn0cOyFdbh54jaDXl7aPhwYQnS/oznYrPpYbEb9381NjTMi+rulOhsAxwM/RC8ys+Yq4BjsOC4RsAHOgdj3YhXnsmTV29h2rgeBx7HtIxKTQrG0IfbMNpRk70G3YS+1Psvpir7dgH94F6ICU7HZ/jy2gVRAD57h0Ax6tI4CliLal1zdsQH/BsCFwNOFYmlXzai7eAV7qbU6dkxbybc4UoEvsIRGh6DBucxrBnAF9nveHXjGtziZ8DVwO/Az7Di0NYCjsaMKNTiPUaFYWhT7vg4h2ef0x4Hfk9/BOWRnBr0vsJp3IcSPBujh0JFSESnvC9uJ+F56NGAZiTcA/gI8Wx6oJ73MTex83p8Bw7DEU3lc8pcHNwNrAfd7F0RSrQVLGPhtLN/ErdiRRmIvIZ8CTsaSni4B/Bh7QTnSsVxBKee2uZOOT4WJyxvYloUPcjw4h+wM0EHL3IOmJe7hOBS43LsQEfNc4v4MlWdur1frMW1jsXNkrwcmNTc1zk3gs2Vei2OrJ44CFnMui9je4sOAv3sXRDKrH7bPd19gW8J5mT0SeA5L8PYcdk553rJ1Z0qhWOqGZe7ei2T3nX+BLf1+pbmpcU6Cn+vhHmyCJQsuwLblSIA0QA/HkdhsbJ54DtD3By7DHu6SMhcbpH8FPAmcAYzK+dvutOqHLaU+BlvtIMn7B/biUQnAJCqLY9nf9wG2JD/PSDOBZuYdkH/uWiKZR3ll3sHAOcCiJPfdmwzsCDyfs7POOzIcWNO7EBV6AktcKwHKy81HunYM8GfvQkTMc4A+AHgW2yPksVVkMvaA9S7wO+DdQG6uadOIZeE/FljZuSyhmICtYLjJuyCSa4thJwFsgi2H3xhY2LVElZmCnWLwJvA6Nhj/L8qjkWqFYmk14G5gRZJ7ppiNzSY/2tzUOCuhz/Q2BdvfnQUTsZc1Wi0ZIA3Qw3Eclhk8T7zPQV8H2/O6NH6/pZnYUsXPgT8CzzQ3NWqZYvIasOWxhwK7YMfoSfQewGaZNPsnSeuGzbxtyjeD9lXx6/unY5nVh/PNgHw4dtSZHugzpFAs9cGeZwokt+98LpZj4J6ATotZEvjSuxBVWhn4wLsQkjw9RIZDWdyjNxz4AfAfrOP3eFDrBayEHcVyLTCxUCw9iJ1J+6WWvydmLt8cQbQ08FPg51i7SP2mAL/BMhuLeGjBEmm9AVxZ/t/6YZm2h2CZzluj9b8PprYBVwswDtu+8VWbPz8H3sIG4x+hI5gyr7zv/AZgPZJNCnc8cH9Ag3PIVoK4VhugAXqQNEAPRyiJbxLT3NTYUiiWXsNmTu8m2jPRq9Wj/PmU/9wJmFoolv4DXI0dm5L35C9pMRo4E1uxsh02q74T6m9rMQvLIn0alshIJE3aLidvT3dgENAH+/33nO/Ptv95Ot8MxMehwXcofg5sQ7KTKNdiLwVCO44yqwP0270LIcnTEvdwnI0tc88T1yXurcrJXVbF6nhH0vMyZC62X/cr7Bzgt4GLsP2IM5UFPlHLYEuzW88Uls61ALdgZ/J+6FwWEZHIFYqlIcBDJLvv/EVgP+DDAFfYnYC9PM+Sh7AX/RIYDdDD8Wfyd1xDKgborQrF0nLARtjb6QHOxWnPdGx2dyo2Q3MbdjzVOGCOBuyJ6AbsgGWA/wHJLmnMiruBk7ClxCIiuVM+7/xRLJdBUveBMdj957+Brqi7EluxkCXjgIHehZDkaYAejr9gR63lSaoG6ACFYmkhLKnHicAepHfv/2ys4/8aW0Y8CRsQPQK8jCVS0Sx7vJblm1n1ZZ3LkgaPYb+b570LIiISl/Kqu8uxE0CSOu+8hA3Onwz4xJeHgO95F6IGy2PJgCUgGqCH41LgcO9CRCx1A/RWhWJpGWzZ2q3YHsS0/9bmANOwYz2mYjfzKdg5nFcDnwZ8U49bd2xrxMHA9ljiv5C8hB0V+JB3QUQkO8oJ1rph27lasvJCuVAsbQvcSHLJZVsztt8d+CkvH2DPZVmzI5aMWAKS9kGDROci4BfehYhYagfoAIViqQc2m74j8Aeyc/ZmqznYeetfYYP1R4EiMEKD9dj0x45p2wvbd5bnwfpbwMnYNgsRkYqUB+brYi811yj/z+8D1wOvpHkQWiiW+gNPY0f2JbXv/Djg8uamxkkJfV5azSCb99TfYNtUJSAaoIfjT9iPPE9SPUBvVSiWBmDHbf0W+BHpXfbembnYMvgvsZn2d4C/Yg8aU7Myc5Ex/YFdse/M98nm92Z+c7El7FdgM0ihJSkSkTqUzww/F1uq3JohH2zwNQabJT0OeCNtL5LLLxb+jZ38ktSpHjdi9TE68Pv04sBY70LU6Drs6FYJiAbo4TgTy2CZJ5kYoMP/9pwNKsfZwFZk99ituXzzMDQZSzz3F+Ch5qbGaZ4Fy7EBfDNY345sDdZnYasv/gn8CxjlWxwRyaLy4Pwm7L7fn/afYWcBn2ID0/ObmxpTcZRY+RngeOw5bOGEPvYVYF/g/QAzts9vbeB170LU6AVgE+9CSLI0QA/HqdiRRXmSmQF6q/JNenns2K1rsOPZklrmFpdZ2Mz6BOyB4AzsCJcQs8QmYQCwGzZY35Z0DtanYHvm/gnci+U2EBGpSXlwfgs2c96ni38cLAHqC8BBwBjv2eNCsbQy8CAwhGSevcdiSeFe1b0YsBfbD3gXokaTsRdSEhAN0MPxO+B070JELHMD9FaFYqk7MAxYBzv6YzHfEkVmKvAFMB7bVnFvc1PjdN8i5doi2Mz6XthgvadTOVqAj4HHsUH5w9gqCxGRuhSKpV7Y4Hx7oHcV/2oJ+C/2MnOk1yC9UCw1Yn3jt0jmSLVZ2Laop9K2zN/RQdhS8axSJvfAaIAejt9i+7byJLMD9FZtjmU7CMuyn9SRK3FrwZYyf409mJyBzWKEvswuTotiswQrYzkPhgIrAMsR3cB9FrbH8y3g7fKfbwHvogF5UpYFtsEe2AZheysnA+9huSFeAT5zK51IhMovs6/EspDXkmh1DvAmduzpx0nfg8qr5q4A9ie5+/teKGP7/E7EnkOyagfgfu9CSHI0QA/H0cAF3oWIWOYH6PC/G/hAbEB1IfaWPav709szCfgcm1k/FXihualxlmuJwtIdGMy8g/ahQD9swD0LmN3Of279czqWIfnt8p9qu+T1xV7g/RgodPHPzgWewvbg3optNxDJnHJStdOBw7DVQrU+s87FBuk7Ap8lOZNeKJY2B+4iuSPVfgdcooztC7gEOMK7EHX4NXC+dyEkOXkaBEjnSt4FkPaVHxbGFIqlcdhb9hWBy7FBVNb3p4PtneoPrATcAIwvFEuXALc3NzVOdS1ZGOYAI8rxpHNZpDo9gEOx4+iWqvDfaQC2LMcfsdM7/hZL6URiUn5x/RNsdVk9g3PK/+6a2Pab7bEEp7ErFEu9sQSqA0lmcP4gdo+dnMBnZc0y3gWo05reBZBk5eHhXyqjAXrKNTc1tjQ3NX6ELQnfEcu++hX29j8PemKzt+tjpwo8WSiWvlsolrz2TYuk2UDgIWzmp9LB+fwGATdjOQGWiKhcIklYETgJ++5HMbhtANYD/lYolhaJ4O/rVPkFw3XYwCqJfedjsePURnknxEupQd4FqJMG6IHRAD0cWpaaEc1NjbOamxrfBe7GlvD/GlsmnhcNwNLYQP064JxCsaQMpSLfWBt4GTuOMQrbAM9gL8hEUq2csf1aLJFqlM+p3bCVJceWPyNOO2MZ55M4ZaMFe6H/pjK2dyjrM+irexdAkqU96OHYh/wtc8zFHvSuFIqlAdjRLAcATVR2xEyWTAReBPYjBcfhiDhbFjseKo4HytHA5sBHMfzdInUrzzxfDBxMdRnbqzEeO/Xiv3EMaAvFUj/gOWANkpkIOxz4a3NT47QEPiuLGrAkpmk8krQayuQeEM2gh0Mz6BnV3NQ4EXgDOAfYAigCeboRDwC+g60YWLr8gCYSor7APcQ327M0cCf5OS1C8mdVYHfi/Y4uClyD7W2PVDmx3S3YdSTxjH0P8Hcsmae0byDZH5yDvfCRQGiAHg7tQc+w5qbGuc1NjWOAV7HET5tjx4aMJx971BuBDbFB+iAN0iVQf8D2ycZpfeCimD9DpGrlwe2lRLfvvDNrAweWjzqN0oHYi/Qkcqt8hWVt18qzzmV9eXsr7UMPiAbo4dAAPQfKA/XRwGtYpvctgV2xI7CyfsZ4d2AD4HZgCQ3SJTArAUcl9FmHYAN1kTTZGbsHJHHCUDcsv8uAqP7CQrG0JJaobeGo/s5OtO47fzvps90zKC8D9LW8CyDJ0QA9HDp2I0fKA/XxzU2Nw7GjVXYFNsUGtzNdC1efbsDG2DJ+JY6TkJxGssswf5/gZ4l0qlAsdce+k0n2+4OAvaOYRS+X/zYs+3wSz9ZHAM82NzXOTuCzsi7rGdxbretdAEmOBujhmOBdAIlHc1PjzOamxvexrM/HYAPcA7BkIllc9tYD2AHYt1As9fIujEgCFgZ2S/gzd0V7GiU9dia5wW2rBuBooF89f0l5tdcfgW+RzOz/ndi+8xkJfFYe9PUuQETWJJnvl6SABujhGO9dAIlX+Rz1z5ubGl8D7gK2wwbrN5C9BDK9sb11WuouIdgZn8Rtuzh8psg8CsVSD+AU6hwo12h5YMXyDHitVgf2J76s8219BZwKjNW+8+D0AlbzLoQkQwP0cGgGPSDNTY3Tmpsa3wGageOxgfo+ZGuv+jLAHuQj+6pIZ3Zw+tzvO32uSFs/wXIweDyTdsNWntV0fGmhWOqJZYRfhvgT27Vg9/F3te88WHEnEZWU0FKJcEzDEsVpsBOQ8k18FDCqUCx9ALyCzVJsjD2UrIAlZ0ujBuys2uvJ9r56ka6s5PS5m2PPAdrHKi4KxVIj8Bt8lyFvX/78qnL1lFd3XYYlXEziPvor4HntOw/ausBN3oWQ+GkGPSyaRQ9Yc1Pj9Oamxvewo9puAnYCNsKWud4AfEn6Ztcnkc199CLVGOr0uT2BxZw+WwTsWLKh+D6P9gc2L8+GV2MzbHtKEhMfDwN3kL3tahItJYoLhGbQwzIeWNK7EOKrvG9tMvBueQbgLSzB3NnYHqdlsRmNTfFfcfFPNHsu+dYbO/fZy+LYvlaRRJUHxEdT4/LyiB0PPEKFExnlzO8XAwOJf2n7JOBY4CvtOw/eEO8CSDI0QA+LEsXJPMo3+5l8swy+AdunPhxYBMtKewKWSCfpGY4xwAvArIQ/VyRJKxL/A35nFnf8bAnbHsBypGM157rAYoViaWJXg+DyffIq7FzquJe2z8X26A9vbmqcE/NnSfrl5cg46YIG6GHREnfpVJsB+yflh5APgCewwfq2wOHA0iQzoDgPGKMZA8m5lZ0/f3nnz5cAlWfPTyQ9R2D1xDKxn0vXy8i/jSVYrHZJfC1OA55obmrUi2oBO5KzLzDVuyASLw3Qw6IZdKlYeWA8BVsK3w14Dzu+rT+WSfZg4jsW531sv53OeZW880oQ10pLJsXDXliS0jTMnrc6GLiUTgbo5aXtF2G5G+J+Uf0acC12HxZptTTwoXchJF5p6hglfppBl5qUz1gf39zU+DbwEnAGliDnZ8Book3kNgv4NfCZZs8lAN4z6EOdP18CUz73/ATSM3veajCwVPmF9ALaZG1fg/iXts8ADkX3QVmQlrkHQDPoYdEMutStfHTbGGBMoVj6GHgWGAb8BZuNq/fF35nAk1rSJ4HQDLqE5kj8M7e3pxuwKzY72d7qrQKwI8kkT90HeFX7zqUdS3sXQOKnAXpYNECXSDU3NU4B3i4USx8CO2CnBFyIJdypZYbhTuAaqjyPNmrlmZK+2PVMxVaftL4wmAv/2wIgUi/NoEswCsXSwsARpCNze3t+hM2SzzNAL++Zv5RksrafDTza3NRYivlzJJuU2DMAGqCHRUvcJRblB4l3C8XSB8CPsWOjzgY2ofJ+5lHgFOCL8iy9i/KD2G3YzGYvYE45Wgfkc4BZhWJpDLZX/g0s2/zH2N7FuRq8S4V6Y8tqPQ3BBhz6zkqsyi8+L8ESE3qeXNCZ1YHe7WRz/x3JZG1/FbgC55fUkmpJJCcUZxqgh2W0dwEk38rL8T4oL30/ANsrdRyW8bZXB//aXOy881OA9zyX9JUH5w9jx8st1Mk/2gLMxrL5TsOS+MzEZtknFIql14HHsIH7WGC2Bu3SDu8j1sC+50sCXzqXQ/Jveew0kDQPMHphK8DGYH08hWJpMHAg9kItTjOAJmCk7hfSiTT/fiQiGqCH5V3vAkgYyoPsjwvF0ghsv+ESwHZYltwh2A2mBRu8ngncA3zqPDjvBjyEJb/rqm/shu1DbMSy2reai82wb4Cd8TsFKAGTC8XS88CN2O9wph7ABP/9562GogG6xKjcv16B3Qu8X0p15QJg80KxNB67F9yKndced7n3RvvOpWsaoAdAA/SwfIQNFpJIcCLSOlAfWSiWPsO+f//A9h72wQbok4GRwCTPAWt56eU9VDY470xD+d/vz7wD9znY8sjdsGXwEwrF0gPADdiS/tl1fKZkl/f+81ZDsNUeInHZANiQbDx3rgI8iK2m2hIrd9xL288FHtO+c6mAnuEDkIWOUqIzB/gAOyJEJDHlwfcEbGDawDfZe1tSMpN8PPYgFteb6e7AgHKA/RZXB/YDphaKpYeAi4HRnvvvJXFpmkEXiUX5WLXz+Kb/S7tuwPrYFpSFiX9w/hZwOdp3LpXRDHoANEAPz9togC6OygPy1CzhKxRL3bGl90meydsdy8S6OLYsfhh2vM+EQrH0V2xJ5SQN1nMvTTPoInHZFFiHbD1zdgMWSeBzZmH3nxEpeVkt6acBegCy1FlKNN7xLoBIyhyGnSvqtS+yAXsQXARb9r8CcBS2b/0N4C7geTRgzyPNoEuulfeen828W37kG/sDr2jfuVRBA/QAaIAenre9CyCSMhuRnhteN+yIuqWwwfqaWHK9KdhS+GeAInakmzLDZ9tCwLLehSgb6l0Aya2VgdWIf5l4Ft0CPKR951KltDyvSIw0QA+PZtBF5nU2trw8bYlXugH9ygE2YF8F2BE72u2dQrF0FZbca5oG65mThiPWWmmJu0SuPHteRLPn7ZkAnF7+U6QaGqAHQAP08LyD7XlNy4OhiLf3gMuAY+j87HNv3fgm0dxcYFVsb+cUbO/681gm+uHARMr7/DVwT6207D8Hy78wEDv2UCQqWwLrEe+z5ssJfEYc9gXe17YlqUHaJhMkBlnr0KR+U4HPsDM9RYLX3NTYUiiWLsCOPzsR6O1cpEo0YOVsnflsPcbth9js+ixs4P5poVh6FXgN294yDpgJzNXA3V1a9p+3GoIG6BKRcub2PxHv7Plo4BfAncAgsjPxcBHwdHNT4yzvgkgmaQY9ABqgh+kdNEAX+Z/mpsaxhWLpMuAl4HaytyRz/mPcwAbt62N72KdiLyBmASVgUvls+rexwftw4EugpIF7YtI0gw62D73ZuxCSG0diR0nGuff8eOBV4GTsmMokT+Ko1UjgEqxPFqmFBugB0AA9TG8D23oXQiRNmpsavy4US48BWwBXAhuS7cRG3YE+5RjY5n9vPeauhA3aWwfvM7Gl8k8Bd2P9xDRs77uWykcvjTPoInUrFEsLA4cT72qk0cDDWL91F3As9tKrW4yfWa8W4ADgEy1tlzr08i6AxE8D9DApUZxIO5qbGkvlo832BRbFEshtRb76ygbsenpgg/fF2/x/s4G1gX1oM2gHRhSKpQ+BN7E9+yOxgX2LBu41S+MMukhdCsVSAzZDPIR4B8vHA2PL/c/EQrH0U+A+5l1FlDa/AV5sbmqc7V0QybQsbMOTOuXpoVMqpwG6SAfKD3wflR80f4YN1HfDHq6ysISyHj2w6120/N/nYoP2EjADG7TPKEcJGFcolj4AXgf+ix3/Nh6YpYF7p9J0xFqrod4FkFxYAdtWE+cy3InY7Hnb48leAi7EZtLTOIB5GrgN60NF6pHG77dELCsJNSRaSwOjvAsRgceArb0LIflWHqgvCgzGZpdPJ/7ZoSxoHbzPwJbCT8Vm3GcCXwNPALcCn6AB+/zWxPan1IInAAAgAElEQVT9p8nbwBrehZDsKh+r9h/svhznBNCRwNXNTY0z5/v8gVjCuM1j/vxqTQX+n737DpurrBY2fichAwFCMfQuICgigoMCNrBgQ0CxA36KWBgVezmWg70cPXZxVAQFC6CgoKiAqIBKkTMI0gktEDokEEISJu37Y+3XhJDylr3n2eX+Xde6EIS8692zZ2avp6xnb+CyXqe1MHUyDXQk0aOgLi4iTnBRjZXpA0yDcxexbHW91IlIZZcVljOAGdky7x6xNHwX4NPAVjSzWB9HzJJNBCYv9c+HCvddgUOJ4n1qu9s/Gri412k5g1S+/ecQ57JPIDueTxqFnYE2xT5b3kH0yOgv+39kzT4PB84mZvLLMAm1GHgt8G+Lc+XEGfQGsEBvruuAPVInUUXtbn8dogv+7cAsm700R6/TmgNcl82qX0+MZK9HFKJv4tGFalMNFe6Py2LozPbdiSZ0pxPHDD3Q4Fn1MhboLaKouSF1Iqqe7Fi1b1P8HvD3AHev5LPjJmJL0lnEasHURfoHgfM8Uk05skBvgCbO+ihckzqBKmp3+28E/gKcBvwD+Ge7239bu9tfM21mGqRep7W412k93Ou0riP2Pn4OeCax9/J3xLJvhXHEnuttgKcSyw3PB45o8PumbA3ihuyQOgFV1ouI93eREz9XAH8jjotcrqxwvxJ4OXF0ZMpBwBOAE4lVRFJemvq92SipRxaVzkeJDtVVNrA96NmM6cuBbxCzTEODW4uJh4D7gGnZ/38hMLfBs4ON1e72JxKzNusDGxJN5van/s3lRuNu4EaiY/6tDXu/nAO8IHUSy/EB4jNMGrZs7/lFwNMo9mjK5wF/H04X9CynXYDTiRVvg37evQB4M3Cjq+ySq9se9Pt59NGpqiEL9Oban9jHVWWDLNCfCRxLzDCtaOVJn2i+9xAxYn4DMZI/gyWj+DOJwuQ2oqifS7bns2EFSu1lxfqGxBfpJkAHeDEuT1vaQuJ98ingtGWbPtXYNKJ3Qdn8ADgidRKqlna3vzux73v9Vf27Y3AqcHiv03pwuP9BVqTvBPyE6IlR5ODB0qYS+86vcN95KdStQJ+Dg/61Z4HeXHXo5D6QAr3d7a9FHJGyC8PfFrKIJcdSLWBJgb6QWJ7Xz+KR7N+ZSRxRNZWYVbyDKOBns6SIXwQW8lWUFesbE3uyNyS6EL8UWD1lXiVyO3A88MVep/Vw6mQKtjrxgFXGLWbnErOU0rBke8//SnSVLqoAXgA8nWi0NqLZ6Gz123bEuemHUvxn7s3A64FLPe+8NOpWoC+mnN8fypEFerOVdRZnuAov0LMR+HOA51DM3rrFROG9gCjWh86Ynp/FUGG+MPvn9wFXEb/7/xGNthyhr5ClivUpxKzOp/DYNohBqp8DH+91Wg+lTqZAOxHv4TK6gzhOUBqWdrf/YuI4xSJPhfkM8JWsSeeotLv9TYnv8R9QXK7XEc1CexbnpVK3Ah2ir0tTVpw1kgV6s51MLMOqqkEU6G8EjiZ9d+7FWcwnZtRnsWR2vQd8B7jOTrHVkc3srAlsQTwwHgQcRiyJb+pn8yxiK8lRvU5rdupkCnIAsS+2rNYhtulIK5UNYP+TYpePzyOOb7tprKvH2t3+JOCJxCkSe5HvoPtfgI8Al1ucl04dC/T1ieOSVVNNn7FpuotSJ1BmWQH1Qcqx12cc8X5dnSjmtiJm4p5GNNn6DXCRHeWrYzmd4L8K7EM8OL4F+CNRKDVpS8M6xO9+cLvbXyN1MgUpawf3IXZy13AdSNzPRe7t/jJwRx5bu3qd1lzgMmKW+1BixchY/9xFwJeIHiOXWZxrQOxlU3NNnaVReCZxVFhVFTqD3u72JwB3UZ1umUMd5acTjZ4cya+gbFZqEnHfTQbWJt6rRxIDM00YWL2TePi/tIZbOLqUuxHbIcAvUiehcmt3+y1iYHFnivtMehBok8Ps+bKy2fTHZ3/+F4iVTCN9Jr6d6CfyD+A++8OUVh1n0DcnBphUU0WeV6nyu5RYMj0xdSIlVqUv3HFE87+NiO0LP2l3+18fy749DV7WBOnhLIYK9muAPxAzzM8mCrxtGVxX4kHbFPge0UjvvsS55M0ZdFVatrrsw8D2FDtg+F/A9CIK32w2/ep2t38LsU1sR+BdwB7EqrmVFev3AF8kJgmu73Va8/LOT1oFn+tqzhl0XQLsnjqJURrEHvQzifOKqziYdT9xjd7W67Tcq1QDWbE+mWgyN5k43/f1xD36OOo1u74AeCVwVs16K9xCNAUsq5OAN6ROQuXV7vbXI4rax1Pcc+Q8YrCokAJ9WdmWmk2IQdB1iBnKbYnBwg2IRq23ElsDp2Uxy1nzSqjjDLpN4mquikWH8nUR1S3QB+G9wIUUe75rUaYA+wG/anf7r+t1WjNSJ6SxyWbXHwQezGaxriQG2dZjSX+CpwJ7EzNBU6juCpnVgFcRR3/VpUBfnRhUKbMdUyeg8so+d77N6JaEj8SXGeCy8WwW/Jbs9xsPtIj3a4v4DF1MFESzgb6FuRJahMV57Vmg6yJiD5WWbyrwZuBnpO/kPhqTgOcCJ2VF+szUCSkf2QPiI8Q+yNuzB8sJxMzWKcT92spifaKp4AuIjssbZv+87NajXqsCtqX8v49L3LUymwEvpNiBv1nEkYsDXzqefa4uJE5ImTvony8Ng1sqGsACXRenTqDMep3Wona3fzbRzf0blKOj+0i1iBnVo9vd/hG9TmtW6oSUv+zBcgHZDDv8Z7ZrqHC/CDiVuIeHCvd1iXvj9cRy1bLtaf879Zk9h/LvP4e4PzYnBn6k/8i22Hyf4o+CLGzvuVQDDhw1gAW6biCaMFWlU/nA9Tqtee1u/yTiOh1PNWfSW0RX7Avb3f4Pe52Wy6MaIHvAXUwsiVtR4f4vYoXI2kQB+Rpi1UXqPe0PA2dRr6V826dOYJh2xAJdj7UbsCfFzp7fB5xBvd73Up4s0BvAAl0A/wReljqJMut1Wg+1u/0/Ek2rfk00kamaNYFPAGe3u/2p2X5mNdAyhfv9wP1Z0X41cWTQOkQTmrWBJxLNGJ9FnBAwqD3txwDTanafVmEGHaJA/0vqJFQe2ez5Nym+H8uRwN3OnksrZIHeABboglj6aoG+CtlM+vnEkuDTiWZPVTsJYWNiqf7riX1+EvCfon0ucBv8Z5Z9AnEc4++Jon11onDfFHgGUbjvQKwqyXO2/U6iQH84xz+zDLZLncAw2ShOy3oWceZ5kdtgriZOHqnTthYpbxboDVC14kLF2Bc4O3USo1D4MWvLkxUuOwIfAQ4mipYqmUvM5N1R9CxFdq0gPmvGZzE0c7vIWZJqWarD8URidn1dYmVGiyjg28ChREO60c60LwDeCfwsO6u4Tq6lGsXvH3HQVpl2t98iVtbsRrEF+guA83ud1oICf4aap27HrF0E7JU6CRXLGXRBLHFfjAM2w5IVlde2u/1PEE23TiD261bFJKK4Gke87rnKirh1iT3vzyGWRU/Jfu7Qw90iYE67278HuAq4HLgZuIeY2Z9HFGqLhnK0mE9vqQ7HC4nX6L6lBmGGZttPI4r1XYBPEytNhju7vhj4AfBb6tmpdovUCQxTVWb6NRgfJgbdiizOfwdcanEurVLdBq61HBbogmgcdS3wpNSJVEmv07qz3e2fQyx5PwJ4K9WZTZ9HccX5rsQy+icQhdpE4rNmPEsGgYZm0ecT128O0RRoPksKwIVAnzh39t52t38LcAVR0N9CLH9eYOGe1lLX/z8d5LP74DpipH8b4IcM79zkPxL7XO+t4eu6PtU5BWJrChrAU7W0u/3JwFuIAdaiLAI+hduupOGwQG8AZ0w15DjgsNRJjFCSJe7L0+72NyIKkHcBb6DYh5mxmgns2Ou07s3zD11q6f/xxFLIsTYTW7qR2XyigJ9DfDk9ksV9xLnfvycK94eAhTUs7iorWx67HbAf0aRwveX8a4uBM4njla6u6SzaLsRKkarYAju5N1rWGO5kYjVUkc0hfwB8qNdpzS7wZ6i53g18J3USOToVeHXqJFQsZ9A15GKqV6CXRq/Tuqfd7d9LFCDfJh7G/4vogJ3yqKrl+V9iVjo3WXG+HTHQk0dxDjGAOLTneTVi0GPp4m7o3O+nA68jCve5wLR2t/8boq/CjJoWe5XR67T6wDXtbv8O4BziGLfDiK0P44lZsy6xVWRqjV+vLVMnMELbYIHedM8A9qHY4nwe8Z05p8CfoWa7P3UCOct1ckXlZIGuIRemTqDqslnbu9rd/t3AVGJ57zrA04gR3J1I/56bTcyI5L2/93HELMjuDO4YrnHZz1qPJYX7YuDJxFm9HwceaHf7pwM/IZZN1+nIrkrpdVoPtrv9y4HpxD24JdFg7nbgBuC+mr8+Vdl/PuTxRGMwNVC28uU7FH+s2qeAm2v+3ldaU1MnkLPbUieg4qUuFlQeVxANujZKnUjVZYX6HGDqUntx/0oU61sTe673IR6A12awM+xHAtPzXALe7vbXIB7k9mJwxfmKjCOOAdssi4XEXvg3Abe3u/3vErO4c1wGP3jZNb+v3e3fT7wvxhN9BprQ0b9qM+iPT52A0si+t44iBjuLbAz3IPBL6tkQUuVxQ+oEcmaB3gAW6BqyGPgTcEjqROokKzpmAzdkDz1XE7NSRxOF5GrELOKOwP7Ac4nZ4CKK9guIJlz9vP7Adrc/AfgY8FLi9ymbCcAGWWxPbDmYAVzS7va/CtzU67Q8c3fAsvfFI6nzGDALdFXFxsRxiUV/pn8IuLMBg3NK6wFimfuU1Ink5NbUCah4Fuha2llYoBcmewiZl8U9Sx1PNZ5oHnU2cTzZxOyvzwJeSxSVY+0Ofz/wXmIZcS4PQ0t1bH8zkW/Zm05OJJYZbwFsSwyGzGh3+z8Hfgo86IOiClTFJe4apazB2lrE585sYH4VPl+yvH9ErEAq8jP9euAP5DhgLK3EVOpToDuD3gBlf6DWYG0M3El17ovSdHHPU1b4TgAmE18oaxIzGbsTS9R3YGQz7HOBVwB/zXO2ONujeCrwYtIvbR+tRUQn+HuBy4DPEPsh69qoTOlcT2y3qIpbsEgflXa3vx6xSmpnYiJkHjEA+1VgZpkL9Xa3vw/xuf64gn/UvsC5ftZqQH5KrAqpusXE86ADWzVXlUJMg/MvYla0CmpZoC/PUrMxmxD71p8DfBTYlJW/jx8GXg+c0+u0ctvnlw0i7AH8jlg+XgdziAZm9wLfBc4AHi7zw7QqZQ7lPn5xWQuJB0ELqBFod/uPJ4qB3YjXe+g8+QeJz5ejgN9npxuUSrvbn0g0jN2VYvee/wZ4S6/TeqDAnyEt7ShiAL7q7iKe+1RzZTv+SemdlToBPVav01rU67Qe6nVaU4mZ3p8ALyQas32DWMK+bCH5L+Ls6VyL88w4YlZ+7Zz/3JTWJFYn7Al8jdizf0y729+h3e27HUhjMYVqFecQBVrV9s0n1e72NwdOIgYv12TJ4Ok4orfIzsSRYj9ud/vrJklyBbJB1w8DT6LY4vwR4LPE8YrSoNSlUZzL2xvCh04t6yxiZlYllc3ozgJmZTPrNxF7BtchlqROJvZbTae45drjiHOS6zjIN4ElXeAfz5K96scTD98PeiSQRqiqhe7jgZtTJ1EF7W5/CnAK0GblBe4WxODmdu1u/wDi+McyrNJZFzic4geS3g1c62eoBswCXZViga5l/YNoaFOnmdHayh5y7gXuzYr1y4mHw3kF7+1bRBzNd0CBP6MM1ib2DS8iBiTeBVybdYC/rNdpNa0TuUanag3ihrgHfRja3f6axLLt3Rne7POa2b/7J+Al7W7/rpRFejZ7fgwxkFTk1sepRGM4Pzc1aHU5C90CvSEs0LWsPrG3e//UiWhksmJ97oB+1uJ2t38S8FbibPe697MYTzRR3BjYjthf+kC72/890AXudkZIK1HVGfRtUidQdtlRk6cQW2NG8kw1AXgK0Tzuhe1u/56ERfpuwN4U2+xzMXAEkPL3VHPNJI5YLbr5YdE8Yq0h6rg8VWPnPnQNxzTgI8QXX5OsQRzTthuxXPMvwJntbv/AbCZNWpYz6DWUzTx/k9EXt+OAJxNFepLCIWsM1x3Azz8auMSu7UqoDsvcnUFvCAt0LY8FulYpe9D6A/BxoIndeMcB6xPn1O9DdH6/oN3tf7/d7W9nYzktpaoz6BboK7c38GrGtm97HDGT/tvseLZB+3z284tsDPcw8fn4cIE/Q1qVOixzt0BvCAt0Lc8NROMxaaV6ndbDROO0dwH38NhO8k0xkZgl3QU4mBi4+Fu72z+i3e2vn/UHUHNZoNdMu9tfgzhBYyPGvsVn6NjKr7W7/bXGmttwtbv9LYE3EKuCivRWomGp24CU0tWpE8iBS9wbwodGrYiz6BqWXqf1IHA68FrgSqKhWlONI7ro7wA8A/g08DfgtHa3v3e725+ULYtVs1R1ifsmFF+8VU72Hv46cSRZXs9RE4jP0Odny84Lle2dP5E4raLIz6RLiW1A8wv8GdJwXJE6gTGaT5yDrgbwQVErciBwWuokVuGvwPNTJ6HQ7vZbRMfzNwHvII59U3gEuBN4iFidciLwZ2L//iKbJtXeXKpb6D4RuC51EmWSLUW/Atic/J+jbgOeCdxe1OdCNsDQJT6ri7wvFxHHVF7U67QWFvhzpOHYhmofGzkNG3c2hnsktSJDI96Fj+SrHnqdVr/d7V8DfBX4NTEb9AriIbaVMrcSWJ0lX6w7EEcszcriwna3fxxRBM23WK+dyVS3OIdY5m6B/mh5LW1fni2JLTJ7U1wDzgOAVxKfS0UaOo7S4lxlMI0YJJ+cOpFRcnl7gziDrpU5jxj9Litn0EsqWz45hegMvAaxfHMKcChRtK+Nnz8QM0wPEWfZzwJ+B/wQuMv9mrWxLXBj6iTG4C3Aj1MnURbZ8vObKXZp+GJim9nrep3WrDz/4Ha3vwmxeueJFLvNcRYxEHmjn2UqkQuJIxGr6BfAIamT0GA4g66VOYtyF+gqqWzG5B7gnqX2XK9GLAv9CrH8/YXA/yPOUW/qZ9F4YN0sFhOz7K8D7mp3+98j3oMPOateaRukTmCMqp5/3l5BvF+LHGAcBzwPOKrd7R/V67Tm5PGHZo3tfgPsSPE9iN4CTLM4V8lcQXULdDu4N0hTH4o1PGcBX0idhKptqeJyPrEP+85shv0a4GTiiKKNgP2I3geb08zPpnHEioPHAdsT+/kfAKa3u/3jgTOBB33grZyqF7hVzz832WDjhxnbsWrDtTpwOPH+/36v05o3lj8s+8w9g5jVLvJINYC/A+f1Oq1+wT9HGqkqN4pziXuDNPEhWMN3KXA3sHHqRFQv2Qz7TGBm9tC7GnAZ0bhoDWKGag9ir+RTiD1jTVoSvxoxULE5Uag/BfgkMKPd7f8K+BVwb3YWvcptw9QJjJEF+hKTiFUuRRe4Q9YDPgZMaHf7R4+2SM8+Y48DnkXxz33zgQ9Q3P55aSyqXKA7g94gFuhamcXAqcA7Uyei+spm2Ofz6CXxE4DLgVOANYmifUvgZcRM+8Y055jIFrHfdTNgIdFkrgPManf7ZxP7g2+1WC+tqhe4Vc8/T68lPo8GaSPgo8DW7W7/Y71O6+GR/MfZ5+kHgf0pvikcwPuAK2wMp5KyQFclNGlGSqPzXKJZXBnZJK4hsofM1YkZpfWJh+QdiT3szwbWSpddMouAB4kGcw8Ry0q/TzRl8szh8vgyUWBV1QXEzGujZZ9BPeCppBkcnAWcC7xxJI3j2t3+c4ETgK0o/pnvUmIg4E77ZqjE7gA2TZ3EKEwBZqROQoNhga5VGU+M2m2WOpHlsEBvqOxheRIxu7de9tfXA6/O/r5pn22LiSL9buJB/nRiu8AM96wn9yNiL3FVXU8MhjVau9ufROwBTbmiYB5wCXBgr9Na5RLydrc/hTgydWeKH1SYTwzoX+LsuUruLOBFqZMYoTk0cyKisZr2EKvR+Sbw3tRJLIcFugBod/urEQ/OGxBLQj9CdEFu4vnri4lR9nuAu4CjgbOB2c5qJXE60UuhqmYQMzeN1u72P08sFU99pv0CYvvPi3qd1gpn07LPxLOB5zCY7YyHA78YazM7aQD+l3gvV8l1xNGIaggLdA3HXsQyx7KxQNdjZOcUb0YU668E3kEUGE38vFtAFOkPEh3hTwd+SjSYc5ZrMP4BPDN1EmOwGJhI9D9opKwD+lSiQVwZPkcWAVcCL+x1Wvcu+39mK4y+CxzGYDrOnw68nfhccRBQZfcm4CepkxihP1G9WX+NQRm+aFQNtxDnVZeJBbpWKHtIfRyx1+wJxKz67jS3OeZQ5/z7gLnE0uXfAxcSS+PnEA/++JCdq+uJ+6/KNiJ6HTRSu9v/CPApBt8gbmUWA9cSTTNvWfo92+72n04UzZtQ/HPefcT38FVup1FF7Eb0S6iS46j2VimNkAW6husrxPmvZWKBrmFpd/trELPqU4CDiNme9WnuZ+BiYj/rA8Te9fnEbPssYDrRROc6ovHcTb1O65FEedbBDOJeq7LtgJtSJ5FCNnt+LXENyvh5cR3wG+ALvU5rdrvbX5143+5G8cfBLQJeDJzrKRKqkNWB2VRrsP4zwKdTJ6HBKeOXjcqpDfxf6iSWYYGuEWl3++OJWfVNiFnNjwO7Uq0v6iItBPpZzCWK9weA7wCn9DqtuQlzq6LViGtZ9e/anYBrUieRQrvb/yaxTSb13vOVeYBo5votYF/gFQzmSLW3AT/3c0EVdAXRPLEq3gwcnzoJDU7VHxo0WDcQswhlYYGuUctm1Tcn9qofBLyVZs+qr8giYh/7lcQ1mu4S+GHbmLh2Vfc04F+pkxi07DPiOmBLqvG5cBewLjGYUHS+XeAo4H4/D1RBPwMOSZ3ECOwJXJw6CQ1OirM8VV0np05Aykuv05rX67RuJI4t+ipxRNDLgDOJ5d8K44ntAfsAZwC7ZR2itWobpk4gJ4OYjS2VrIfFqcS9X4XiHGJl0CSKz/cS4GvEMY4W56qiy1MnMELXpk5Ag2WBrpE4KXUCUt56ndaiXqd1X6/Tuoo4M/gdxMkFbyZmjRvbvXoZLeApwC+AZ2R7c7VyKc/MzlPjCnTgGcSslYNRj3YP0CEa09kUTlX179QJjMCdxEksahALdI3EFTR0H6Kaoddp9Xud1q3E6PopxNL3ZxJLOe8gmqs12ThgB+DHwHbZnn6tWF1m0Mu8/zp32VGN3yOWi+flEKIJY5XNAV4LXO4xjaq4Ks2gO3veQD5caaRc5q7a63Vai3ud1sO9Tmsq0Rzxu0TzpX2AY4kH7aYW6+OIBnsnAptmS4G1fM6gV0x2P/8v0Rgvr1Ui/00cafhioqFbFc0HXgVcaMd21cBdxGqQKrBAbyALdI2UBboaJVsCP7PXaV0NXAB8Eng2cCCxJL6JR5CNA54KfAlYO3EuZVaXAr1JM+jbEoVoXoMS84CfE4N6lxADfTNz+rMHZSFxTc7tdVr91MlIOanKLLoFegNZoGukrqVae3ek3PQ6rQW9TuuuXqd1BXA2cDhL9qtfQ3Q8b4oJwCuBLVzqvkJ1KdAbMYOe3cfHEN3381oZchDZyQfZsvBLidNH7s3pzy/aImJZ+zm9TsvmmaoTC3SVlg9VGg1n0dV4vU7rkV6ndQtwGbFf/RVEsf454G6asQR+bWB78lsKXDdrpU4gJ40o0IlTHHYjv8ZwFwIX9Tqt+UP/IGusdjlRpN9KuT8nFgOvBs70rHPVUFUmm+z91EAW6BoNu7lLmaX2q19P7Ff/JvA84DnA94H7KPdD+FjdQ7NWDoxEXQrbyakTKFp2KsFngXVy/GOPZDmN4bKjya4i9qRfQXnfP68Hzup1WnNSJyIVoAoz6LOB6amT0OB5fIhG4yaiENk9dSJSmWSzYzOAGdkD/w1Eg7n1iXPWDyYarLWSJZmve4HbKG+BkVpdCvS6LNVfmQOA7chv4uL9wFUr6naeFenXtrv9VxMDec+lXM9k7wf+aHGuGrsG6FPu7+PrqfcAv1bAGXSNll/a0kr0Oq2FvU7r7ux89QuBLrFnew/gRdnfV312/YvAjKzY0GPVpUCfkjqBImWDaUeRX8PDe4BTGUYDyeykiMOJbTJlacB2HrGVbXbqRKQCzaf8y8evTp2A0ijTaK2q44nEaL+kYchm0WYCM7NjnFYj9r8Nza4fnMW65NecqmhTgV/TzC72w2WBXg37E93b85q0eB1w53AHrnqd1i3tbv9DxJ7095C2a/484APAPQ68qQEuJ04kKau/p05AaVigazTenjqBzEbE0sv7UiciDVf20DufaCR391JL4bvAhsChRMGwAeUt1ucT+2uHXYQ0lAV6yWWd2/OcPT8W6I30rPBep3V7u9v/KnAL8FXSNRh8A3DlipbmSzVT9n3o56ZOQGm4xF2j8drUCWSeDEwjmnJtkTgXaVSWWgp/JfA34BNEk7lnAp3sn5VtS8lngQuW7k6t5bJAL789gMeTz/PQfODrwMOj+Y97ndZ9wM+IEyEezCGfkToVOM+zztUgZe7kfidwXeoklEZZZ2dUXmsyyoePgvWBE4AvAzcmzkUas2xmby1iJn1yFs8mls/uRLri76fAf+Hs+XD0gKelTiIHt1PDQdDsPXYuMRiWx1GBbwdO6HVaY9r20e72JxID0KcSgweDeFa7G9iXaGxn00c1xYZEz4gyOolY0aIGskDXSO1EHA9TVguBXxHNq65InIuUi2zf+niiSN+AKNzXA/YGXkN0hh9EwX4K8HHgRh/ih+VKotCqunnApNRJ5K3d7W8OXEY+XepvBfYip4Gr7D2/A/A24F0Uuy99PvBS4HxXxaiB7gA2TZ3EchwB/CB1EkrDAl0j9VLgD6mTGIbFwBnAF4CLE+ci5Sp7eJ9AnNk8hVjZMplo4PgSYE9iZiCv42PmAl8Cfg5Mc3/qsE0Ftk+dRE7WonxbLUYtew/9AjiIfL7/mdsAACAASURBVN4nLyAK3BHtPV+Vdre/IdHA7lfEKoa8n9sWE6tyftfrtObl/GdLVfBH4nuzbJ6IS9wbywJdI/UsqtdV8i/EjPqfUyciFWGpGfZJxMz6ZKLoWB3YnFgavzexXHZtorgf2nO79PfAYmIVSh+YRTSv+x1wPlFsznTmfERuBbZMnUROtiLOvK+Fdre/JnF/b8LYn4V+AxzW67QK2TeeLcXfgTg95Wvk19AOomP7j3qd1kM5/plSlXwZ+GjqJJZxJ7BZ6iSUjl3cNVJV3N/9/CwuJgr131Hts6elR8mW1C4kzi2eDf8p2scRTXD+DnyPWCY7VJwPFSXjl/r7RcAC4v0xn5g5nwk85Kz5qNSlSRzEMvDaFOjAh4nBrLEW54uAzwCFFbjZoNi17W5/OnAR8N/AAYxt5n8xUZz/DM87V7OVsZP7eakTUFrOoGs0ZpPuCJg8XEEs1/0lUdRIjZIV70sb+vv/DFzZAC4XDxBn29fBvsA5qZPIQ9aE7VryacD2XuCHg1oenr13NyNWZhxPbKEYaQf6ecD/A/4EPOh7XQ33ZKJfSJl0gO+nTkLpWKBrNC4gmuFU3Q3A/xDd3z1WRlLe5lJsc69Bej1wcuok8tDu9l8PHMPYl4rPAp4C3DboIjdb9r49sU/1aGIry3Ce6S4GPgJc0uu05haXoVQZqxETT2Va8fQE4hlVDeU56BqNY1InkJPtid/lRuB9RKMtScpLmR74xqoWZ6Fnhe3HyOfz/k0kOm6w12kt6nVa1wNnAS8CXkVsZ1neqrBF2f93EHAocIHFufQfCyjX6UTnY3HeeM6gazTWIPYi5nE0TZncC3wL+C5QSLMfSY0xkXqtzDkK+FzqJMaq3e3vDPyN2H8+FjcDe/Y6rVKcodzu9tcglr2vQzSU24X4rr6e2GN7L/G9/YhL2qX/2Al4I/B24HGJcxnyBuIMdDWYBbpG6wvEech19CDRUOsbxEONJI3UWtSr+da3iJVGlZXt3/4z8BzG3iT3+cDf8j5Wbayy33EN4v4bR+w3n2OTR+k/NgUOJlaT7Jo4l2XdQwy01WlwV6Ngga7RmkTsRS/bh1ue5hJL4L8KTE+ci6RqmUSNzg0nun2/MXUSY9Hu9jchmoSOdfXXhcB+vU5r5tizkjQAk1myxeP5lHeL75eo7+SXRqCsN6jKby7xYTcjdSIFmgS8h9ijfizRtEOShqNuMyCV3oOezSx/h3y66r+PaBAnqbxWA/YDTgTuAn4CvJDy1j6LgB+kTkLlUNabVNVwM9HZt+7NZlrAW4BriH1Bu6RNR1IFLKRexzhWukAnOrY/m+gNMBYnAte4ZFwqrT2IXkJ3AGcQz6lVaAL8R2Ba6iRUDhboGqs/AU+nXB0wizIBeB3RcOd3wJ5p05FUco+kTiBHVW8K+mnG3hhuEbEE9eExZyMpT9sT7/GpwEXAu4ANUyY0Ct3UCag83IOuvEwCvg28NXUiA/ZX4IvAOakTkVQ6M4D1UyeRkwcZe4GbRLvbn0g8uG/F2J57vgh8oddp1am3gFRVGxCz44cSs+ZVNg3YlhgElJxBV27mAm8jzmNt0vmNzyNWEVwMHIiDXpKWqNMM+rqMvfN5Ki8njlAay+fzfODH1H9Ll1Rmk4ii/AzgTqKvRNWLc4gJLotz/YfFhIqwBtGF8qPE/u0muRL4MrFX3T2KUrPdAmydOokcbUwcA1QZWXO4/wOeSmxTGq3DgBN7nVadBl2kKhhPdF4/lGhOPDltOrm7jNgqWqojG5WWM+gqwjzgKOKB6LzEuQzazsRxRNcBb6d5AxSSlqhbMVfFRnEbEIMkYynOZwBnU7/O/FKZ7Qr8L3AbsVLxTdSvOF9IbA21ONejWKCrSNcC+wBvBu5LmsngbUccl3ET8H6q0UFUUr4s0NP7PNHBfSwOBe7tdVqLc8hH0optCfwXcAXwL+CDwGZJMyrWN4Be6iRUPi5x16BMAb5CLBNs4n13H/At4uiPBxLnImkwLgF2T51Ejl4BnJ46ieFqd/sTiONAt2D03zu3Arv3Oq17c0tM0tLWA15DDIQ9h+Y8I94IPAX7Wmg5nEHXoNwPHE7MqF+TNpUkNgA+R3Tq/DKwUdp0JA2AM+hp7Q6sw9ge+N8MzMwlG0lDWsArgVOBu4AfAs+lOcU5xDZIi3MtlwW6Bu18Yl/RJ4m96k2zDtE87xai++iWSbORVKS6FeiV2f+ZNYf7NLDWGP6YS4DLep2W+0OlsRtHzJD/gCjKf000fVs9ZVKJHAv8JXUSKi8LdKXQB75ANFQ7O3EuqUwC3k0scToO2CFtOpIKULcCfWLqBEZgPDEYPJaj4Y4EZuWTjtRYTySe+W4iJmneDqyfNKO07gQ+lDoJlZsFulK6EXgx8AZiNLWJJhL78q8BTiY630uqh7oV6FU6B3074sjP0ToXuLbXaXlcpjRymxANcnvE883HgW1SJlQSi4EO9iLSKligqwxOIkZYu8CixLmkMh54LXEe5hnAXmnTkZSDuhXoVZpBfzexUmm0PgzMzikXqQnWBt4InAVMB74OPC1pRuXzXirUaFPpWKCrLB4E3gk8E7g8cS6p7QdcQMzg7Js2FUljULcCvRIz6Nn+85cQjahG4yrgRmfPpVVaDXgZ8AvgbuAE4EXAhJRJldQniN5D0ipZoKtsLiY6734IeDhxLqntTezRv5TYBuAXnlQtdSvQqzKDvhqxx3W0HaGPBB7KLx2pdp4BfBu4Hfg98YyyZtKMyu3LwBdTJ6HqsEBXGS0AvgbsBPw2cS5lsBsxOn0D8B78EpSqom4zsJWYQQc2ZfQDmvOBq+zcLj3GtsBRwHXEZMqReGTscHwP+FjqJFQtFugqs1uBA4mzMqcnzqUMtgG+RVyXzwIbJs1GUtNUZQZ9a0ZfoH8P955LQ6YQ2w8vIBr7fgZPnRmJE4h+GNKIWKCrCk4DngR8k/rNSI3GFOC/gWnEw+R2adOR1BBVKdBnE92SR+MHwLwcc5GqZg2iae1viSPBjsbGtaPxa+AtjP6zSA1mga6qmE0c2fF04JLEuZTFJOK4juuAXxJ79yWpKFVZ4n4jMHcU/90vgem9Tqupp4moucYDLwCOI5q9nQzsT3UG5crmLGJfvpNKGhULdFXNv4A9ib1PsxLnUhYTgNcQAxd/BV6aNh1JNVWVh/XZxJ7PkTQaXQB8foT/jVR1uwBfJbbOnQMcBqyTNKPqOwM4COinTkTVZYGuKloEfJdY9v6rxLmUzT7AH4ij6t5IdWa8JJVfJT5PshnwU4muycOdST8UuM7ZczXAFsBHgH8TzwofAjZPmlE9LCSOUjsAmJM4F1WcBbqq7A5in9TLgJsT51I2uxDNSW4ktgasnTYdSTVQlRl0ep3WQ8D3ia7Tq3pY/jZwVq/TcsZLdbUucDixym4a8D/AU5JmVC/3Ai8mBgXdc64xs0BXHfyROJLt09jcZ1lbAV8nlq99Adg4bTqSKqwSM+hDep3WDOBY4E3AAyv4184hGpC6ZUp1M5E4CedXwF3Aj4hVdj775+si4GnAn1MnovrwTaq6mEcc/+HZ6cu3PvBxYuT8h3hMiqSRq8wM+pBepzUT+D3wfGJV0dAg7iLgS8C7gGkubVeNPAvoEh3YTwNeTXRmV/6+CzwXjwJWzsalTkAqyEuJZYvbp06kpBYBpxPL3C5OnItUV13giNRJ5OgMorNz5bS7/XHAJsQqojWJvem3AjN6nZZLUlV1OxJ9FA4BHp84lyZ4GHg78IvUiUhS1axONOx4mNgTZCw/zgdejgN2Ut66pH9/5xln5nt5Bq/d7Y9rd/sTsoJdqrKNgPcSJ7ik/mxoUlwLPHkYr48kaSW2Ak4h/Yd62eMq4oiV1ugus6Rl1K1APyffyyNphNYiZsrPJI4GTP2Z0LT4FTB5la+SJGnY9iVGPlN/wJc9pgMfxrNQpbGqW4F+Xr6XR9IwTABeAvwMmE36z4Emxp3E9gFJUgEmEud/PkT6D/yyxwPEHvVNR3WlJdWtQP9HvpdH0krsTpwwcBfp3/tNjYXAd4hj6iRJBdscOJH0H/5ViEeA44AnjepKS81VtwL9n/leHknL2Ab4JHAN6d/vTY9/EsenSZIG7HnAlaT/IqhCLCKOsHv2qK601Dx1K9AvzffySAIeR5z28Hfiezb1+7zpMTN7PTyKWpISWg34APAg6b8YqhIXAK/Ezu/SytStQL8i38sjNdYaxPnkpxGr1FK/t42I44nu+JKkktgE+CnpvyCqFNcCbyOOtJP0aHUr0K/N9/JIjTKOWLV3LNHjJfX72VgSVwLPXfFLJ0lK7TnA5aT/wqhS3Al8DFhvFNdbqqu6Feg35Ht5pEbYmWi4eivp38PGo2M20Th44gpfPUlSaUwAjsRR7pHGLOBrwBYjv+RS7dStQJ+W7+WRamtz4rhSB/vLG78GtlrRCyhJKq+NiA7mNm4ZWfSBE4iZA6mp6lag357v5ZFqZR3gMODPxPFcqd+vxvLjT8CeK3gNJUkVshfQI/0XSxXjD8A+I77iUvXVrUB3Bl16tInA/sDJwBzSv0eNFcf5wN7LfxklSVU1HugAM0j/RVPFuJjoWuvRJWqKuhXonoMuhWcCRwP3kv59aaw8LgZetPyXUZJUFxsAP8QlbKONqcQZo2uM9MJLFVO3Av23+V4eqVJ2AD5LNEtM/V40Vh3/IlY3SJIa5KnEXrPUX0JVjbuB/wYeN9ILL1VE3Qr0Y/K9PFLpbQS8h1g9kvr9ZwwvrgZeQxxrJ0lqqAOA60j/pVTVmA18C9h6pBdeKrm6Feifz/fySKW0JnAw0T9lPunfd8bwYipwKG6jkyRlJgLvxf3pY4n5wM+JlQlSHdStQD8y38sjlcYEYp/yCcBDpH+vGcOPW4DDgdWWfVElSYJYrv0tHHUfa5wNvGCE114qm7oV6K/N9/JIyT0N+DpwB+nfX8bI4nbgXUDrMa+qJEnLsSPRUCn1F1jV43LgLcDqI7v8UinUrUDfO9/LIyWxNfAJYq9y6veUMfKYSpyoY6NZSdKovIAoMlN/oVU97gY+A2w8sssvJVW3Av2J+V4eaWDWB94B/A1YRPr3kjHyuBB4Fe4xlyTlYDzwNuAu0n/BVT0eAX4C7DqSF0BKpG4F+nr5Xh6pUKsTBd1viO+O1O8fY+SxCDgdeDaSJBVgMvBFYC7pv/TqEOcCB+JousqrTgX6vJyvjVSEccRWjGOAmaR/3xij/7w5BlftSJIGZGvgJNJ/AdYlbiA66E8eyYsgDUCdCvRbc742Up52Ar4ETCP9e8UYfcwAvoDb2SRJiewFXET6L8S6xINEN95tRvAaSEWqU4F+Sc7XRhqrTYEPAv8i/fvDGFvcDLwHWAtJkhIbBxxMzE6l/oKsSywAfg08ZwSvg1SEL5H+/ZBXnJHztZFGYzLwZuAcYCHp3xfG2KIHvJ44h16SpFKZRBz78hDpvzDrFP8HvBGYOPyXQsrNm0n/Hsgrjs330kjDthrwcmJr2BzSvxeMsccfgecjSVIFbEo8CDszkG/cAXwS2GD4L4U0ZnuS/t7PK76Y87WRVmVP4LvAPaS//42xRx84HngKkiRV0G7AX0n/hVq3mAv8CNh5+C+FNGrrk/6ezyvek/O1kZZne+DTwFTS3/NGPnEPMcC3BZIk1cCBwPWk/4KtY/wJ2I/oAyAV5W7S3+t5xOvyvjBSZgPg3dg0tW5xCfAm4jx6SZJqZSLwfuL4kdRfuHWMa4F3YvdYFeM80t/jecQ+OV8XNdskojnYGcB80t/fRj7xCPAzYA8kSWqAKcC38WGmqJgB/A+w5XBfEGkYfkj6ezuPeFLeF0aNMx7Yl9iHPIv097SRX0wn+rxshCRJDfREYtYh9RdyXWM+cDLRoEgaqw+Q/p7OIx6X94VRY+wGfA24nfT3sZFvnAe8hui0L0lS4+0L/Jv0X9B1jouIZZitYb4m0rJeRvr7eKzRx14NGpmtgI8BV5L+/jXyjYeJlUG7IEmSHmMC8Hbq04iqrHEf8E3s/q6R25b09+9YY3ruV0V1tB7wNmJWdRHp71sj37iRWBG0HpIkaZUmA18C5pH+S7zucTExKDJ5WK+Mmm481X9f9nK/KqqLFnAQ8Guqf58bj41FwB+JE0/GI0mSRmwbYv906i/1JsRs4MfAs4fzwqjRriD9/TqW+EP+l0QVNg54LrHM2dNF6hkPEKvGnoAkScrFs4B/kv5LvilxDfBh7GCr5fsV6e/RscSP878kqqAnAV8EbiH9PWkUE1cCHWBtJElS7sYBhwC3kv5LvynRJ5Z67kf0B5AAPkf6e3Ms8aX8L4kqYlNi3/GlpL8PjWJiPnAK8DwkSdJATAL+m1iSnfpBoEkxHfg80SRMzXYo6e/HscT78r8kKrG1gTcBZwMLSH//GcXEjUSn/U2QJElJbAocBywk/YNBk2IR8GfgYGCNVb5KqqPdSX8fjiXekP8lUcmsRqz8OZE4Riv1PWcUE31itvxFeHSiJEmlsRtwLukfFJoYM4DvALuu6kVSraxN+ntvLPH8/C+JSmIP4jPpHtLfZ0ZxcQPwX8DGSJKk0joQuIr0Dw5NjR7RjGfdVb1QqoXppL/nRhtPLuB6KJ028BXgZtLfW0Zx0ScaVL4QZ8slSaqMCcBhwDTSP0w0NeYAJwB7r+K1UrX9mfT32mhjgwKuhwZrV6ID+w2kv5+MYuMG4KN4qogkSZW2OvB+4F7SP1w0Oa4nliFuuvKXSxV0NOnvr9HEfJx9q6qdgc8C15L+PjKKjT7wS5wtlySpdiYDnwEeIv0DR5NjPnA6cADRvEnVdyTp76vRxB1FXAwV5onAp3D7UlNiKvARnC2XJKn2NgS+BTxC+geQpscdxDnU26/0FVPZ7Uv6e2k08a8iLoZytT3wCeDfpL9fjOLjEeBk4AU4Wy5JUuNsDRyPR7OVJS4kzqTefGUvmkppK9LfP6OJM4u4GBqzxxP7jC8l/T1iDCaGZss3RJIkNd6TiSXXqR9QjIhFwPnAu/HYnKoYB8wm/b0z0vhBERdDo7IV8CHgn6S/L4zBxCPAScRRh86WS5Kkx9gLOI/0Dy3GklgI/AV4B3bbLrsqznZ+qJAroeHanFg1cwExMJf6fjAGE9cT7z0/0yVJ0rC8lNibmvohxnh0zAfOBg4H1l/hq6dUfkH6e2SkcWAhV0IrswmxOuZvWJQ3KR4BTgSehyRJ0iiMA96A5+qWNfrA74E3Aeuu4DXUYH2K9PfFSGOnQq6ElrUhcATwV+z50bS4DmfLJUlSjiYCHaLbeOoHHWP5MY/oIXAwsPbyX0YNwOtIfy+MJBYCqxdyJQQwBXgb8CdgAelfb2NwMY9YUbMPkiRJBVkT+Bgwk/QPP8aKYw5wKvDa7DXT4OxC+td/JHFLIVeh2dYDDiO6488n/WtsDDauBT6Is+WSJGmA1gf+hygEUz8MGSuP2USH4FcCayzvxVSuVqdaM6XnFHMZGmcd4I3AGcQ+49SvqzHYGJot3xtJkqSENgd+iLNEVYlZwM+A/YHWcl5P5eNq0r/Ww41uQdegCdYmenScRhRoqV9LY/BxDfABYiuDJElSaTwBOBm7EVcpHgB+QnTrn/iYV1RjcSLpX9/hxgcKugZ1tSaxdeQUXEHU1JgH/Bx4LpIkSSX3NOAs0j9AGSOL+4FjgH2BCY95VTVSHyP9azrc2L+ga1AnawAHEYOQs0n/mhlp4hrg/ThbLkmSKuh5wMWkf6AyRh73EMuenweMX/aF1bDsR/rXcbjxxIKuQdWtDhxAzJTOIv3rZKSJucS2IGfLJUlSLRxEtfbjGo+O+4gC5RCcNRqJLUj/2g0nFmAvgqVNJAZXjie2gKR+fYx0cTXwPuBxSJIk1cwE4sihaaR/6DJGHwuAfwCfAHZFq3I/6V+zVcXNhf321bEa8GLgWGAG6V8TI13MBX4KPAdJkqQGaAHvBKaT/kHMGHtMJ/atv4LoZq1HO5f0r9Gq4uyifvmSmwC8gDiB4l7Svw5G2rgKZ8slSVKDrQ4cCdxB+gczI594BPgT8ZC7AwL4Fulfl1XF0YX99uUznjij+nvA3aS/9kbamAucADwbSZIkATCJ6Ih7F+kf1ox8YypRoL6IGJBposNJ/zqsKt5X2G9fDuOIAuzbOCBoRFwJvBdYH0mSJC3XmsCHiO7hqR/ejPxjNnA68HaieVpTPJ30135VsV9hv31aewLfAG4j/TU20sds4DhgLyRJkjRsawEfJTqHp36gM4qLy4EvEjObdT5zfRKwkPTXe2VRp+0IuwNfBW4h/XU1yhGXAO8AJiNJkqRRm0x0Crejcv3jfuBE4FBgA+rnWtJf4xXFAuJYsSrbDfgScCPpr6dRjpgJfBdPmpAkScrdOsBRxANX6oc+o/hYCFwIfJIovOrgl6S/riuKGwv8vYu0K/A54DrSX0OjPHEe8EZi5YokSZIKtB7wGeBB0j8EGoOL24EfAQdR3SWqnyT9dVxRnFng7523ZwBfAW4g/XUzyhN3E/dFnbZqSJIkVcb6wOeBWaR/MDQGG48A5xDNBHemOvYn/bVbUXynwN97rIa6r38DmEb6a2WUJxYCfyQG7qq+RUOSJKkWphD7Th8i/cOikSZuI2bXXw2sS3ltTfprtaJ4T4G/92hMAJ5PnM3ukWjGsjEN+DSwFZIkSSqlDYjljQ+T/uHRSBfzgb8RjQXbxOxrmTxA+mu0vHhpkb/0ME0EXgIcg8csGo+NPnAqca+OR5IkSZWwEfA1YA7pHyiN9HEXcAJwMLHaIrXzSX9NlhdPKPKXXonViaX/x+NJDcby4zrgI8DGSJIkqbI2IfasziX9A6ZRjlgIXEw0GdyLNLNw3x1BvoOK+cBqRf7Sy1gTeBXwC+whYSw/5gA/BZ6LJEmSamUz4NvAPNI/dBrlivuBk4A3EwM6g/D2An+f0cbUQn/jMBl4A3AKbkMxVhyXAe8mTuuQJElSjW1ONJx6hPQPoUb5YhFRHHwJ2IfiOkLvWYLfddn4Q0G/63rA/wN+iwNkxopjFvAD4OlIkiSpcbYEvk80HEr9YGqUN2YBpwFHANuQn7WIpfapf7+l41s5/n4bAG8lzlX3PWasLC4A3kK8JyRJktRwWxPdoueT/kHVKH9cSxSyLwUmMTZTS/D7LB3vHuPvswnwTuDPwIIS/D5GeeM+ojfIk5EkSZKW4/HAsVioG8OPucBZwPuBJzFyp5bgd1g6XjKK32FL4H3EkXZlWxFglCsWAecArye69kuSJEmrtB3wE5wBNEYetwE/JxrA7ciqHVWCnJeO7YaRM8C2wIeJTviLSpC3Ue64HfgCcd9IkiRJo/IE4ngfC3VjtHEncDKx7PvJwDge7RUlyHEo+sAEVmxH4BPApSXI1Sh/LCCaAh7Ayu8rSdJSln1QkCQ91o7Ap4DXkea8bNXHfcRS8POymM1gjjYbjut57Kz/U4BXE2eVu1dYw3ETcBzwY+COxLlIkiSpxnYizsp2Sa+RV8wsQQ5DcQahDXwRuK4EORnViHnEZ+MLcfJHksbED1FJGrknE/tvD6a4M7KlQbuRWIq8TeI8VB1XAz8CTgDuT5yLJNWCBbokjd7mwHuBdwDrJM5FkgbhYeCXRGF+QeJcJKl2LNAlaezWIbp2vxfYInEuklSE/yOK8hOBWYlzkaTaskCXpPxMJM73/RCwS+JcJGmsHiCODfwRcFniXCSpESzQJakYLyb2qb8gdSKSNELnE0X5KcDcxLlIUqNYoEtSsXYjZtRfC6yWOBdJWpF7gOOJwvz6xLlIUmNZoEvSYGwNvA94K7B24lwkCeLIyLOJovy3wPy06UiSLNAlabDWA44A3gNsmjgXSc10K/Bj4Ljsf0uSSsICXZLSaAGHAh8Edkqci6T6mw/8jpgtP4uYPZcklYwFuiSlNQ54GdFQbu/EuUiqn+uBY4n95XcnzkWStAoW6JJUHk8nCvWDgAmJc5FUXfOIDuw/As5LnIskaQQs0CWpfLYF3g+8BVgzcS6SquNyoij/GXGGuSSpYizQJam8pgDvBN4NbJQ4F0nl9BBwIlGYX5I4F0nSGFmgS1L5rQG8DugAeyTORVI5XEgU5ScDDyfORZKUEwt0SaqWXYlC/RBgrcS5SBqsGcAJRGF+VeJcJEkFsECXpGpahzimrQPsnDgXScU6FzgGOBV4JG0qkqQiWaBLUvU9iyjUXw2snjgXSfm4lzga7RjiqDRJUgNYoEtSfWwAHAa8A9gucS6SRm4x8GeiKD8N6KdNR5I0aBboklQ/44B9iVn1/fFMdans7gJ+TOwtvylxLpKkhCzQJaneNgfelsVmiXORtMQi4Gzgh8DvgAVp05EklYEFuiQ1w2rAAcARwAvx819K5XbgOOBYYFriXCRJJeMDmiQ1z/bEPvXDgCmJc5GaYCHwB2Jv+R+yv5ck6TEs0CWpudYAXkPMqj8zcS5SHU0jZsqPI2bOJUlaKQt0SRLALkShfigwOXEuUpUtIPaU/5DYY74obTqSpCqxQJckLW0ycAixBH7XxLlIVXIT0YX9x0RXdkmSRswCXZK0IrsAbwQOxg7w0vLMBn4DnECcX744bTqSpKqzQJckrcp44AVEsX4QsFbadKSk5gNnAj8HfgvMTZuOJKlOLNAlSSOxFvBKYq/6C4EJadORBmIx8A+iKP8VcH/adCRJdWWBLkkarU2BNxAz6+5XVx1dSRTlJ+KZ5ZKkAbBAlyTlYWeiUD8E2DxxLtJY3EYU5D8H/p04F0lSw1igS5LyNB54HrEE/lV4ZJuqYSZwClGUn4/N3iRJiVigS5KKsiZwIDGz/iLcr65ymQecQRTlfwD6adORJMkCXZI0GBuzZL/60xLnouZaBPyFKMp/DcxKm44kSY9mgS5JGrSdiCXwhwBbJc5FzdAjivKTgDsT5yJJ0gpZoEuSUhkH7E3Mqr8aWCdtOqqZG4mi/BfAdYlzkSRpWCzQJUllMAnYOCc+AQAABLRJREFUn9iz/mJgStp0VFHXAr/J4pLEuUiSNGIW6JKkshkP7AG8FHgZsWfd7ystz2Lgn8BpRFHuTLkkqdJ84JEkld3GwEuIYv1FwHpp01Fi84FziYL8dOCOpNlIkpQjC3RJUpVMAPYiivWXAU9Nm44GZDZwJlGU/x54MG06kiQVwwJdklRlmxF7118BPB9opU1HOboX+C2xfP0c4txySZJqzQJdklQXk4l96wcSs+suha+em4mC/DTgH8DCtOlIkjRYFuiSpDqaCOxDFOsHAlskzUYrczlLmrxdnjgXSZKSskCXJDXB7kSh/gpg58S5NN0i4O8smSm/OW06kiSVhwW6JKlptiUK9QOAZwGrpU2nEeYR+8h/A/yO2F8uSZKWYYEuSWqydYmj2/YjjnLbOG06tXIVcBZwNnA+MDdtOpIklZ8FuiRJYRzQJhrM7Ucsix+fNKNquY+YJR8qyj2fXJKkEbJAlyRp+TYkZtVfBrwYWD9tOqUzH7iAKMbPBi4l9pdLkqRRskCXJGnVJgB7EcX6y4Cnpk0nmetZUpD/FZidNh1JkurFAl2SpJHbDHgO0WTumUTBXsdmcw8Af2HJsvVbkmYjSVLNWaBLkjR2awF7EMX6s4A9gfWSZjQ6C4F/EsX4Wdn/Xpg0I0mSGsQCXZKk/I0DnsySGfZnAdslzWjFbmHJsvU/E7PmkiQpAQt0SZIGY2OWFOtPAbYEtgAmD+jnLwbuAaYTRfm5RFF+/YB+viRJWgULdEmS0lqHJcX60F83AtYEJi3nr5OAicA84mzxOcv562zimLPpwG3ZX28H+gP6nSRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJkiRJ+v/twQEJAAAAgKD/r9sRqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcBae+OfsEVXgAAAAAASUVORK5CYII=;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" vertex=\"1\">\n          <mxGeometry x=\"11\" y=\"142\" width=\"32\" height=\"32\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-10\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;sketch=1;curveFitting=1;jiggle=2;\" parent=\"z94eKqQJERM4FfAnxR9R-17\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"364\" y=\"157.81\" as=\"sourcePoint\" />\n            <mxPoint x=\"164\" y=\"159\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"280\" y=\"159.31\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-13\" value=\"accesses\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontStyle=0\" parent=\"z94eKqQJERM4FfAnxR9R-10\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"0.0511\" y=\"1\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-1\" y=\"7\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"z94eKqQJERM4FfAnxR9R-11\" value=\"&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color);&quot;&gt;Output Port&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;implements&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;Data Contract&lt;/span&gt;&lt;span style=&quot;font-size: 11px;&quot;&gt;&lt;br style=&quot;font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Architects Daughter;fontSize=11;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;exitX=0.139;exitY=0.98;exitDx=0;exitDy=0;exitPerimeter=0;fontStyle=0\" parent=\"z94eKqQJERM4FfAnxR9R-17\" edge=\"1\">\n          <mxGeometry x=\"0.2916\" y=\"-46\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"156\" y=\"150\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n            <mxPoint x=\"232.89600000000002\" y=\"85.31999999999996\" as=\"sourcePoint\" />\n          </mxGeometry>\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n  <diagram name=\"Preview\" id=\"fMgUk0SnIRvSvDNgt62m\">\n    <mxGraphModel dx=\"1434\" dy=\"777\" grid=\"0\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"4681\" pageHeight=\"3300\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-0\" />\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-1\" parent=\"Qig_5n0r7LaK5z3JI_5E-0\" />\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-2\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"Qig_5n0r7LaK5z3JI_5E-1\" vertex=\"1\">\n          <mxGeometry x=\"65\" y=\"31\" width=\"600\" height=\"315\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-3\" value=\"\" style=\"group\" parent=\"Qig_5n0r7LaK5z3JI_5E-1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"99\" y=\"77\" width=\"532\" height=\"223\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-4\" value=\"Data &lt;br&gt;Product\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontStyle=1;strokeWidth=1;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fillColor=none;strokeColor=#6c8ebf;spacingLeft=12;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry y=\"123\" width=\"150\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-5\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"143\" y=\"157\" width=\"12\" height=\"6\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-6\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=2;fontFamily=Architects Daughter;fontSize=14;fontStyle=1;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"143\" y=\"153\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-7\" value=\"Data Product&amp;nbsp;/ Dashboard /&lt;br&gt;ML Model\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontStyle=1;strokeWidth=1;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fillColor=none;strokeColor=#d79b00;spacingLeft=31;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"379\" y=\"123\" width=\"153\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-8\" value=\"&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;font-size: 11px;&quot;&gt;Input Port&lt;br style=&quot;font-size: 11px;&quot;&gt;verifies guarantees of&lt;br style=&quot;font-size: 11px;&quot;&gt;Data Contract&lt;br style=&quot;font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Architects Daughter;fontSize=11;entryX=0;entryY=0.5;entryDx=0;entryDy=0;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeColor=default;fontStyle=0\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" target=\"Qig_5n0r7LaK5z3JI_5E-7\" edge=\"1\">\n          <mxGeometry x=\"0.2858\" y=\"52\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"368\" y=\"151\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n            <mxPoint x=\"292.3636363636365\" y=\"84.81818181818187\" as=\"sourcePoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-9\" value=\"Data Provider\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;curveFitting=1;jiggle=2;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"22.5\" y=\"193\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-10\" value=\"Data Consumers\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;sketch=1;curveFitting=1;jiggle=2;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"403\" y=\"193\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-11\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=2;fontFamily=Architects Daughter;fontSize=14;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"366\" y=\"153\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-12\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuMTQgNi45NGEuNzcuNzcgMCAwIDAtLjQ4LjJjLTEtLjgtMi4xNC0uMjUtMyAuNzJBMTYuMTIgMTYuMTIgMCAwIDAgMTYuMTUgMTBhLjI4LjI4IDAgMCAwIC40LjMyYy4wOCAwIDEuMzktMS4yMSAxLjQ3LTEuMjguNzMtLjY4IDEuMzUtMS40MiAxLjgxLTEuNDhzLjMyIDAgLjQxLjA5YTE5IDE5IDAgMCAwLTIuMDcgMi44MWMwIC4xMi0uMzEgMCAxLjUzIDEuNzFsLjI3LjI0QzE5IDEzLjU3IDE2IDE2LjczIDE1Ljc0IDE3YTIuNjYgMi42NiAwIDAgMS0xIC40MyAzLjcyIDMuNzIgMCAwIDEtLjIyLTEuNTJMMTcuNyAxMmEuMy4zIDAgMCAwLS40Ny0uMzdjLS43Mi44OC0zLjQ1IDMuMzktMy42OSAzLjkxYTQgNCAwIDAgMCAuMjggMi42MiAxIDEgMCAwIDAgLjkzLjMyIDQuMjYgNC4yNiAwIDAgMCAxLjc2LS42NWMuNi0uNjIgMy44Ni00Ljc5IDQuNjUtNS4zMWEyMCAyMCAwIDAgMCAxLjc3LTEuNjQgNC42NyA0LjY3IDAgMCAwIDEtMS4zN2MuNS0xLjU3LTEuODItMi42Ni0yLjc5LTIuNTdabTEuNjYgMi4zM2ExMi45IDEyLjkgMCAwIDEtMS41OCAxLjg4Yy0uOTEgMS0uNjUuNzQtMSAuNDYtMS41Mi0xLjI2LTEuMzMtMS0xLjI3LTEuMjFsMi0yLjE2Yy4zNC0uMzgtLjA2LS40NS43LS4xNS40NC4xNiAxLjQzLjYzIDEuMTUgMS4xOFoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwMjAyMDIiIGQ9Ik03LjIgMjIuNTNjLTEuNDgtLjI1LTEuNDgtMi4xMS0xLjYxLTMuNTNhNDAgNDAgMCAwIDEgLjE1LTYuNTdjLjE4LTIuNDYuNi0yLjI1LjU5LTUuNTEgMC0xLjczLS4zMy00LjA2LTEuNzktNWE0MC4yOSA0MC4yOSAwIDAgMSA2LjI0LjA4YzIuNjQuMTggNS43MS0uMTQgNi45MS42M0MxOS4yMyAzLjYzIDE4LjEyIDYgMTkgNmEuMzIuMzIgMCAwIDAgLjMxLS4zNmMtLjA2LTEuMzEuMjQtMi40NC0uODEtMy40NEE1LjgyIDUuODIgMCAwIDAgMTQuNzYgMWE3NS40NiA3NS40NiAwIDAgMC04LjU3IDBDNS43NyAxIDEuNiAxLjUgMSAyLjA4QTMuMTcgMy4xNyAwIDAgMCAwIDQuNSA0LjYxIDQuNjEgMCAwIDAgLjcyIDdhMS45MiAxLjkyIDAgMCAwIC45My42MmMxIC4zMSAzLjI0LjI1IDIuODYtLjU1QzQuNCA2LjggMy4xOSA3IDMuMTEgN2EyLjM1IDIuMzUgMCAwIDEtMS43Ny0uNTYgMy43NyAzLjc3IDAgMCAxLS40OC0yIDIuMzEgMi4zMSAwIDAgMSAuNzYtMS43MyAzLjU0IDMuNTQgMCAwIDEgMS4yNy0uMzFjMS4xMSAwIDEuNjQuNjYgMiAxLjczYTE0LjEzIDE0LjEzIDAgMCAxIC4zIDQuNDYgMzMgMzMgMCAwIDAtLjU1IDdjMCAxLjQzLjE5IDUgLjg0IDYuMjJhMi4xIDIuMSAwIDAgMCAxLjY3IDEuMjQuMy4zIDAgMCAwIC4wNS0uNTJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuODUgMTkuNTRhOCA4IDAgMCAxLTEuNzEtMy4xOS4yOS4yOSAwIDEgMC0uNTcuMTVjLjc1IDMuMzMgMi4xOCA0IDIuNzkgNC43OS0uMzQuMDgtMTMuMjYgMS4xLTE0IDFhLjMzLjMzIDAgMSAwLS4wOS42NmMxLjYxLjI2IDEwLjU5LS4yMiAxMy4xLS40OWEzIDMgMCAwIDAgMi0uNjVjLjYzLS42Ny0uNzEtMS40Ny0xLjUyLTIuMjdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNOS42NyAxNi44NmMuMzkgMCAuNDYuODQuNSAxLjI2IDAgLjEzLS4wNy43OC4zNS45NWEuNTEuNTEgMCAwIDAgLjQ1IDBjMS42My0uODUuOTMtLjE4IDEuNDYtLjE4LjY4IDAgLjU2LTEuMzktMS4yNS0xIDAtMS4yNC0uMzQtMi4yOS0xLjU5LTIuMmEyLjc1IDIuNzUgMCAwIDAtMi4xOCAxLjgxIDMuOTIgMy45MiAwIDAgMC0uMzQgMS4wNWMuMTEgMS44NC44Ni0xLjY4IDIuNi0xLjY5WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTguNTcgOC40MWM1LjI4LjE5IDIuMzIgMCA2LjA4IDBhLjM0LjM0IDAgMCAwIC4zNS0uMzUuNDcuNDcgMCAwIDAtLjM5LS4zN2MtLjI4LS4wNi0yLjEtLjMtMi45NC0uMzNhMTcuODQgMTcuODQgMCAwIDAtMy44NC40OC4zMS4zMSAwIDAgMCAuMi41M2MuMDkuMDIuNDguMDQuNTQuMDRaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTMuMjIgMTEuNjRjLTUuMi0uMTUtNS40OS4xMi01LjU3LjM0YS4zLjMgMCAwIDAgLjE3LjM4IDEuMjMgMS4yMyAwIDAgMCAuNDQuMWMuODQuMDYgNy4yOC4zOCA3LjI0LS40Mi0uMDMtLjU4LTEuMzctLjMzLTIuMjgtLjRaIi8+PC9nPjwvc3ZnPg==;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"226\" y=\"30\" width=\"64\" height=\"64\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-13\" value=\"&lt;span style=&quot;font-size: 14px;&quot;&gt;Data Contract&lt;/span&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Architects Daughter;fontSize=14;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontStyle=1\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"207\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-14\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNNC44NiAxNi4yNGE4LjUxIDguNTEgMCAwIDAtMS42OC4xMSAyLjc3IDIuNzcgMCAwIDAtLjcxLjA3LjU5LjU5IDAgMCAwLS4zNi4zNSA2IDYgMCAwIDAtLjIzIDIuMTJjLjA2IDEuNTguNDEgMy40Ni41MSA0LjQzYS4yOC4yOCAwIDAgMC0uMTcuMjguMjkuMjkgMCAwIDAgLjMzLjI1Yy4zMSAwIC41OS4xMi44OS4xNGEyLjQxIDIuNDEgMCAwIDAgLjM4IDAgMi4yIDIuMiAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYy4wNy0uOTUuMTQtMS45LjE4LTIuODUgMC0uNjMuMDYtMS4yNy4wNy0xLjkxIDAtLjIzLjA3LS44LjA2LTEuMjRhMS42NyAxLjY3IDAgMCAwLS4xOC0uNzcgMSAxIDAgMCAwLS43My0uMzhabS0uNzIgNi42NmEyLjU1IDIuNTUgMCAwIDAtLjM5IDAgMi42MyAyLjYzIDAgMCAwLS4zOS4wNiAyLjU1IDIuNTUgMCAwIDAtLjM5LjEzYzAtLjg3LS4xMi0yLjI2LS4xMi0zLjU0YTguNjkgOC42OSAwIDAgMSAuMTctMmwuMjEgMGMxLjc3LS4wOCAxLjQ1LS40MSAxLjQ5IDEuMjMgMCAuNjMuMDYgMS4yNS4wNyAxLjg4bDAgMi40NGMtLjIxLS4xLS40Mi0uMTgtLjY1LS4yWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTExLjIzIDEzLjQ2YTEgMSAwIDAgMC0uNzQtLjQyIDkuMzYgOS4zNiAwIDAgMC0xLjY4LjExIDMuMjIgMy4yMiAwIDAgMC0uNzEuMDYuNjcuNjcgMCAwIDAtLjM3LjM1IDEwLjYgMTAuNiAwIDAgMC0uMjMgMy4xYy4wNyAyLjQ3LjQ0IDUuNjMuNTIgNi42NmEuMjguMjggMCAwIDAtLjE3LjI4LjI5LjI5IDAgMCAwIC4zMy4yNWMuMzEgMCAuNTkuMTIuODkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMiAyLjIgMCAwIDAgLjM3LS4wNmMuMy0uMDYuNTctLjE0Ljg2LS4yMmwuMDcgMGEuMzMuMzMgMCAwIDAgLjM0LS4zMmMuMDYtLjkzLjE0LTIuOTQuMi00Ljc3LjA1LTEuMzEuMDgtMi41My4wOC0zLjE5IDAtLjI3LjA2LTEgMC0xLjQ0YTEuMyAxLjMgMCAwIDAtLjE0LS41M1pNOS43NyAyMi45YTIuNTUgMi41NSAwIDAgMC0uMzkgMCAyLjYzIDIuNjMgMCAwIDAtLjM5LjA2IDIuNTUgMi41NSAwIDAgMC0uMzkuMTNjMC0xLjIyLS4xNC00LjEyLS4xLTYuNDJhMTMuODMgMTMuODMgMCAwIDEgLjE3LTIuMzVsLjE5IDBjMS43NS0uMDcgMS40Ni0uNDEgMS40NiAxLjIzIDAgLjc5LjA3IDIuMzcuMDkgNGwwIDMuNTdjLS4xOS0uMTItLjQxLS4yLS42NC0uMjJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTYuMTIgMTYuMjRhOC41MSA4LjUxIDAgMCAwLTEuNjguMTEgMi43NyAyLjc3IDAgMCAwLS43MS4wNy41OS41OSAwIDAgMC0uMzYuMzUgNiA2IDAgMCAwLS4yMyAyLjEyYy4wNiAxLjU4LjQxIDMuNDYuNTEgNC40M2EuMjcuMjcgMCAwIDAtLjE3LjI4LjI5LjI5IDAgMCAwIC4zMy4yNWMuMzEgMCAuNTguMTIuODkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMzggMi4zOCAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYy4wNy0uOTUuMTQtMS45LjE4LTIuODUgMC0uNjMuMDYtMS4yNy4wNy0xLjkxIDAtLjIzLjA3LS44LjA1LTEuMjRhMS42OCAxLjY4IDAgMCAwLS4xNy0uNzcgMSAxIDAgMCAwLS43My0uMzhabS0uNzIgNi42NmEyLjY4IDIuNjggMCAwIDAtLjQgMCAyLjUgMi41IDAgMCAwLS4zOC4wNiAyLjU1IDIuNTUgMCAwIDAtLjM5LjEzYzAtLjg3LS4xMy0yLjI2LS4xMi0zLjU0YTguNjkgOC42OSAwIDAgMSAuMTctMmwuMjEgMGMxLjc3LS4wOCAxLjQzLS40MyAxLjQ5IDEuMjMgMCAuNjMuMDYgMS4yNS4wNyAxLjg4bDAgMi40NGMtLjIxLS4xLS40Mi0uMTgtLjY1LS4yWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTIyLjY1IDEwLjE1YTEuMyAxLjMgMCAwIDAtLjE2LS41NyAxIDEgMCAwIDAtLjc0LS40MiA5LjI5IDkuMjkgMCAwIDAtMS42OC4xMSAzLjIyIDMuMjIgMCAwIDAtLjcxLjA2LjYyLjYyIDAgMCAwLS4zNy4zNiAxNy4zMyAxNy4zMyAwIDAgMC0uMjQgNC4yNWMuMDggMy41Ni40NSA4LjI0LjUzIDkuMzhhLjI2LjI2IDAgMCAwLS4xNy4yOC4yOS4yOSAwIDAgMCAuMzIuMjVjLjMyIDAgLjU5LjEyLjkuMTRhMi40MSAyLjQxIDAgMCAwIC4zOCAwIDIuMzggMi4zOCAwIDAgMCAuMzctLjA2Yy4zLS4wNi41Ny0uMTQuODYtLjIybC4wNyAwYS4zMy4zMyAwIDAgMCAuMzQtLjMyYzAtLjkxLjE1LTQuMTkuMjEtNy4xLjA1LTIuMTMuMDgtNC4wNy4wOC00Ljc0YTEzLjM1IDEzLjM1IDAgMCAwIC4wMS0xLjRaTTIxIDIyLjlhMi42OCAyLjY4IDAgMCAwLS40IDAgMi42MyAyLjYzIDAgMCAwLS4zOS4wNiAyLjg0IDIuODQgMCAwIDAtLjM4LjEzYzAtMS40NC0uMTMtNS43OS0uMDktOS4xM2EyOC40NiAyOC40NiAwIDAgMSAuMTctMy41MmwuMTcgMGMxLjc3LS4wNyAxLjQ3LS4zMyAxLjQ1IDEuMjMgMCAuOTEuMDggNC4xOC4xMSA3LjA4bDAgNC4zMmMtLjE3LS4wNy0uMzgtLjE1LS42NC0uMTdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMTkuNjcgMy40OWExLjY1IDEuNjUgMCAwIDAgLjgyLjIgMi4xMSAyLjExIDAgMCAwIC41IDAgNC4wNiA0LjA2IDAgMCAwIC42My0uMjQuMzEuMzEgMCAwIDAgLjE4LS4yMSAxLjUzIDEuNTMgMCAwIDAgLjcxLTIgMS42NyAxLjY3IDAgMCAwLTIuMjctMUEyLjM4IDIuMzggMCAwIDAgMTkgMmExLjc5IDEuNzkgMCAwIDAgLjE3LjkgMTMuMzIgMTMuMzIgMCAwIDAtMS4wOCAzLjE0Yy0uMTEuNDQtLjIyLjg4LS4zNSAxLjNzLS4xOC41NS0uMy44YTMuMTMgMy4xMyAwIDAgMS0xLjI1IDEuNDYgMS42MSAxLjYxIDAgMCAwLTEuNzktLjMgMS4zMSAxLjMxIDAgMCAwLS4yNC4xN2MtLjI3LS40Ny0uNDYtLjk0LS42OS0xLjRhNS45MiA1LjkyIDAgMCAwLS42OC0xQTMuOTEgMy45MSAwIDAgMCAxMSA1LjkzYTEuNyAxLjcgMCAwIDAgLjEtMS41MSAxLjY3IDEuNjcgMCAwIDAtMi4yNy0xQTIuNDEgMi40MSAwIDAgMCA3LjUgNS4zYTEuODEgMS44MSAwIDAgMCAuMDYuNTdoLS4wOGE1LjcxIDUuNzEgMCAwIDAtMS42NSAxIDUuMTIgNS4xMiAwIDAgMC0uNTkuNTUgNy41MiA3LjUyIDAgMCAwLS41LjYyYy0uMy40My0uNTMuODgtLjc3IDEuM2ExLjY1IDEuNjUgMCAwIDAtMS4zNiAwIDIuMzggMi4zOCAwIDAgMC0xLjI4IDEuODkgMS40NSAxLjQ1IDAgMCAwIDEuNTMgMS42NiAyLjA3IDIuMDcgMCAwIDAgLjUgMCAzLjcxIDMuNzEgMCAwIDAgLjY0LS4zMy4yOS4yOSAwIDAgMCAuMTgtLjIxIDEuNTEgMS41MSAwIDAgMCAuNzEtMiAyLjA3IDIuMDcgMCAwIDAtLjM5LS42NWMuNC0uMzguODItLjc4IDEuMjMtMS4yMS4yMi0uMjMuNDQtLjQ4LjY1LS43MnMuNDItLjQ5LjY1LS43MWE1LjcyIDUuNzIgMCAwIDEgLjczLS41OXMwIDAgLjA2IDBBMS41NSAxLjU1IDAgMCAwIDkgN2EyLjA3IDIuMDcgMCAwIDAgLjUgMCA0LjE2IDQuMTYgMCAwIDAgLjY0LS4yNC4zLjMgMCAwIDAgLjE3LS4yMSAxLjU5IDEuNTkgMCAwIDAgLjI2LS4xNC4yNC4yNCAwIDAgMCAuMTQuMTQgMy45MSAzLjkxIDAgMCAxIC42OC41OCA1LjIzIDUuMjMgMCAwIDEgLjQxLjU1Yy4xNC4yLjI3LjM5LjQyLjU4YTE2IDE2IDAgMCAwIDEuNCAxLjc4IDIuMzEgMi4zMSAwIDAgMC0uNTMgMS4yNSAxLjQ1IDEuNDUgMCAwIDAgMS41NCAxLjY2IDIgMiAwIDAgMCAuNDkgMCA0LjE2IDQuMTYgMCAwIDAgLjY0LS4yNC4zLjMgMCAwIDAgLjE3LS4yMSAxLjUxIDEuNTEgMCAwIDAgLjcxLTIgMSAxIDAgMCAwLS4wOC0uMTggMy44IDMuOCAwIDAgMCAxLjY4LTEuNDggNS4yNyA1LjI3IDAgMCAwIC40Ni0uOTIgOS40IDkuNCAwIDAgMCAuMzktMS40MyAyMC43MiAyMC43MiAwIDAgMSAuNTgtM1ptLjQzLTEuNjhhMS4zNSAxLjM1IDAgMCAxIC42Mi0uNjcuNjkuNjkgMCAwIDEgMSAuMzkuNzguNzggMCAwIDEtLjMzIDEuMTQuMzQuMzQgMCAwIDAtLjIxLjI4TDIxIDNhMS4zNSAxLjM1IDAgMCAxLS40IDAgLjY2LjY2IDAgMCAxLS42LS41OSAxLjEyIDEuMTIgMCAwIDEgLjEtLjZabS0xNi4zOSAxMGEuMzQuMzQgMCAwIDAtLjIxLjI4bC0uMTYgMGExLjMzIDEuMzMgMCAwIDEtLjQgMCAuNjcuNjcgMCAwIDEtLjYxLS41OCAxLjI0IDEuMjQgMCAwIDEgLjE0LS41MSAxLjQ0IDEuNDQgMCAwIDEgLjYyLS42Ny43MS43MSAwIDAgMSAxIC4zOS43OC43OCAwIDAgMS0uMzggMS4xWm02LjE3LTUuOWEuMzYuMzYgMCAwIDAtLjIxLjI4bC0uMTYgMGExLjMzIDEuMzMgMCAwIDEtLjQgMCAuNjcuNjcgMCAwIDEtLjYxLS41OCAxLjI0IDEuMjQgMCAwIDEgLjE0LS41OCAxLjQ5IDEuNDkgMCAwIDEgLjYyLS42Ny43MS43MSAwIDAgMSAxIC4zOS43OC43OCAwIDAgMS0uMzggMS4xN1ptNS42MyA1LjlhLjM3LjM3IDAgMCAwLS4yMi4yOGwtLjE2IDBhMS4zNCAxLjM0IDAgMCAxLS40IDAgLjY3LjY3IDAgMCAxLS42MS0uNTggMS4yNCAxLjI0IDAgMCAxIC4xNC0uNTggMS40OSAxLjQ5IDAgMCAxIC42Mi0uNjcuNzEuNzEgMCAwIDEgMSAuMzkuNzguNzggMCAwIDEtLjM3IDEuMTdaIi8+PC9nPjwvc3ZnPg==;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"392.00074074074064\" y=\"146.00407407407403\" width=\"24\" height=\"24\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-15\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=#ffffff;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAYAAABNo9TkAAAEtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjEwMDAiCiAgIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAwIgogICBleGlmOkNvbG9yU3BhY2U9IjEiCiAgIHRpZmY6SW1hZ2VXaWR0aD0iMTAwMCIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMTAwMCIKICAgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMiIKICAgdGlmZjpYUmVzb2x1dGlvbj0iNzIvMSIKICAgdGlmZjpZUmVzb2x1dGlvbj0iNzIvMSIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0i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;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" vertex=\"1\">\n          <mxGeometry x=\"11\" y=\"142\" width=\"32\" height=\"32\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-16\" value=\"\" style=\"endArrow=classic;html=1;rounded=0;sketch=1;curveFitting=1;jiggle=2;\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"364\" y=\"157.81\" as=\"sourcePoint\" />\n            <mxPoint x=\"164\" y=\"159\" as=\"targetPoint\" />\n            <Array as=\"points\">\n              <mxPoint x=\"280\" y=\"159.31\" />\n            </Array>\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-17\" value=\"accesses\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontStyle=0\" parent=\"Qig_5n0r7LaK5z3JI_5E-16\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"0.0511\" y=\"1\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-1\" y=\"7\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"Qig_5n0r7LaK5z3JI_5E-18\" value=\"&lt;font style=&quot;font-size: 11px;&quot;&gt;&lt;span style=&quot;border-color: var(--border-color);&quot;&gt;Output Port&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;implements&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;Data Contract&lt;/span&gt;&lt;span style=&quot;font-size: 11px;&quot;&gt;&lt;br style=&quot;font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Architects Daughter;fontSize=11;sketch=1;curveFitting=1;jiggle=2;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;exitX=0.139;exitY=0.98;exitDx=0;exitDy=0;exitPerimeter=0;fontStyle=0\" parent=\"Qig_5n0r7LaK5z3JI_5E-3\" edge=\"1\">\n          <mxGeometry x=\"0.2916\" y=\"-46\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"156\" y=\"150\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n            <mxPoint x=\"232.89600000000002\" y=\"85.31999999999996\" as=\"sourcePoint\" />\n          </mxGeometry>\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n  <diagram name=\"Page-1\" id=\"X_6MlpqejpmknBVJp4-7\">\n    <mxGraphModel dx=\"813\" dy=\"505\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-0\" />\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-1\" parent=\"nPHzbOJu06x_J4uFuQ7s-0\" />\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-3\" value=\"\" style=\"endArrow=openThin;html=1;rounded=0;strokeWidth=3;endFill=0;endSize=12;fontFamily=Helvetica;fontSize=14;entryX=1;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" source=\"nPHzbOJu06x_J4uFuQ7s-13\" target=\"nPHzbOJu06x_J4uFuQ7s-12\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"490\" y=\"244\" as=\"sourcePoint\" />\n            <mxPoint x=\"290\" y=\"244\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-4\" value=\"accesses\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Helvetica;fontSize=12;fontStyle=2\" parent=\"nPHzbOJu06x_J4uFuQ7s-3\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.2083\" y=\"-2\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-23\" y=\"13\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-6\" value=\"\" style=\"group;fontFamily=Helvetica;fontSize=14;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"270\" y=\"80\" width=\"100\" height=\"190\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-8\" value=\"\" style=\"outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=14;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.document;fontFamily=Helvetica;\" parent=\"nPHzbOJu06x_J4uFuQ7s-6\" vertex=\"1\">\n          <mxGeometry x=\"15.5\" y=\"30\" width=\"57\" height=\"78\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-9\" value=\"&lt;b style=&quot;font-size: 14px;&quot;&gt;Data Contract&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=14;\" parent=\"nPHzbOJu06x_J4uFuQ7s-6\" vertex=\"1\">\n          <mxGeometry x=\"-10\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-10\" value=\"Data Product / &lt;br&gt;Dashboard /&lt;br&gt;ML Model\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontStyle=1;strokeWidth=3;fontSize=14;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"429\" y=\"210\" width=\"150.5\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-11\" value=\"Data Product\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontStyle=1;strokeWidth=3;fontSize=14;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"70\" y=\"210\" width=\"130\" height=\"70\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-12\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=Helvetica;fontSize=14;fontStyle=1\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"190\" y=\"240\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-7\" value=\"&lt;font size=&quot;1&quot; style=&quot;&quot;&gt;&lt;i style=&quot;font-size: 12px;&quot;&gt;Output Port &lt;br&gt;implements&lt;br&gt;Data Contract&lt;br&gt;&lt;/i&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Helvetica;fontSize=14;entryX=0.75;entryY=0;entryDx=0;entryDy=0;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" source=\"nPHzbOJu06x_J4uFuQ7s-8\" target=\"nPHzbOJu06x_J4uFuQ7s-12\" edge=\"1\">\n          <mxGeometry x=\"-0.2778\" y=\"-50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"334\" y=\"280\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"zLGpZdrHuFRKrRyMniQR-0\" value=\"&lt;font size=&quot;1&quot; style=&quot;&quot;&gt;&lt;i style=&quot;font-size: 12px;&quot;&gt;Input Port&lt;br&gt;verifies guarantees of&lt;br&gt;Data Contract&lt;br&gt;&lt;/i&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Helvetica;fontSize=14;entryX=0;entryY=0.5;entryDx=0;entryDy=0;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" target=\"nPHzbOJu06x_J4uFuQ7s-10\" edge=\"1\">\n          <mxGeometry x=\"-0.0754\" y=\"59\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"417\" y=\"238\" as=\"targetPoint\" />\n            <mxPoint y=\"-1\" as=\"offset\" />\n            <mxPoint x=\"341.3636363636365\" y=\"171.81818181818187\" as=\"sourcePoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"T7qRi6jxO7X6ZAV89mwV-0\" value=\"Data Provider\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"82.5\" y=\"280\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"T7qRi6jxO7X6ZAV89mwV-1\" value=\"Data Consumers\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"451.75\" y=\"280\" width=\"105\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"nPHzbOJu06x_J4uFuQ7s-13\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=3;fontFamily=Helvetica;fontSize=14;\" parent=\"nPHzbOJu06x_J4uFuQ7s-1\" vertex=\"1\">\n          <mxGeometry x=\"418\" y=\"240\" width=\"20\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n  <diagram name=\"Page-1-old\" id=\"rw52iN3RI7_N-30Trffw\">\n    <mxGraphModel dx=\"1434\" dy=\"777\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"0\" />\n        <mxCell id=\"1\" parent=\"0\" />\n        <mxCell id=\"P9Cuz6y3WnPzD-2V-0nz-7\" value=\"\" style=\"endArrow=oval;html=1;rounded=0;strokeWidth=3;endFill=1;endSize=12;exitX=1;exitY=0.5;exitDx=0;exitDy=0;fontFamily=Helvetica;fontSize=14;\" parent=\"1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"241.5\" y=\"244\" as=\"sourcePoint\" />\n            <mxPoint x=\"280\" y=\"244\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"P9Cuz6y3WnPzD-2V-0nz-8\" value=\"\" style=\"endArrow=blockThin;html=1;rounded=0;strokeWidth=1;endFill=1;endSize=12;fontFamily=Helvetica;fontSize=14;\" parent=\"1\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"421\" y=\"244.94075403949728\" as=\"sourcePoint\" />\n            <mxPoint x=\"290\" y=\"244\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"jS0f2Fy0fjrrh5SD6cMp-14\" value=\"uses\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Helvetica;fontSize=12;fontStyle=2\" vertex=\"1\" connectable=\"0\" parent=\"P9Cuz6y3WnPzD-2V-0nz-8\">\n          <mxGeometry x=\"-0.2083\" y=\"-2\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-11\" y=\"-10\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"wAe5mO1efpd-HIfeOpRS-3\" value=\"&lt;span style=&quot;font-size: 12px;&quot;&gt;Output Port&lt;/span&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontStyle=0;fontSize=12;\" parent=\"1\" vertex=\"1\">\n          <mxGeometry x=\"236\" y=\"254\" width=\"90\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"pzRm4fmMa1G69j8GTkhN-1\" value=\"\" style=\"group;fontFamily=Helvetica;fontSize=14;\" parent=\"1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"236.5\" y=\"43\" width=\"100\" height=\"190\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"P9Cuz6y3WnPzD-2V-0nz-18\" value=\"&lt;font size=&quot;1&quot; style=&quot;&quot;&gt;&lt;i style=&quot;font-size: 12px;&quot;&gt;implements&lt;/i&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;fontFamily=Helvetica;fontSize=14;\" parent=\"pzRm4fmMa1G69j8GTkhN-1\" source=\"P9Cuz6y3WnPzD-2V-0nz-9\" edge=\"1\">\n          <mxGeometry relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"44\" y=\"190\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"P9Cuz6y3WnPzD-2V-0nz-9\" value=\"\" style=\"outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=14;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.document;fontFamily=Helvetica;\" parent=\"pzRm4fmMa1G69j8GTkhN-1\" vertex=\"1\">\n          <mxGeometry x=\"15.5\" y=\"30\" width=\"57\" height=\"78\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"wAe5mO1efpd-HIfeOpRS-2\" value=\"&lt;b style=&quot;font-size: 14px;&quot;&gt;Data Contract&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Helvetica;fontSize=14;\" parent=\"pzRm4fmMa1G69j8GTkhN-1\" vertex=\"1\">\n          <mxGeometry x=\"-10\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"jS0f2Fy0fjrrh5SD6cMp-3\" value=\"Data Consumers\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontStyle=1;strokeWidth=3;fontSize=14;\" vertex=\"1\" parent=\"1\">\n          <mxGeometry x=\"421\" y=\"220\" width=\"150.5\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"jS0f2Fy0fjrrh5SD6cMp-2\" value=\"Data Product\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Helvetica;fontStyle=1;strokeWidth=3;fontSize=14;\" vertex=\"1\" parent=\"1\">\n          <mxGeometry x=\"110.5\" y=\"220\" width=\"130\" height=\"50\" as=\"geometry\" />\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n  <diagram name=\"Copy of Page-1\" id=\"Z6IpUlgI4tDOpO3_WMMA\">\n    <mxGraphModel dx=\"1434\" dy=\"777\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-0\" />\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-1\" parent=\"EQoE5bkQYzbtUaj6fDrX-0\" />\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-2\" value=\"\" style=\"endArrow=oval;html=1;rounded=0;strokeWidth=3;endFill=1;endSize=12;exitX=1;exitY=0.5;exitDx=0;exitDy=0;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" source=\"EQoE5bkQYzbtUaj6fDrX-12\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"232.5\" y=\"244\" as=\"sourcePoint\" />\n            <mxPoint x=\"280\" y=\"244\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-3\" value=\"\" style=\"endArrow=halfCircle;html=1;rounded=0;strokeWidth=3;endFill=0;endSize=12;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" source=\"EQoE5bkQYzbtUaj6fDrX-13\" edge=\"1\">\n          <mxGeometry width=\"50\" height=\"50\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"490\" y=\"244\" as=\"sourcePoint\" />\n            <mxPoint x=\"290\" y=\"244\" as=\"targetPoint\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-4\" value=\"Access\" style=\"edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];\" parent=\"EQoE5bkQYzbtUaj6fDrX-3\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"-0.2083\" y=\"-2\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"-11\" y=\"-10\" as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-5\" value=\"&lt;b&gt;Output&lt;br&gt;Port&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Verdana;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\">\n          <mxGeometry x=\"233.5\" y=\"260\" width=\"90\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-6\" value=\"\" style=\"group\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"236.5\" y=\"43\" width=\"100\" height=\"190\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-7\" value=\"&lt;font face=&quot;Verdana&quot;&gt;&lt;i&gt;implements&lt;/i&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;\" parent=\"EQoE5bkQYzbtUaj6fDrX-6\" source=\"EQoE5bkQYzbtUaj6fDrX-8\" edge=\"1\">\n          <mxGeometry relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"44\" y=\"190\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-8\" value=\"\" style=\"outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.document;\" parent=\"EQoE5bkQYzbtUaj6fDrX-6\" vertex=\"1\">\n          <mxGeometry x=\"15.5\" y=\"30\" width=\"57\" height=\"78\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-9\" value=\"&lt;b&gt;Data Contract&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Verdana;\" parent=\"EQoE5bkQYzbtUaj6fDrX-6\" vertex=\"1\">\n          <mxGeometry x=\"-10\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-10\" value=\"Data Consumers\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Verdana;fontStyle=1;strokeWidth=3;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\">\n          <mxGeometry x=\"490\" y=\"200\" width=\"150.5\" height=\"90\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-11\" value=\"Data Product\" style=\"rounded=0;whiteSpace=wrap;html=1;fontFamily=Verdana;fontStyle=1;strokeWidth=3;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\">\n          <mxGeometry x=\"103.5\" y=\"200\" width=\"130\" height=\"90\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-12\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=3;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\">\n          <mxGeometry x=\"225\" y=\"239\" width=\"16.5\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-13\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeWidth=3;\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\">\n          <mxGeometry x=\"482\" y=\"240\" width=\"16.5\" height=\"10\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-14\" value=\"\" style=\"group\" parent=\"EQoE5bkQYzbtUaj6fDrX-1\" vertex=\"1\" connectable=\"0\">\n          <mxGeometry x=\"350\" y=\"42\" width=\"100\" height=\"190\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-15\" value=\"&lt;font face=&quot;Verdana&quot;&gt;&lt;i&gt;granted by&lt;/i&gt;&lt;/font&gt;\" style=\"rounded=0;orthogonalLoop=1;jettySize=auto;html=1;dashed=1;startArrow=classic;startFill=1;endArrow=none;endFill=0;\" parent=\"EQoE5bkQYzbtUaj6fDrX-14\" source=\"EQoE5bkQYzbtUaj6fDrX-16\" edge=\"1\">\n          <mxGeometry x=\"0.1667\" y=\"6\" relative=\"1\" as=\"geometry\">\n            <mxPoint x=\"44\" y=\"180\" as=\"targetPoint\" />\n            <mxPoint as=\"offset\" />\n          </mxGeometry>\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-16\" value=\"\" style=\"outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.document;\" parent=\"EQoE5bkQYzbtUaj6fDrX-14\" vertex=\"1\">\n          <mxGeometry x=\"15.5\" y=\"30\" width=\"57\" height=\"78\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"EQoE5bkQYzbtUaj6fDrX-17\" value=\"&lt;b&gt;Data Usage Agreement&lt;/b&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Verdana;\" parent=\"EQoE5bkQYzbtUaj6fDrX-14\" vertex=\"1\">\n          <mxGeometry x=\"-10\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n  <diagram id=\"GCJAYJgI8XM5fRRC27EC\" name=\"Page-6\">\n    <mxGraphModel dx=\"1434\" dy=\"777\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"827\" pageHeight=\"1169\" math=\"0\" shadow=\"0\">\n      <root>\n        <mxCell id=\"0\" />\n        <mxCell id=\"1\" parent=\"0\" />\n        <mxCell id=\"W3zhj3CpL3qsaXSXOtj0-1\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;\" vertex=\"1\" parent=\"1\">\n          <mxGeometry x=\"300\" y=\"76\" width=\"120\" height=\"120\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"W3zhj3CpL3qsaXSXOtj0-11\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuMTQgNi45NGEuNzcuNzcgMCAwIDAtLjQ4LjJjLTEtLjgtMi4xNC0uMjUtMyAuNzJBMTYuMTIgMTYuMTIgMCAwIDAgMTYuMTUgMTBhLjI4LjI4IDAgMCAwIC40LjMyYy4wOCAwIDEuMzktMS4yMSAxLjQ3LTEuMjguNzMtLjY4IDEuMzUtMS40MiAxLjgxLTEuNDhzLjMyIDAgLjQxLjA5YTE5IDE5IDAgMCAwLTIuMDcgMi44MWMwIC4xMi0uMzEgMCAxLjUzIDEuNzFsLjI3LjI0QzE5IDEzLjU3IDE2IDE2LjczIDE1Ljc0IDE3YTIuNjYgMi42NiAwIDAgMS0xIC40MyAzLjcyIDMuNzIgMCAwIDEtLjIyLTEuNTJMMTcuNyAxMmEuMy4zIDAgMCAwLS40Ny0uMzdjLS43Mi44OC0zLjQ1IDMuMzktMy42OSAzLjkxYTQgNCAwIDAgMCAuMjggMi42MiAxIDEgMCAwIDAgLjkzLjMyIDQuMjYgNC4yNiAwIDAgMCAxLjc2LS42NWMuNi0uNjIgMy44Ni00Ljc5IDQuNjUtNS4zMWEyMCAyMCAwIDAgMCAxLjc3LTEuNjQgNC42NyA0LjY3IDAgMCAwIDEtMS4zN2MuNS0xLjU3LTEuODItMi42Ni0yLjc5LTIuNTdabTEuNjYgMi4zM2ExMi45IDEyLjkgMCAwIDEtMS41OCAxLjg4Yy0uOTEgMS0uNjUuNzQtMSAuNDYtMS41Mi0xLjI2LTEuMzMtMS0xLjI3LTEuMjFsMi0yLjE2Yy4zNC0uMzgtLjA2LS40NS43LS4xNS40NC4xNiAxLjQzLjYzIDEuMTUgMS4xOFoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwMjAyMDIiIGQ9Ik03LjIgMjIuNTNjLTEuNDgtLjI1LTEuNDgtMi4xMS0xLjYxLTMuNTNhNDAgNDAgMCAwIDEgLjE1LTYuNTdjLjE4LTIuNDYuNi0yLjI1LjU5LTUuNTEgMC0xLjczLS4zMy00LjA2LTEuNzktNWE0MC4yOSA0MC4yOSAwIDAgMSA2LjI0LjA4YzIuNjQuMTggNS43MS0uMTQgNi45MS42M0MxOS4yMyAzLjYzIDE4LjEyIDYgMTkgNmEuMzIuMzIgMCAwIDAgLjMxLS4zNmMtLjA2LTEuMzEuMjQtMi40NC0uODEtMy40NEE1LjgyIDUuODIgMCAwIDAgMTQuNzYgMWE3NS40NiA3NS40NiAwIDAgMC04LjU3IDBDNS43NyAxIDEuNiAxLjUgMSAyLjA4QTMuMTcgMy4xNyAwIDAgMCAwIDQuNSA0LjYxIDQuNjEgMCAwIDAgLjcyIDdhMS45MiAxLjkyIDAgMCAwIC45My42MmMxIC4zMSAzLjI0LjI1IDIuODYtLjU1QzQuNCA2LjggMy4xOSA3IDMuMTEgN2EyLjM1IDIuMzUgMCAwIDEtMS43Ny0uNTYgMy43NyAzLjc3IDAgMCAxLS40OC0yIDIuMzEgMi4zMSAwIDAgMSAuNzYtMS43MyAzLjU0IDMuNTQgMCAwIDEgMS4yNy0uMzFjMS4xMSAwIDEuNjQuNjYgMiAxLjczYTE0LjEzIDE0LjEzIDAgMCAxIC4zIDQuNDYgMzMgMzMgMCAwIDAtLjU1IDdjMCAxLjQzLjE5IDUgLjg0IDYuMjJhMi4xIDIuMSAwIDAgMCAxLjY3IDEuMjQuMy4zIDAgMCAwIC4wNS0uNTJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuODUgMTkuNTRhOCA4IDAgMCAxLTEuNzEtMy4xOS4yOS4yOSAwIDEgMC0uNTcuMTVjLjc1IDMuMzMgMi4xOCA0IDIuNzkgNC43OS0uMzQuMDgtMTMuMjYgMS4xLTE0IDFhLjMzLjMzIDAgMSAwLS4wOS42NmMxLjYxLjI2IDEwLjU5LS4yMiAxMy4xLS40OWEzIDMgMCAwIDAgMi0uNjVjLjYzLS42Ny0uNzEtMS40Ny0xLjUyLTIuMjdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNOS42NyAxNi44NmMuMzkgMCAuNDYuODQuNSAxLjI2IDAgLjEzLS4wNy43OC4zNS45NWEuNTEuNTEgMCAwIDAgLjQ1IDBjMS42My0uODUuOTMtLjE4IDEuNDYtLjE4LjY4IDAgLjU2LTEuMzktMS4yNS0xIDAtMS4yNC0uMzQtMi4yOS0xLjU5LTIuMmEyLjc1IDIuNzUgMCAwIDAtMi4xOCAxLjgxIDMuOTIgMy45MiAwIDAgMC0uMzQgMS4wNWMuMTEgMS44NC44Ni0xLjY4IDIuNi0xLjY5WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTguNTcgOC40MWM1LjI4LjE5IDIuMzIgMCA2LjA4IDBhLjM0LjM0IDAgMCAwIC4zNS0uMzUuNDcuNDcgMCAwIDAtLjM5LS4zN2MtLjI4LS4wNi0yLjEtLjMtMi45NC0uMzNhMTcuODQgMTcuODQgMCAwIDAtMy44NC40OC4zMS4zMSAwIDAgMCAuMi41M2MuMDkuMDIuNDguMDQuNTQuMDRaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTMuMjIgMTEuNjRjLTUuMi0uMTUtNS40OS4xMi01LjU3LjM0YS4zLjMgMCAwIDAgLjE3LjM4IDEuMjMgMS4yMyAwIDAgMCAuNDQuMWMuODQuMDYgNy4yOC4zOCA3LjI0LS40Mi0uMDMtLjU4LTEuMzctLjMzLTIuMjgtLjRaIi8+PC9nPjwvc3ZnPg==;\" vertex=\"1\" parent=\"1\">\n          <mxGeometry x=\"325\" y=\"114\" width=\"64\" height=\"64\" as=\"geometry\" />\n        </mxCell>\n        <mxCell id=\"W3zhj3CpL3qsaXSXOtj0-12\" value=\"&lt;span style=&quot;font-size: 14px;&quot;&gt;Data Contract&lt;/span&gt;\" style=\"text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontFamily=Architects Daughter;fontSize=14;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;fontStyle=1\" vertex=\"1\" parent=\"1\">\n          <mxGeometry x=\"306\" y=\"84\" width=\"110\" height=\"30\" as=\"geometry\" />\n        </mxCell>\n      </root>\n    </mxGraphModel>\n  </diagram>\n</mxfile>\n"
  },
  {
    "path": "diagrams/favicon.drawio",
    "content": "<mxfile host=\"drawio-plugin\" modified=\"2024-03-12T19:44:32.908Z\" agent=\"5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36\" etag=\"6Vm3cRgF31sPSZWrPnWF\" version=\"20.5.3\" type=\"embed\"><diagram id=\"kInGxmZcZrfjWZAlfeYu\" name=\"favicon\"><mxGraphModel dx=\"453\" dy=\"335\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"850\" pageHeight=\"1100\" math=\"0\" shadow=\"0\"><root><mxCell id=\"0\"/><mxCell id=\"1\" parent=\"0\"/><mxCell id=\"YRng2BdQL5EzaOKXYbcf-11\" value=\"\" style=\"rounded=0;whiteSpace=wrap;html=1;strokeColor=none;aspect=fixed;\" parent=\"1\" vertex=\"1\"><mxGeometry x=\"310\" y=\"160\" width=\"132\" height=\"132\" as=\"geometry\"/></mxCell><mxCell id=\"i0YVFEnGLsnd7Nj5DuEs-1\" value=\"\" style=\"shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/svg+xml,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PGc+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuMTQgNi45NGEuNzcuNzcgMCAwIDAtLjQ4LjJjLTEtLjgtMi4xNC0uMjUtMyAuNzJBMTYuMTIgMTYuMTIgMCAwIDAgMTYuMTUgMTBhLjI4LjI4IDAgMCAwIC40LjMyYy4wOCAwIDEuMzktMS4yMSAxLjQ3LTEuMjguNzMtLjY4IDEuMzUtMS40MiAxLjgxLTEuNDhzLjMyIDAgLjQxLjA5YTE5IDE5IDAgMCAwLTIuMDcgMi44MWMwIC4xMi0uMzEgMCAxLjUzIDEuNzFsLjI3LjI0QzE5IDEzLjU3IDE2IDE2LjczIDE1Ljc0IDE3YTIuNjYgMi42NiAwIDAgMS0xIC40MyAzLjcyIDMuNzIgMCAwIDEtLjIyLTEuNTJMMTcuNyAxMmEuMy4zIDAgMCAwLS40Ny0uMzdjLS43Mi44OC0zLjQ1IDMuMzktMy42OSAzLjkxYTQgNCAwIDAgMCAuMjggMi42MiAxIDEgMCAwIDAgLjkzLjMyIDQuMjYgNC4yNiAwIDAgMCAxLjc2LS42NWMuNi0uNjIgMy44Ni00Ljc5IDQuNjUtNS4zMWEyMCAyMCAwIDAgMCAxLjc3LTEuNjQgNC42NyA0LjY3IDAgMCAwIDEtMS4zN2MuNS0xLjU3LTEuODItMi42Ni0yLjc5LTIuNTdabTEuNjYgMi4zM2ExMi45IDEyLjkgMCAwIDEtMS41OCAxLjg4Yy0uOTEgMS0uNjUuNzQtMSAuNDYtMS41Mi0xLjI2LTEuMzMtMS0xLjI3LTEuMjFsMi0yLjE2Yy4zNC0uMzgtLjA2LS40NS43LS4xNS40NC4xNiAxLjQzLjYzIDEuMTUgMS4xOFoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiMwMjAyMDIiIGQ9Ik03LjIgMjIuNTNjLTEuNDgtLjI1LTEuNDgtMi4xMS0xLjYxLTMuNTNhNDAgNDAgMCAwIDEgLjE1LTYuNTdjLjE4LTIuNDYuNi0yLjI1LjU5LTUuNTEgMC0xLjczLS4zMy00LjA2LTEuNzktNWE0MC4yOSA0MC4yOSAwIDAgMSA2LjI0LjA4YzIuNjQuMTggNS43MS0uMTQgNi45MS42M0MxOS4yMyAzLjYzIDE4LjEyIDYgMTkgNmEuMzIuMzIgMCAwIDAgLjMxLS4zNmMtLjA2LTEuMzEuMjQtMi40NC0uODEtMy40NEE1LjgyIDUuODIgMCAwIDAgMTQuNzYgMWE3NS40NiA3NS40NiAwIDAgMC04LjU3IDBDNS43NyAxIDEuNiAxLjUgMSAyLjA4QTMuMTcgMy4xNyAwIDAgMCAwIDQuNSA0LjYxIDQuNjEgMCAwIDAgLjcyIDdhMS45MiAxLjkyIDAgMCAwIC45My42MmMxIC4zMSAzLjI0LjI1IDIuODYtLjU1QzQuNCA2LjggMy4xOSA3IDMuMTEgN2EyLjM1IDIuMzUgMCAwIDEtMS43Ny0uNTYgMy43NyAzLjc3IDAgMCAxLS40OC0yIDIuMzEgMi4zMSAwIDAgMSAuNzYtMS43MyAzLjU0IDMuNTQgMCAwIDEgMS4yNy0uMzFjMS4xMSAwIDEuNjQuNjYgMiAxLjczYTE0LjEzIDE0LjEzIDAgMCAxIC4zIDQuNDYgMzMgMzMgMCAwIDAtLjU1IDdjMCAxLjQzLjE5IDUgLjg0IDYuMjJhMi4xIDIuMSAwIDAgMCAxLjY3IDEuMjQuMy4zIDAgMCAwIC4wNS0uNTJaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMDIwMjAyIiBkPSJNMjEuODUgMTkuNTRhOCA4IDAgMCAxLTEuNzEtMy4xOS4yOS4yOSAwIDEgMC0uNTcuMTVjLjc1IDMuMzMgMi4xOCA0IDIuNzkgNC43OS0uMzQuMDgtMTMuMjYgMS4xLTE0IDFhLjMzLjMzIDAgMSAwLS4wOS42NmMxLjYxLjI2IDEwLjU5LS4yMiAxMy4xLS40OWEzIDMgMCAwIDAgMi0uNjVjLjYzLS42Ny0uNzEtMS40Ny0xLjUyLTIuMjdaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNOS42NyAxNi44NmMuMzkgMCAuNDYuODQuNSAxLjI2IDAgLjEzLS4wNy43OC4zNS45NWEuNTEuNTEgMCAwIDAgLjQ1IDBjMS42My0uODUuOTMtLjE4IDEuNDYtLjE4LjY4IDAgLjU2LTEuMzktMS4yNS0xIDAtMS4yNC0uMzQtMi4yOS0xLjU5LTIuMmEyLjc1IDIuNzUgMCAwIDAtMi4xOCAxLjgxIDMuOTIgMy45MiAwIDAgMC0uMzQgMS4wNWMuMTEgMS44NC44Ni0xLjY4IDIuNi0xLjY5WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iIzBjNmZmZiIgZD0iTTguNTcgOC40MWM1LjI4LjE5IDIuMzIgMCA2LjA4IDBhLjM0LjM0IDAgMCAwIC4zNS0uMzUuNDcuNDcgMCAwIDAtLjM5LS4zN2MtLjI4LS4wNi0yLjEtLjMtMi45NC0uMzNhMTcuODQgMTcuODQgMCAwIDAtMy44NC40OC4zMS4zMSAwIDAgMCAuMi41M2MuMDkuMDIuNDguMDQuNTQuMDRaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMGM2ZmZmIiBkPSJNMTMuMjIgMTEuNjRjLTUuMi0uMTUtNS40OS4xMi01LjU3LjM0YS4zLjMgMCAwIDAgLjE3LjM4IDEuMjMgMS4yMyAwIDAgMCAuNDQuMWMuODQuMDYgNy4yOC4zOCA3LjI0LS40Mi0uMDMtLjU4LTEuMzctLjMzLTIuMjgtLjRaIi8+PC9nPjwvc3ZnPg==;\" parent=\"1\" vertex=\"1\"><mxGeometry x=\"314.5\" y=\"164.5\" width=\"123\" height=\"123\" as=\"geometry\"/></mxCell></root></mxGraphModel></diagram></mxfile>"
  },
  {
    "path": "examples/covid-cases/datacontract.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.visible {\n  visibility: visible;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mb-6 {\n  margin-bottom: 1.5rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-2 {\n  width: 0.5rem;\n}\n\n.w-2\\/12 {\n  width: 16.666667%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-9\\/12 {\n  width: 75%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.items-baseline {\n  align-items: baseline;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(2rem * var(--tw-space-x-reverse));\n  margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.bg-blue-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(224 231 255 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-yellow-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-0 {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-2\\.5 {\n  padding-left: 0.625rem;\n  padding-right: 0.625rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-0 {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n\n.py-0\\.5 {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-1\\.5 {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-3 {\n  padding-left: 0.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.font-mono {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.italic {\n  font-style: italic;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-yellow-600 {\n  --tw-text-opacity: 1;\n  color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-blue-500\\/10 {\n  --tw-ring-color: rgb(59 130 246 / 0.1);\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-yellow-500\\/10 {\n  --tw-ring-color: rgb(234 179 8 / 0.1);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.placeholder\\:text-gray-400::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-400::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-inset:focus {\n  --tw-ring-inset: inset;\n}\n\n.focus\\:ring-indigo-600:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:w-72 {\n    width: 18rem;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-6 {\n    line-height: 1.5rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl sm:px-6 lg:px-8\">\n      <div>\n        <div class=\"md:flex md:items-center md:justify-between px-4 sm:px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract</h2>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              covid_cases\n            </div>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              \n            </div>\n          </div>\n          <div class=\"mt-5 flex lg:mt-0 lg:ml-4 gap-3 items-center\">\n            <button\n              type=\"button\"\n              onclick=\"document.getElementById('dialog-datacontract-yaml').showModal()\"\n              class=\"inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50\">\n              <svg class=\"-ml-0.5 mr-1.5 h-5 w-5 text-gray-600\" viewBox=\"-0.5 -0.5 24 24\">\n                <path d=\"m4.3125 8.145833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 11.020833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 5.270833333333334 6.708333333333334 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 13.895833333333334 7.1875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 16.770833333333336 3.8333333333333335 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"M8.145833333333334 22.520833333333336h-6.708333333333334a0.9583333333333334 0.9583333333333334 0 0 1 -0.9583333333333334 -0.9583333333333334v-20.125a0.9583333333333334 0.9583333333333334 0 0 1 0.9583333333333334 -0.9583333333333334h12.739125a0.9583333333333334 0.9583333333333334 0 0 1 0.6775416666666667 0.28079166666666666L18.406708333333334 4.3125a0.9583333333333334 0.9583333333333334 0 0 1 0.28079166666666666 0.6775416666666667V8.145833333333334\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m15.045833333333333 21.370833333333334 -4.025 1.15 1.15 -4.025 6.879875 -6.879875a2.032625 2.032625 0 0 1 2.875 2.875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m18.188208333333332 12.478458333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m12.170833333333333 18.495833333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path>\n              </svg>\n              Show YAML\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"space-y-6 mt-6\">\n          <section id=\"information\">\n            <div class=\" px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"info\">Info</h1>\n  <p class=\"text-sm text-gray-500\">Information about the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    \n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Title</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">COVID-19 cases</dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Version</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">0.0.1</dd>\n      </div>\n\n      \n\n      \n      <div class=\"sm:col-span-2\">\n        <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Johns Hopkins University Consolidated data on COVID-19 cases, sourced from Enigma</span>\n        </dd>\n      </div>\n      \n\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">links</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">{'blog': 'https://aws.amazon.com/blogs/big-data/a-public-data-lake-for-analysis-of-covid-19-data/', 'data-explorer': 'https://dj2taa9i652rf.cloudfront.net/', 'data': 'https://covid19-lake.s3.us-east-2.amazonaws.com/enigma-jhu/json/part-00000-adec1cd2-96df-4c6b-a5f2-780f092951ba-c000.json'}</dd>\n      </div>\n      \n\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n\n\n          \n          <section id=\"servers\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"servers\">Servers</h1>\n              <p class=\"text-sm text-gray-500\">Servers of the data contract</p>\n            </div>\n\n            <ul role=\"list\" class=\"mt-2 divide-y divide-gray-100 overflow-hidden bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-lg\">\n\n              \n                <li class=\"relative flex gap-x-6 px-4 py-5 sm:px-6\">\n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Server</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">s3-json</dd>\n      </div>\n    </div>\n  </div>\n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Type</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">s3</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Location</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">s3://covid19-lake/enigma-jhu/json/*.json</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Format</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">json</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Delimiter</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">new_line</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n</li>\n              \n\n            </ul>\n\n          </section>\n          \n\n\n          \n\n\n          <section id=\"models\">\n            <div class=\"flex justify-between\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Data Model\n                </h1>\n                <p class=\"text-sm text-gray-500\">The logical data model</p>\n              </div>\n            </div>\n\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>covid_cases</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">the number of confirmed covid cases reported for a specified region, with location and county/province/country information.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">fips</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    string\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">state and county two digits code</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">admin2</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    string\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">county name</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">province_state</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    string\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">province name or state name</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">country_region</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    string\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">country name or region name</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">last_update</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    timestamp_ntz\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">last update timestamp</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">latitude</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    double\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">location (latitude)</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">longitude</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    double\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">location (longitude)</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">confirmed</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    int\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">number of confirmed cases</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">combined_key</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    string\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">county name+state name+country name</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n          </section>\n\n          \n\n          \n\n          \n\n          \n            <section id=\"quality\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Quality\n                </h1>\n                <p class=\"text-sm text-gray-500\">\n                  <span>SodaCL</span>\n                </p>\n              </div>\n              <div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n                <div class=\"px-4 py-5 sm:px-6\">\n                  <div id=\"schema-specification\" >\n                      <pre><code class=\"text-sm\">checks for covid_cases:\n- freshness(last_update::datetime) < 5000d\n- row_count > 1000\n</code></pre>\n                  </div>\n                </div>\n              </div>\n            </section>\n          \n\n        </div>\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 27 Jun 2024 14:50:11 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.8\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code>dataContractSpecification: 0.9.3\nid: covid_cases\ninfo:\n  title: COVID-19 cases\n  version: 0.0.1\n  description: Johns Hopkins University Consolidated data on COVID-19 cases, sourced\n    from Enigma\n  links:\n    blog: https://aws.amazon.com/blogs/big-data/a-public-data-lake-for-analysis-of-covid-19-data/\n    data-explorer: https://dj2taa9i652rf.cloudfront.net/\n    data: https://covid19-lake.s3.us-east-2.amazonaws.com/enigma-jhu/json/part-00000-adec1cd2-96df-4c6b-a5f2-780f092951ba-c000.json\nservers:\n  s3-json:\n    type: s3\n    format: json\n    delimiter: new_line\n    location: s3://covid19-lake/enigma-jhu/json/*.json\nmodels:\n  covid_cases:\n    description: the number of confirmed covid cases reported for a specified region,\n      with location and county/province/country information.\n    type: table\n    fields:\n      fips:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: state and county two digits code\n      admin2:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: county name\n      province_state:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: province name or state name\n      country_region:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: country name or region name\n      last_update:\n        type: timestamp_ntz\n        required: false\n        primary: false\n        unique: false\n        description: last update timestamp\n      latitude:\n        type: double\n        required: false\n        primary: false\n        unique: false\n        description: location (latitude)\n      longitude:\n        type: double\n        required: false\n        primary: false\n        unique: false\n        description: location (longitude)\n      confirmed:\n        type: int\n        required: false\n        primary: false\n        unique: false\n        description: number of confirmed cases\n      combined_key:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: county name+state name+country name\nquality:\n  type: SodaCL\n  specification:\n    checks for covid_cases:\n    - freshness(last_update::datetime) < 5000d\n    - row_count > 1000\n</code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n</body>\n</html>"
  },
  {
    "path": "examples/covid-cases/datacontract.yaml",
    "content": "dataContractSpecification: 0.9.3\nid: covid_cases\ninfo:\n  title: COVID-19 cases\n  description: Johns Hopkins University Consolidated data on COVID-19 cases, sourced from Enigma\n  version: \"0.0.1\"\n  links:\n    blog: https://aws.amazon.com/blogs/big-data/a-public-data-lake-for-analysis-of-covid-19-data/\n    data-explorer: https://dj2taa9i652rf.cloudfront.net/\n    data: https://covid19-lake.s3.us-east-2.amazonaws.com/enigma-jhu/json/part-00000-adec1cd2-96df-4c6b-a5f2-780f092951ba-c000.json\nservers:\n  s3-json:\n    type: s3\n    location: s3://covid19-lake/enigma-jhu/json/*.json\n    format: json\n    delimiter: new_line\nmodels:\n  covid_cases:\n    description: the number of confirmed covid cases reported for a specified region, with location and county/province/country information.\n    fields:\n      fips:\n        type: string\n        description: state and county two digits code\n      admin2:\n        type: string\n        description: county name\n      province_state:\n        type: string\n        description: province name or state name\n      country_region:\n        type: string\n        description: country name or region name\n      last_update:\n        type: timestamp_ntz\n        description: last update timestamp\n      latitude:\n        type: double\n        description: location (latitude)\n      longitude:\n        type: double\n        description: location (longitude)\n      confirmed:\n        type: int\n        description: number of confirmed cases\n      combined_key:\n        type: string\n        description: county name+state name+country name\nquality:\n  type: SodaCL\n  specification:\n    checks for covid_cases:\n      - freshness(last_update::datetime) < 5000d   # dataset is not updated anymore\n      - row_count > 1000\n"
  },
  {
    "path": "examples/datacontract.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-16 {\n  width: 4rem;\n}\n\n.w-3\\/12 {\n  width: 25%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.filter {\n  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl sm:px-6 lg:px-8\">\n      <div>\n        <div class=\"md:flex md:items-center md:justify-between px-4 sm:px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract</h2>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              covid_cases\n            </div>\n          </div>\n          <div class=\"mt-5 flex lg:mt-0 lg:ml-4 gap-3 items-center\">\n            <button\n              type=\"button\"\n              onclick=\"document.getElementById('dialog-datacontract-yaml').showModal()\"\n              class=\"inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50\">\n              <svg class=\"-ml-0.5 mr-1.5 h-5 w-5 text-gray-600\" viewBox=\"-0.5 -0.5 24 24\">\n                <path d=\"m4.3125 8.145833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 11.020833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 5.270833333333334 6.708333333333334 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 13.895833333333334 7.1875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 16.770833333333336 3.8333333333333335 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"M8.145833333333334 22.520833333333336h-6.708333333333334a0.9583333333333334 0.9583333333333334 0 0 1 -0.9583333333333334 -0.9583333333333334v-20.125a0.9583333333333334 0.9583333333333334 0 0 1 0.9583333333333334 -0.9583333333333334h12.739125a0.9583333333333334 0.9583333333333334 0 0 1 0.6775416666666667 0.28079166666666666L18.406708333333334 4.3125a0.9583333333333334 0.9583333333333334 0 0 1 0.28079166666666666 0.6775416666666667V8.145833333333334\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m15.045833333333333 21.370833333333334 -4.025 1.15 1.15 -4.025 6.879875 -6.879875a2.032625 2.032625 0 0 1 2.875 2.875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m18.188208333333332 12.478458333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m12.170833333333333 18.495833333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path>\n              </svg>\n              Show YAML\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"space-y-6 mt-6\">\n          <section>\n            <div class=\" px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"info\">Info</h1>\n              <p class=\"text-sm text-gray-500\">Information about the data contract</p>\n            </div>\n            <div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n              <div class=\"px-4 py-5 sm:px-6\">\n\n                <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n                  <div class=\"sm:col-span-1\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Title</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">COVID-19 cases</dd>\n                  </div>\n\n                  <div class=\"sm:col-span-1\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Version</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">0.0.1</dd>\n                  </div>\n\n                  \n                  <div class=\"sm:col-span-2\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\" >\n                      <span class=\"whitespace-pre-wrap\">Johns Hopkins University Consolidated data on COVID-19 cases, sourced from Enigma</span>\n                    </dd>\n                  </div>\n                  \n\n                  \n\n                  \n\n                </dl>\n              </div>\n            </div>\n          </section>\n\n\n          \n          <section>\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"servers\">Servers</h1>\n              <p class=\"text-sm text-gray-500\">Servers of the data contract</p>\n            </div>\n\n            <ul role=\"list\" class=\"mt-2 divide-y divide-gray-100 overflow-hidden bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-lg\">\n\n              \n              <li class=\"relative flex gap-x-6 px-4 py-5 sm:px-6\">\n                <div class=\"flex items-center gap-x-4\">\n                  <div class=\"hidden sm:flex sm:flex-col\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Server</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">s3-json</dd>\n                  </div>\n                </div>\n\n                \n                <div class=\"flex items-center gap-x-4\">\n                  <div class=\"hidden sm:flex sm:flex-col\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Type</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">s3</dd>\n                  </div>\n                </div>\n                \n\n                \n\n                \n\n                \n                <div class=\"flex items-center gap-x-4\">\n                  <div class=\"hidden sm:flex sm:flex-col\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Location</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">s3://covid19-lake/enigma-jhu/json/*.json</dd>\n                  </div>\n                </div>\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n\n                \n                <div class=\"flex items-center gap-x-4\">\n                  <div class=\"hidden sm:flex sm:flex-col\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Format</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">json</dd>\n                  </div>\n                </div>\n                \n\n                \n                <div class=\"flex items-center gap-x-4\">\n                  <div class=\"hidden sm:flex sm:flex-col\">\n                    <dt class=\"text-sm font-medium text-gray-500\">Delimiter</dt>\n                    <dd class=\"mt-1 text-sm text-gray-900\">new_line</dd>\n                  </div>\n                </div>\n                \n\n              </li>\n              \n\n            </ul>\n\n          </section>\n          \n\n\n          \n\n\n          <section id=\"models\">\n            <div class=\"flex justify-between\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Data Model\n                </h1>\n                <p class=\"text-sm text-gray-500\">The logical data model</p>\n              </div>\n            </div>\n\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"4\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>covid_cases</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">the number of confirmed covid cases reported for a specified region, with location and county/province/country information.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            fips\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          string\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">state and county two digits code</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            admin2\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          string\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">county name</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            province_state\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          string\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">province name or state name</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            country_region\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          string\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">country name or region name</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            last_update\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          timestamp_ntz\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">last update timestamp</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            latitude\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          double\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">location (latitude)</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            longitude\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          double\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">location (longitude)</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            confirmed\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          int\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">number of confirmed cases</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      <tr>\n                        <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-3/12\">\n                          <div class=\"py-2 text-sm\">\n                            combined_key\n                            \n                          </div>\n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-16\">\n                          \n                          \n                        </td>\n                        <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                          \n                          string\n                          \n                        </td>\n                        <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n                          <div class=\"text-gray-400\">county name+state name+country name</div>\n                          \n                        </td>\n\n                      </tr>\n                      \n\n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n\n          </section>\n\n          \n\n          \n\n          \n            <section id=\"quality\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Quality\n                </h1>\n                <p class=\"text-sm text-gray-500\">\n                  <span>SodaCL</span>\n                </p>\n\n\n              </div>\n              <div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n                <div class=\"px-4 py-5 sm:px-6\">\n                  <div id=\"schema-specification\" >\n                      <pre><code class=\"text-sm\">checks for covid_cases:\n- freshness(last_update::datetime) < 5000d\n- row_count > 1000\n</code></pre>\n                  </div>\n                </div>\n              </div>\n            </section>\n          \n\n        </div>\n\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 29 Apr 2024 19:30:08 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.1\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code>dataContractSpecification: 0.9.3\nid: covid_cases\ninfo:\n  title: COVID-19 cases\n  version: 0.0.1\n  description: Johns Hopkins University Consolidated data on COVID-19 cases, sourced\n    from Enigma\nservers:\n  s3-json:\n    type: s3\n    format: json\n    delimiter: new_line\n    location: s3://covid19-lake/enigma-jhu/json/*.json\nmodels:\n  covid_cases:\n    description: the number of confirmed covid cases reported for a specified region,\n      with location and county/province/country information.\n    type: table\n    fields:\n      fips:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: state and county two digits code\n      admin2:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: county name\n      province_state:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: province name or state name\n      country_region:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: country name or region name\n      last_update:\n        type: timestamp_ntz\n        required: false\n        primary: false\n        unique: false\n        description: last update timestamp\n      latitude:\n        type: double\n        required: false\n        primary: false\n        unique: false\n        description: location (latitude)\n      longitude:\n        type: double\n        required: false\n        primary: false\n        unique: false\n        description: location (longitude)\n      confirmed:\n        type: int\n        required: false\n        primary: false\n        unique: false\n        description: number of confirmed cases\n      combined_key:\n        type: string\n        required: false\n        primary: false\n        unique: false\n        description: county name+state name+country name\nquality:\n  type: SodaCL\n  specification:\n    checks for covid_cases:\n    - freshness(last_update::datetime) < 5000d\n    - row_count > 1000\n</code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n</body>\n</html>"
  },
  {
    "path": "examples/generate-catalog",
    "content": "datacontract catalog --files \"**/*.yaml\" --output \".\"\n"
  },
  {
    "path": "examples/index.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.visible {\n  visibility: visible;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mb-6 {\n  margin-bottom: 1.5rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-2 {\n  width: 0.5rem;\n}\n\n.w-2\\/12 {\n  width: 16.666667%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-9\\/12 {\n  width: 75%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.items-baseline {\n  align-items: baseline;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(2rem * var(--tw-space-x-reverse));\n  margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.bg-blue-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(224 231 255 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-yellow-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-0 {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-2\\.5 {\n  padding-left: 0.625rem;\n  padding-right: 0.625rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-0 {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n\n.py-0\\.5 {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-1\\.5 {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-3 {\n  padding-left: 0.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.font-mono {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.italic {\n  font-style: italic;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-yellow-600 {\n  --tw-text-opacity: 1;\n  color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-blue-500\\/10 {\n  --tw-ring-color: rgb(59 130 246 / 0.1);\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-yellow-500\\/10 {\n  --tw-ring-color: rgb(234 179 8 / 0.1);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.placeholder\\:text-gray-400::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-400::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-inset:focus {\n  --tw-ring-inset: inset;\n}\n\n.focus\\:ring-indigo-600:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:w-72 {\n    width: 18rem;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-6 {\n    line-height: 1.5rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl px-6 lg:px-8\">\n      <div>\n        <div class=\"lg:flex lg:items-center lg:justify-between px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract Catalog</h2>\n          </div>\n        </div>\n\n\n      </div>\n\n      <div>\n\n        <div class=\"space-y-6 mt-6\">\n\n          <section id=\"catalog\">\n\n            \n\n            <form aria-labelledby=\"filter-heading\" class=\"pb-4\" >\n              <h2 id=\"filter-heading\" class=\"sr-only\">Filters</h2>\n              <div class=\"sm:flex items-center justify-between\">\n                <div class=\"sm:flex items-baseline space-x-8\">\n                  <div>\n                    <div class=\"relative rounded-md shadow-sm\">\n                      <div class=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3\">\n                        <svg class=\"pointer-events-none absolute h-5 w-5 text-gray-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n                          <path fill-rule=\"evenodd\" d=\"M9 3.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11zM2 9a7 7 0 1112.452 4.391l3.328 3.329a.75.75 0 11-1.06 1.06l-3.329-3.328A7 7 0 012 9z\" clip-rule=\"evenodd\" />\n                        </svg>\n                      </div>\n                      <input type=\"text\" name=\"q\" id=\"search\" class=\"block w-full sm:w-72 rounded-md border-0 py-1.5 pl-10 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6\" placeholder=\"Search\">\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </form>\n            \n\n\n            <ul role=\"list\" class=\"grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3 \">\n\n              \n\n              <li class=\"col-span-1 rounded-lg bg-white shadow hover:bg-gray-50\"\n                  data-search=\"orders latest (nested) checkout team successful customer orders in the webshop. \nall orders since 2020-01-01. \norders with their line items are in their current state (no history included).\n \n      one record per order. includes cancelled and deleted orders. \n        order_id an internal id that identifies an order in the online shop. \n        order_timestamp the business timestamp in utc when the order was successfully registered in the source system and the payment was successful. \n        order_total total amount the smallest monetary unit (e.g., cents). \n        customer_id unique identifier for the customer. \n        customer_email_address the email address, as entered by the customer. the email address was not verified. \n        address the delivery address of the customer. \n        processed_timestamp the timestamp when the record was processed by the data platform. \n    \n      a single article that is part of an order. \n        lines_item_id primary key of the lines_item_id table \n        order_id an internal id that identifies an order in the online shop. \n        sku the purchased article number \n    \n  \">\n                <a href=\"orders-latest-nested/datacontract.html\" >\n                  <div class=\"flex w-full justify-between space-x-1 p-6 pb-4\">\n                    <div class=\"flex-1 truncate\">\n                      <div class=\"flex items-center space-x-3\">\n                        <h3 class=\"truncate text-sm font-medium text-gray-900\">Orders Latest (Nested)</h3>\n                      </div>\n                      <div class=\"flex flex-wrap mt-1 text-sm text-gray-500 gap-1\">\n                        \n                        <div class=\"flex items-center text-sm text-gray-500\">\n                          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.25\" stroke=\"currentColor\" class=\"w-4 h-4 mr-1.5\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z\" />\n                          </svg>\n                          <span>Checkout Team</span>\n                        </div>\n                        \n                      </div>\n\n                    </div>\n                    <div class=\"h-10 w-10 flex-shrink-0 rounded-full\">\n                      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g><path d=\"M21.14 6.94a.77.77 0 0 0-.48.2c-1-.8-2.14-.25-3 .72A16.12 16.12 0 0 0 16.15 10a.28.28 0 0 0 .4.32c.08 0 1.39-1.21 1.47-1.28.73-.68 1.35-1.42 1.81-1.48s.32 0 .41.09a19 19 0 0 0-2.07 2.81c0 .12-.31 0 1.53 1.71l.27.24C19 13.57 16 16.73 15.74 17a2.66 2.66 0 0 1-1 .43 3.72 3.72 0 0 1-.22-1.52L17.7 12a.3.3 0 0 0-.47-.37c-.72.88-3.45 3.39-3.69 3.91a4 4 0 0 0 .28 2.62 1 1 0 0 0 .93.32 4.26 4.26 0 0 0 1.76-.65c.6-.62 3.86-4.79 4.65-5.31a20 20 0 0 0 1.77-1.64 4.67 4.67 0 0 0 1-1.37c.5-1.57-1.82-2.66-2.79-2.57Zm1.66 2.33a12.9 12.9 0 0 1-1.58 1.88c-.91 1-.65.74-1 .46-1.52-1.26-1.33-1-1.27-1.21l2-2.16c.34-.38-.06-.45.7-.15.44.16 1.43.63 1.15 1.18Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M7.2 22.53c-1.48-.25-1.48-2.11-1.61-3.53a40 40 0 0 1 .15-6.57c.18-2.46.6-2.25.59-5.51 0-1.73-.33-4.06-1.79-5a40.29 40.29 0 0 1 6.24.08c2.64.18 5.71-.14 6.91.63C19.23 3.63 18.12 6 19 6a.32.32 0 0 0 .31-.36c-.06-1.31.24-2.44-.81-3.44A5.82 5.82 0 0 0 14.76 1a75.46 75.46 0 0 0-8.57 0C5.77 1 1.6 1.5 1 2.08A3.17 3.17 0 0 0 0 4.5 4.61 4.61 0 0 0 .72 7a1.92 1.92 0 0 0 .93.62c1 .31 3.24.25 2.86-.55C4.4 6.8 3.19 7 3.11 7a2.35 2.35 0 0 1-1.77-.56 3.77 3.77 0 0 1-.48-2 2.31 2.31 0 0 1 .76-1.73 3.54 3.54 0 0 1 1.27-.31c1.11 0 1.64.66 2 1.73a14.13 14.13 0 0 1 .3 4.46 33 33 0 0 0-.55 7c0 1.43.19 5 .84 6.22a2.1 2.1 0 0 0 1.67 1.24.3.3 0 0 0 .05-.52Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M21.85 19.54a8 8 0 0 1-1.71-3.19.29.29 0 1 0-.57.15c.75 3.33 2.18 4 2.79 4.79-.34.08-13.26 1.1-14 1a.33.33 0 1 0-.09.66c1.61.26 10.59-.22 13.1-.49a3 3 0 0 0 2-.65c.63-.67-.71-1.47-1.52-2.27Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M9.67 16.86c.39 0 .46.84.5 1.26 0 .13-.07.78.35.95a.51.51 0 0 0 .45 0c1.63-.85.93-.18 1.46-.18.68 0 .56-1.39-1.25-1 0-1.24-.34-2.29-1.59-2.2a2.75 2.75 0 0 0-2.18 1.81 3.92 3.92 0 0 0-.34 1.05c.11 1.84.86-1.68 2.6-1.69Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M8.57 8.41c5.28.19 2.32 0 6.08 0a.34.34 0 0 0 .35-.35.47.47 0 0 0-.39-.37c-.28-.06-2.1-.3-2.94-.33a17.84 17.84 0 0 0-3.84.48.31.31 0 0 0 .2.53c.09.02.48.04.54.04Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M13.22 11.64c-5.2-.15-5.49.12-5.57.34a.3.3 0 0 0 .17.38 1.23 1.23 0 0 0 .44.1c.84.06 7.28.38 7.24-.42-.03-.58-1.37-.33-2.28-.4Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path></g></svg>\n                    </div>\n                  </div>\n                  <div class=\"flex w-full items-center justify-between px-6 pb-6\">\n                    <p class=\"text-sm text-gray-500  line-clamp-3\">\n                      Successful customer orders in the webshop. \nAll orders since 2020-01-01. \nOrders with their line items are in their current state (no history included).\n\n                    </p>\n                  </div>\n\n                </a>\n              </li>\n              \n\n              <li class=\"col-span-1 rounded-lg bg-white shadow hover:bg-gray-50\"\n                  data-search=\"orders latest checkout team successful customer orders in the webshop. \nall orders since 2020-01-01. \norders with their line items are in their current state (no history included).\n \n      one record per order. includes cancelled and deleted orders. \n        order_id an internal id that identifies an order in the online shop. \n        order_timestamp the business timestamp in utc when the order was successfully registered in the source system and the payment was successful. \n        order_total total amount the smallest monetary unit (e.g., cents). \n        customer_id unique identifier for the customer. \n        customer_email_address the email address, as entered by the customer. the email address was not verified. \n        processed_timestamp the timestamp when the record was processed by the data platform. \n    \n      a single article that is part of an order. \n        lines_item_id primary key of the lines_item_id table \n        order_id an internal id that identifies an order in the online shop. \n        sku the purchased article number \n    \n  \">\n                <a href=\"orders-latest/datacontract.html\" >\n                  <div class=\"flex w-full justify-between space-x-1 p-6 pb-4\">\n                    <div class=\"flex-1 truncate\">\n                      <div class=\"flex items-center space-x-3\">\n                        <h3 class=\"truncate text-sm font-medium text-gray-900\">Orders Latest</h3>\n                      </div>\n                      <div class=\"flex flex-wrap mt-1 text-sm text-gray-500 gap-1\">\n                        \n                        <div class=\"flex items-center text-sm text-gray-500\">\n                          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.25\" stroke=\"currentColor\" class=\"w-4 h-4 mr-1.5\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z\" />\n                          </svg>\n                          <span>Checkout Team</span>\n                        </div>\n                        \n                      </div>\n\n                    </div>\n                    <div class=\"h-10 w-10 flex-shrink-0 rounded-full\">\n                      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g><path d=\"M21.14 6.94a.77.77 0 0 0-.48.2c-1-.8-2.14-.25-3 .72A16.12 16.12 0 0 0 16.15 10a.28.28 0 0 0 .4.32c.08 0 1.39-1.21 1.47-1.28.73-.68 1.35-1.42 1.81-1.48s.32 0 .41.09a19 19 0 0 0-2.07 2.81c0 .12-.31 0 1.53 1.71l.27.24C19 13.57 16 16.73 15.74 17a2.66 2.66 0 0 1-1 .43 3.72 3.72 0 0 1-.22-1.52L17.7 12a.3.3 0 0 0-.47-.37c-.72.88-3.45 3.39-3.69 3.91a4 4 0 0 0 .28 2.62 1 1 0 0 0 .93.32 4.26 4.26 0 0 0 1.76-.65c.6-.62 3.86-4.79 4.65-5.31a20 20 0 0 0 1.77-1.64 4.67 4.67 0 0 0 1-1.37c.5-1.57-1.82-2.66-2.79-2.57Zm1.66 2.33a12.9 12.9 0 0 1-1.58 1.88c-.91 1-.65.74-1 .46-1.52-1.26-1.33-1-1.27-1.21l2-2.16c.34-.38-.06-.45.7-.15.44.16 1.43.63 1.15 1.18Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M7.2 22.53c-1.48-.25-1.48-2.11-1.61-3.53a40 40 0 0 1 .15-6.57c.18-2.46.6-2.25.59-5.51 0-1.73-.33-4.06-1.79-5a40.29 40.29 0 0 1 6.24.08c2.64.18 5.71-.14 6.91.63C19.23 3.63 18.12 6 19 6a.32.32 0 0 0 .31-.36c-.06-1.31.24-2.44-.81-3.44A5.82 5.82 0 0 0 14.76 1a75.46 75.46 0 0 0-8.57 0C5.77 1 1.6 1.5 1 2.08A3.17 3.17 0 0 0 0 4.5 4.61 4.61 0 0 0 .72 7a1.92 1.92 0 0 0 .93.62c1 .31 3.24.25 2.86-.55C4.4 6.8 3.19 7 3.11 7a2.35 2.35 0 0 1-1.77-.56 3.77 3.77 0 0 1-.48-2 2.31 2.31 0 0 1 .76-1.73 3.54 3.54 0 0 1 1.27-.31c1.11 0 1.64.66 2 1.73a14.13 14.13 0 0 1 .3 4.46 33 33 0 0 0-.55 7c0 1.43.19 5 .84 6.22a2.1 2.1 0 0 0 1.67 1.24.3.3 0 0 0 .05-.52Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M21.85 19.54a8 8 0 0 1-1.71-3.19.29.29 0 1 0-.57.15c.75 3.33 2.18 4 2.79 4.79-.34.08-13.26 1.1-14 1a.33.33 0 1 0-.09.66c1.61.26 10.59-.22 13.1-.49a3 3 0 0 0 2-.65c.63-.67-.71-1.47-1.52-2.27Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M9.67 16.86c.39 0 .46.84.5 1.26 0 .13-.07.78.35.95a.51.51 0 0 0 .45 0c1.63-.85.93-.18 1.46-.18.68 0 .56-1.39-1.25-1 0-1.24-.34-2.29-1.59-2.2a2.75 2.75 0 0 0-2.18 1.81 3.92 3.92 0 0 0-.34 1.05c.11 1.84.86-1.68 2.6-1.69Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M8.57 8.41c5.28.19 2.32 0 6.08 0a.34.34 0 0 0 .35-.35.47.47 0 0 0-.39-.37c-.28-.06-2.1-.3-2.94-.33a17.84 17.84 0 0 0-3.84.48.31.31 0 0 0 .2.53c.09.02.48.04.54.04Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M13.22 11.64c-5.2-.15-5.49.12-5.57.34a.3.3 0 0 0 .17.38 1.23 1.23 0 0 0 .44.1c.84.06 7.28.38 7.24-.42-.03-.58-1.37-.33-2.28-.4Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path></g></svg>\n                    </div>\n                  </div>\n                  <div class=\"flex w-full items-center justify-between px-6 pb-6\">\n                    <p class=\"text-sm text-gray-500  line-clamp-3\">\n                      Successful customer orders in the webshop. \nAll orders since 2020-01-01. \nOrders with their line items are in their current state (no history included).\n\n                    </p>\n                  </div>\n\n                </a>\n              </li>\n              \n\n              <li class=\"col-span-1 rounded-lg bg-white shadow hover:bg-gray-50\"\n                  data-search=\"covid-19 cases  johns hopkins university consolidated data on covid-19 cases, sourced from enigma \n      the number of confirmed covid cases reported for a specified region, with location and county/province/country information. \n        fips state and county two digits code \n        admin2 county name \n        province_state province name or state name \n        country_region country name or region name \n        last_update last update timestamp \n        latitude location (latitude) \n        longitude location (longitude) \n        confirmed number of confirmed cases \n        combined_key county name+state name+country name \n    \n  \">\n                <a href=\"covid-cases/datacontract.html\" >\n                  <div class=\"flex w-full justify-between space-x-1 p-6 pb-4\">\n                    <div class=\"flex-1 truncate\">\n                      <div class=\"flex items-center space-x-3\">\n                        <h3 class=\"truncate text-sm font-medium text-gray-900\">COVID-19 cases</h3>\n                      </div>\n                      <div class=\"flex flex-wrap mt-1 text-sm text-gray-500 gap-1\">\n                        \n                      </div>\n\n                    </div>\n                    <div class=\"h-10 w-10 flex-shrink-0 rounded-full\">\n                      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g><path d=\"M21.14 6.94a.77.77 0 0 0-.48.2c-1-.8-2.14-.25-3 .72A16.12 16.12 0 0 0 16.15 10a.28.28 0 0 0 .4.32c.08 0 1.39-1.21 1.47-1.28.73-.68 1.35-1.42 1.81-1.48s.32 0 .41.09a19 19 0 0 0-2.07 2.81c0 .12-.31 0 1.53 1.71l.27.24C19 13.57 16 16.73 15.74 17a2.66 2.66 0 0 1-1 .43 3.72 3.72 0 0 1-.22-1.52L17.7 12a.3.3 0 0 0-.47-.37c-.72.88-3.45 3.39-3.69 3.91a4 4 0 0 0 .28 2.62 1 1 0 0 0 .93.32 4.26 4.26 0 0 0 1.76-.65c.6-.62 3.86-4.79 4.65-5.31a20 20 0 0 0 1.77-1.64 4.67 4.67 0 0 0 1-1.37c.5-1.57-1.82-2.66-2.79-2.57Zm1.66 2.33a12.9 12.9 0 0 1-1.58 1.88c-.91 1-.65.74-1 .46-1.52-1.26-1.33-1-1.27-1.21l2-2.16c.34-.38-.06-.45.7-.15.44.16 1.43.63 1.15 1.18Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M7.2 22.53c-1.48-.25-1.48-2.11-1.61-3.53a40 40 0 0 1 .15-6.57c.18-2.46.6-2.25.59-5.51 0-1.73-.33-4.06-1.79-5a40.29 40.29 0 0 1 6.24.08c2.64.18 5.71-.14 6.91.63C19.23 3.63 18.12 6 19 6a.32.32 0 0 0 .31-.36c-.06-1.31.24-2.44-.81-3.44A5.82 5.82 0 0 0 14.76 1a75.46 75.46 0 0 0-8.57 0C5.77 1 1.6 1.5 1 2.08A3.17 3.17 0 0 0 0 4.5 4.61 4.61 0 0 0 .72 7a1.92 1.92 0 0 0 .93.62c1 .31 3.24.25 2.86-.55C4.4 6.8 3.19 7 3.11 7a2.35 2.35 0 0 1-1.77-.56 3.77 3.77 0 0 1-.48-2 2.31 2.31 0 0 1 .76-1.73 3.54 3.54 0 0 1 1.27-.31c1.11 0 1.64.66 2 1.73a14.13 14.13 0 0 1 .3 4.46 33 33 0 0 0-.55 7c0 1.43.19 5 .84 6.22a2.1 2.1 0 0 0 1.67 1.24.3.3 0 0 0 .05-.52Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M21.85 19.54a8 8 0 0 1-1.71-3.19.29.29 0 1 0-.57.15c.75 3.33 2.18 4 2.79 4.79-.34.08-13.26 1.1-14 1a.33.33 0 1 0-.09.66c1.61.26 10.59-.22 13.1-.49a3 3 0 0 0 2-.65c.63-.67-.71-1.47-1.52-2.27Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M9.67 16.86c.39 0 .46.84.5 1.26 0 .13-.07.78.35.95a.51.51 0 0 0 .45 0c1.63-.85.93-.18 1.46-.18.68 0 .56-1.39-1.25-1 0-1.24-.34-2.29-1.59-2.2a2.75 2.75 0 0 0-2.18 1.81 3.92 3.92 0 0 0-.34 1.05c.11 1.84.86-1.68 2.6-1.69Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M8.57 8.41c5.28.19 2.32 0 6.08 0a.34.34 0 0 0 .35-.35.47.47 0 0 0-.39-.37c-.28-.06-2.1-.3-2.94-.33a17.84 17.84 0 0 0-3.84.48.31.31 0 0 0 .2.53c.09.02.48.04.54.04Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M13.22 11.64c-5.2-.15-5.49.12-5.57.34a.3.3 0 0 0 .17.38 1.23 1.23 0 0 0 .44.1c.84.06 7.28.38 7.24-.42-.03-.58-1.37-.33-2.28-.4Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path></g></svg>\n                    </div>\n                  </div>\n                  <div class=\"flex w-full items-center justify-between px-6 pb-6\">\n                    <p class=\"text-sm text-gray-500  line-clamp-3\">\n                      Johns Hopkins University Consolidated data on COVID-19 cases, sourced from Enigma\n                    </p>\n                  </div>\n\n                </a>\n              </li>\n              \n\n              <li class=\"col-span-1 rounded-lg bg-white shadow hover:bg-gray-50\"\n                  data-search=\"muellimperium exchange format emperor of the muellimperium the muellimperium exchange format is a data contract for exchanging data between the muellimperium and its partners.\n \n      none \n        location the location where the garbage is collected. \n        garbage_type the type of garbage that is collected. \n        collection_date the date when the garbage is collected. \n    \n  \">\n                <a href=\"muellimperium/datacontract.html\" >\n                  <div class=\"flex w-full justify-between space-x-1 p-6 pb-4\">\n                    <div class=\"flex-1 truncate\">\n                      <div class=\"flex items-center space-x-3\">\n                        <h3 class=\"truncate text-sm font-medium text-gray-900\">Muellimperium Exchange Format</h3>\n                      </div>\n                      <div class=\"flex flex-wrap mt-1 text-sm text-gray-500 gap-1\">\n                        \n                        <div class=\"flex items-center text-sm text-gray-500\">\n                          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.25\" stroke=\"currentColor\" class=\"w-4 h-4 mr-1.5\">\n                            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18 18.72a9.094 9.094 0 003.741-.479 3 3 0 00-4.682-2.72m.94 3.198l.001.031c0 .225-.012.447-.037.666A11.944 11.944 0 0112 21c-2.17 0-4.207-.576-5.963-1.584A6.062 6.062 0 016 18.719m12 0a5.971 5.971 0 00-.941-3.197m0 0A5.995 5.995 0 0012 12.75a5.995 5.995 0 00-5.058 2.772m0 0a3 3 0 00-4.681 2.72 8.986 8.986 0 003.74.477m.94-3.197a5.971 5.971 0 00-.94 3.197M15 6.75a3 3 0 11-6 0 3 3 0 016 0zm6 3a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0zm-13.5 0a2.25 2.25 0 11-4.5 0 2.25 2.25 0 014.5 0z\" />\n                          </svg>\n                          <span>Emperor of the Muellimperium</span>\n                        </div>\n                        \n                      </div>\n\n                    </div>\n                    <div class=\"h-10 w-10 flex-shrink-0 rounded-full\">\n                      <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g><path d=\"M21.14 6.94a.77.77 0 0 0-.48.2c-1-.8-2.14-.25-3 .72A16.12 16.12 0 0 0 16.15 10a.28.28 0 0 0 .4.32c.08 0 1.39-1.21 1.47-1.28.73-.68 1.35-1.42 1.81-1.48s.32 0 .41.09a19 19 0 0 0-2.07 2.81c0 .12-.31 0 1.53 1.71l.27.24C19 13.57 16 16.73 15.74 17a2.66 2.66 0 0 1-1 .43 3.72 3.72 0 0 1-.22-1.52L17.7 12a.3.3 0 0 0-.47-.37c-.72.88-3.45 3.39-3.69 3.91a4 4 0 0 0 .28 2.62 1 1 0 0 0 .93.32 4.26 4.26 0 0 0 1.76-.65c.6-.62 3.86-4.79 4.65-5.31a20 20 0 0 0 1.77-1.64 4.67 4.67 0 0 0 1-1.37c.5-1.57-1.82-2.66-2.79-2.57Zm1.66 2.33a12.9 12.9 0 0 1-1.58 1.88c-.91 1-.65.74-1 .46-1.52-1.26-1.33-1-1.27-1.21l2-2.16c.34-.38-.06-.45.7-.15.44.16 1.43.63 1.15 1.18Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M7.2 22.53c-1.48-.25-1.48-2.11-1.61-3.53a40 40 0 0 1 .15-6.57c.18-2.46.6-2.25.59-5.51 0-1.73-.33-4.06-1.79-5a40.29 40.29 0 0 1 6.24.08c2.64.18 5.71-.14 6.91.63C19.23 3.63 18.12 6 19 6a.32.32 0 0 0 .31-.36c-.06-1.31.24-2.44-.81-3.44A5.82 5.82 0 0 0 14.76 1a75.46 75.46 0 0 0-8.57 0C5.77 1 1.6 1.5 1 2.08A3.17 3.17 0 0 0 0 4.5 4.61 4.61 0 0 0 .72 7a1.92 1.92 0 0 0 .93.62c1 .31 3.24.25 2.86-.55C4.4 6.8 3.19 7 3.11 7a2.35 2.35 0 0 1-1.77-.56 3.77 3.77 0 0 1-.48-2 2.31 2.31 0 0 1 .76-1.73 3.54 3.54 0 0 1 1.27-.31c1.11 0 1.64.66 2 1.73a14.13 14.13 0 0 1 .3 4.46 33 33 0 0 0-.55 7c0 1.43.19 5 .84 6.22a2.1 2.1 0 0 0 1.67 1.24.3.3 0 0 0 .05-.52Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M21.85 19.54a8 8 0 0 1-1.71-3.19.29.29 0 1 0-.57.15c.75 3.33 2.18 4 2.79 4.79-.34.08-13.26 1.1-14 1a.33.33 0 1 0-.09.66c1.61.26 10.59-.22 13.1-.49a3 3 0 0 0 2-.65c.63-.67-.71-1.47-1.52-2.27Z\" fill=\"#020202\" fill-rule=\"evenodd\"></path><path d=\"M9.67 16.86c.39 0 .46.84.5 1.26 0 .13-.07.78.35.95a.51.51 0 0 0 .45 0c1.63-.85.93-.18 1.46-.18.68 0 .56-1.39-1.25-1 0-1.24-.34-2.29-1.59-2.2a2.75 2.75 0 0 0-2.18 1.81 3.92 3.92 0 0 0-.34 1.05c.11 1.84.86-1.68 2.6-1.69Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M8.57 8.41c5.28.19 2.32 0 6.08 0a.34.34 0 0 0 .35-.35.47.47 0 0 0-.39-.37c-.28-.06-2.1-.3-2.94-.33a17.84 17.84 0 0 0-3.84.48.31.31 0 0 0 .2.53c.09.02.48.04.54.04Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M13.22 11.64c-5.2-.15-5.49.12-5.57.34a.3.3 0 0 0 .17.38 1.23 1.23 0 0 0 .44.1c.84.06 7.28.38 7.24-.42-.03-.58-1.37-.33-2.28-.4Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path></g></svg>\n                    </div>\n                  </div>\n                  <div class=\"flex w-full items-center justify-between px-6 pb-6\">\n                    <p class=\"text-sm text-gray-500  line-clamp-3\">\n                      The Muellimperium Exchange Format is a data contract for exchanging data between the Muellimperium and its partners.\n\n                    </p>\n                  </div>\n\n                </a>\n              </li>\n              \n            </ul>\n\n            \n\n\n            <div id=\"no-results\" class=\"hidden text-sm text-gray-500\">\n              No results found.\n            </div>\n\n          </section>\n\n        </div>\n\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 27 Jun 2024 14:50:13 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.8\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code></code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n<script>\n  document.addEventListener('DOMContentLoaded', function() {\n    const searchInput = document.getElementById('search');\n    const contractsList = document.querySelectorAll('#catalog li');\n    const noResults = document.getElementById('no-results');\n\n    searchInput.addEventListener('keyup', function() {\n      let visibleCount = 0;  // Counter to track the number of visible items\n      const searchText = searchInput.value.toLowerCase();\n\n      contractsList.forEach(contract => {\n        const searchData = contract.getAttribute('data-search');\n        if (searchData && searchData.includes(searchText)) {\n          contract.style.display = '';\n          visibleCount++;\n        } else {\n          contract.style.display = 'none';\n        }\n      });\n\n      // Manage the visibility of the no results message\n      if (visibleCount === 0) {\n        noResults.classList.remove('hidden');  // Show the message if no items are visible\n      } else {\n        noResults.classList.add('hidden');     // Hide the message if there are visible items\n      }\n    });\n  });\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "examples/muellimperium/data.csv",
    "content": "Pluto,residual_waste,2021-01-09\nPluto,bio_waste,2021-01-02\nPluto,paper,2021-01-11\nPluto,plastic,2021-01-12\nPluto,bulky_waste,2021-02-04\nEarth,residual_waste,2021-01-14\nEarth,bio_waste,2021-01-08\nEarth,paper,2021-01-12\nEarth,plastic,2021-01-27\nEarth,bulky_waste,2021-02-03\n"
  },
  {
    "path": "examples/muellimperium/datacontract.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.visible {\n  visibility: visible;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mb-6 {\n  margin-bottom: 1.5rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-2 {\n  width: 0.5rem;\n}\n\n.w-2\\/12 {\n  width: 16.666667%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-9\\/12 {\n  width: 75%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.items-baseline {\n  align-items: baseline;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(2rem * var(--tw-space-x-reverse));\n  margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.bg-blue-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(224 231 255 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-yellow-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-0 {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-2\\.5 {\n  padding-left: 0.625rem;\n  padding-right: 0.625rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-0 {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n\n.py-0\\.5 {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-1\\.5 {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-3 {\n  padding-left: 0.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.font-mono {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.italic {\n  font-style: italic;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-yellow-600 {\n  --tw-text-opacity: 1;\n  color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-blue-500\\/10 {\n  --tw-ring-color: rgb(59 130 246 / 0.1);\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-yellow-500\\/10 {\n  --tw-ring-color: rgb(234 179 8 / 0.1);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.placeholder\\:text-gray-400::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-400::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-inset:focus {\n  --tw-ring-inset: inset;\n}\n\n.focus\\:ring-indigo-600:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:w-72 {\n    width: 18rem;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-6 {\n    line-height: 1.5rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl sm:px-6 lg:px-8\">\n      <div>\n        <div class=\"md:flex md:items-center md:justify-between px-4 sm:px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract</h2>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              muellimperium-exchange-format\n            </div>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              \n            </div>\n          </div>\n          <div class=\"mt-5 flex lg:mt-0 lg:ml-4 gap-3 items-center\">\n            <button\n              type=\"button\"\n              onclick=\"document.getElementById('dialog-datacontract-yaml').showModal()\"\n              class=\"inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50\">\n              <svg class=\"-ml-0.5 mr-1.5 h-5 w-5 text-gray-600\" viewBox=\"-0.5 -0.5 24 24\">\n                <path d=\"m4.3125 8.145833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 11.020833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 5.270833333333334 6.708333333333334 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 13.895833333333334 7.1875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 16.770833333333336 3.8333333333333335 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"M8.145833333333334 22.520833333333336h-6.708333333333334a0.9583333333333334 0.9583333333333334 0 0 1 -0.9583333333333334 -0.9583333333333334v-20.125a0.9583333333333334 0.9583333333333334 0 0 1 0.9583333333333334 -0.9583333333333334h12.739125a0.9583333333333334 0.9583333333333334 0 0 1 0.6775416666666667 0.28079166666666666L18.406708333333334 4.3125a0.9583333333333334 0.9583333333333334 0 0 1 0.28079166666666666 0.6775416666666667V8.145833333333334\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m15.045833333333333 21.370833333333334 -4.025 1.15 1.15 -4.025 6.879875 -6.879875a2.032625 2.032625 0 0 1 2.875 2.875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m18.188208333333332 12.478458333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m12.170833333333333 18.495833333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path>\n              </svg>\n              Show YAML\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"space-y-6 mt-6\">\n          <section id=\"information\">\n            <div class=\" px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"info\">Info</h1>\n  <p class=\"text-sm text-gray-500\">Information about the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    \n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Title</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">Muellimperium Exchange Format</dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Version</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">0.0.1</dd>\n      </div>\n\n      \n\n      \n      <div class=\"sm:col-span-2\">\n        <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">The Muellimperium Exchange Format is a data contract for exchanging data between the Muellimperium and its partners.\n</span>\n        </dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Owner</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">\n          <span>Emperor of the Muellimperium</span>\n        </dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">contract</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">{'name': 'The Emperor', 'email': 'the-emperor@muellimperium.com'}</dd>\n      </div>\n      \n\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n\n\n          \n          <section id=\"servers\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"servers\">Servers</h1>\n              <p class=\"text-sm text-gray-500\">Servers of the data contract</p>\n            </div>\n\n            <ul role=\"list\" class=\"mt-2 divide-y divide-gray-100 overflow-hidden bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-lg\">\n\n              \n                <li class=\"relative flex gap-x-6 px-4 py-5 sm:px-6\">\n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Server</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">exchange</dd>\n      </div>\n    </div>\n  </div>\n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Type</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">local</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Path</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">data.csv</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Format</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">csv</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n\n</li>\n              \n\n            </ul>\n\n          </section>\n          \n\n\n          \n\n\n          <section id=\"models\">\n            <div class=\"flex justify-between\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Data Model\n                </h1>\n                <p class=\"text-sm text-gray-500\">The logical data model</p>\n              </div>\n            </div>\n\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>garbage_collection</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">None</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">location</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The location where the garbage is collected.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">garbage_type</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The type of garbage that is collected.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">collection_date</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    date\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The date when the garbage is collected.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n          </section>\n\n          \n\n          \n          <section id=\"examples\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Examples</h1>\n              <p class=\"text-sm text-gray-500\">Examples for models in the data contract</p>\n            </div>\n            \n              <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>garbage_collection</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">json</span>\n              <div class=\"text-sm font-medium text-gray-500\">None</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr>\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-12/12\">\n                <pre>[{'location': 'Musterstadt', 'garbage_type': 'paper', 'collection_date': '2022-01-01'}, {'location': 'Musterstadt', 'garbage_type': 'plastic', 'collection_date': '2022-01-02'}, {'location': 'Musterstadt', 'garbage_type': 'residual_waste', 'collection_date': '2022-01-03'}]</pre>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n          </section>\n          \n\n          \n\n          \n\n        </div>\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 27 Jun 2024 14:50:12 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.8\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code>dataContractSpecification: 0.9.3\nid: muellimperium-exchange-format\ninfo:\n  title: Muellimperium Exchange Format\n  version: 0.0.1\n  description: 'The Muellimperium Exchange Format is a data contract for exchanging\n    data between the Muellimperium and its partners.\n\n    '\n  owner: Emperor of the Muellimperium\n  contract:\n    name: The Emperor\n    email: the-emperor@muellimperium.com\nservers:\n  exchange:\n    type: local\n    format: csv\n    path: data.csv\nmodels:\n  garbage_collection:\n    type: table\n    fields:\n      location:\n        type: text\n        required: true\n        primary: false\n        unique: false\n        description: The location where the garbage is collected.\n      garbage_type:\n        type: text\n        required: true\n        primary: false\n        unique: false\n        description: The type of garbage that is collected.\n        enum:\n        - paper\n        - plastic\n        - residual_waste\n        - bio_waste\n        - bulky_waste\n        - hazardous_waste\n      collection_date:\n        type: date\n        required: true\n        primary: false\n        unique: false\n        description: The date when the garbage is collected.\nexamples:\n- type: json\n  model: garbage_collection\n  data:\n  - location: Musterstadt\n    garbage_type: paper\n    collection_date: '2022-01-01'\n  - location: Musterstadt\n    garbage_type: plastic\n    collection_date: '2022-01-02'\n  - location: Musterstadt\n    garbage_type: residual_waste\n    collection_date: '2022-01-03'\n</code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n</body>\n</html>"
  },
  {
    "path": "examples/muellimperium/datacontract.yaml",
    "content": "dataContractSpecification: 0.9.3\nid: muellimperium-exchange-format\ninfo:\n  title: Muellimperium Exchange Format\n  version: 0.0.1\n  description: |\n    The Muellimperium Exchange Format is a data contract for exchanging data between the Muellimperium and its partners.\n  owner: Emperor of the Muellimperium\n  contract:\n    name: The Emperor\n    email: the-emperor@muellimperium.com\nservers:\n  exchange:\n    type: local\n    path: data.csv\n    format: csv\nmodels:\n  garbage_collection:\n    type: table\n    fields:\n      location:\n        type: text\n        required: true\n        description: The location where the garbage is collected.\n      garbage_type:\n        type: text\n        required: true\n        description: The type of garbage that is collected.\n        enum:\n          - paper\n          - plastic\n          - residual_waste\n          - bio_waste\n          - bulky_waste\n          - hazardous_waste\n      collection_date:\n        type: date\n        required: true\n        description: The date when the garbage is collected.\nexamples:\n  - model: garbage_collection\n    type: json\n    data:\n      - location: \"Musterstadt\"\n        garbage_type: \"paper\"\n        collection_date: \"2022-01-01\"\n      - location: \"Musterstadt\"\n        garbage_type: \"plastic\"\n        collection_date: \"2022-01-02\"\n      - location: \"Musterstadt\"\n        garbage_type: \"residual_waste\"\n        collection_date: \"2022-01-03\"\n"
  },
  {
    "path": "examples/orders-latest/datacontract.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.visible {\n  visibility: visible;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mb-6 {\n  margin-bottom: 1.5rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-2 {\n  width: 0.5rem;\n}\n\n.w-2\\/12 {\n  width: 16.666667%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-9\\/12 {\n  width: 75%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.items-baseline {\n  align-items: baseline;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(2rem * var(--tw-space-x-reverse));\n  margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.bg-blue-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(224 231 255 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-yellow-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-0 {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-2\\.5 {\n  padding-left: 0.625rem;\n  padding-right: 0.625rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-0 {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n\n.py-0\\.5 {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-1\\.5 {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-3 {\n  padding-left: 0.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.font-mono {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.italic {\n  font-style: italic;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-yellow-600 {\n  --tw-text-opacity: 1;\n  color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-blue-500\\/10 {\n  --tw-ring-color: rgb(59 130 246 / 0.1);\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-yellow-500\\/10 {\n  --tw-ring-color: rgb(234 179 8 / 0.1);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.placeholder\\:text-gray-400::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-400::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-inset:focus {\n  --tw-ring-inset: inset;\n}\n\n.focus\\:ring-indigo-600:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:w-72 {\n    width: 18rem;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-6 {\n    line-height: 1.5rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl sm:px-6 lg:px-8\">\n      <div>\n        <div class=\"md:flex md:items-center md:justify-between px-4 sm:px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract</h2>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              urn:orders-latest\n            </div>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              \n              <div class=\"mt-2 flex items-center text-sm text-gray-500 whitespace-nowrap\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"mr-1.5 h-5 w-5 flex-shrink-0 text-gray-400\">\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.568 3H5.25A2.25 2.25 0 003 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 005.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 009.568 3z\" />\n                  <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 6h.008v.008H6V6z\" />\n                </svg>\n                \n                <span class=\"inline-flex items-center rounded-full bg-indigo-100 px-2.5 py-0.5 text-xs font-medium text-gray-800 mr-1\">\n                  <span>checkout</span>\n                </span>\n                \n                <span class=\"inline-flex items-center rounded-full bg-indigo-100 px-2.5 py-0.5 text-xs font-medium text-gray-800 mr-1\">\n                  <span>orders</span>\n                </span>\n                \n                <span class=\"inline-flex items-center rounded-full bg-indigo-100 px-2.5 py-0.5 text-xs font-medium text-gray-800 mr-1\">\n                  <span>s3</span>\n                </span>\n                \n              </div>\n              \n            </div>\n          </div>\n          <div class=\"mt-5 flex lg:mt-0 lg:ml-4 gap-3 items-center\">\n            <button\n              type=\"button\"\n              onclick=\"document.getElementById('dialog-datacontract-yaml').showModal()\"\n              class=\"inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50\">\n              <svg class=\"-ml-0.5 mr-1.5 h-5 w-5 text-gray-600\" viewBox=\"-0.5 -0.5 24 24\">\n                <path d=\"m4.3125 8.145833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 11.020833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 5.270833333333334 6.708333333333334 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 13.895833333333334 7.1875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 16.770833333333336 3.8333333333333335 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"M8.145833333333334 22.520833333333336h-6.708333333333334a0.9583333333333334 0.9583333333333334 0 0 1 -0.9583333333333334 -0.9583333333333334v-20.125a0.9583333333333334 0.9583333333333334 0 0 1 0.9583333333333334 -0.9583333333333334h12.739125a0.9583333333333334 0.9583333333333334 0 0 1 0.6775416666666667 0.28079166666666666L18.406708333333334 4.3125a0.9583333333333334 0.9583333333333334 0 0 1 0.28079166666666666 0.6775416666666667V8.145833333333334\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m15.045833333333333 21.370833333333334 -4.025 1.15 1.15 -4.025 6.879875 -6.879875a2.032625 2.032625 0 0 1 2.875 2.875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m18.188208333333332 12.478458333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m12.170833333333333 18.495833333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path>\n              </svg>\n              Show YAML\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"space-y-6 mt-6\">\n          <section id=\"information\">\n            <div class=\" px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"info\">Info</h1>\n  <p class=\"text-sm text-gray-500\">Information about the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    \n      <div class=\"flex flex-wrap gap-3\">\n        \n        <a href=\"https://cli.datacontract.com\" class=\"flex flex-col text-center rounded-md bg-white px-2 py-2 text-sm font-medium text-gray-500 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 mb-6\" target=\"_blank\" style=\"min-width: 100px\">\n          <div class=\"mx-auto w-8 h-8 my-2\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><g><path d=\"M23.91,5.29a3.13,3.13,0,0,0-.72-1.23.35.35,0,0,0-.49,0,.34.34,0,0,0,0,.48,2.66,2.66,0,0,1,.54,1,1.56,1.56,0,0,1-.1,1,19.42,19.42,0,0,1-3.49,3.64,9.62,9.62,0,0,1-2.74,1.8,5.51,5.51,0,0,1-1.71.45.91.91,0,0,1-.73-.3c-.2-.22-.52-.52-.82-.83.66-.65,1.32-1.35,2.08-2.09a.3.3,0,0,0,0-.43.31.31,0,0,0-.43,0c-.84.6-1.6,1.14-2.32,1.69a7.18,7.18,0,0,1-.32-.81,5.23,5.23,0,0,1-.23-1,3.23,3.23,0,0,1,.94-2.5,31.64,31.64,0,0,1,3.65-3,5.24,5.24,0,0,1,1.63-1,2.56,2.56,0,0,1,1.77,0,2.08,2.08,0,0,1,.65.41,2.31,2.31,0,0,1,.49.61.3.3,0,0,0,.54-.26A2.78,2.78,0,0,0,21.52,2a2.91,2.91,0,0,0-.84-.57,3.23,3.23,0,0,0-1.81-.18,5.64,5.64,0,0,0-2.38,1.13,30.94,30.94,0,0,0-3.91,3,4.26,4.26,0,0,0-1.29,3.34,6.18,6.18,0,0,0,.27,1.23A11.36,11.36,0,0,0,12,11.06l0,.07-1.21,1c-.76.67-1.5,1.37-2.38,2.07a.34.34,0,0,0-.09.48.35.35,0,0,0,.48.09c1-.58,1.81-1.14,2.62-1.74.36-.26.71-.54,1-.83l.24-.21.82.82a2,2,0,0,0,1.6.67,6.72,6.72,0,0,0,2-.57,10.52,10.52,0,0,0,3-2.1,19.88,19.88,0,0,0,3.58-4.07A2.3,2.3,0,0,0,23.91,5.29Z\" fill=\"#191919\" fill-rule=\"evenodd\"></path><path d=\"M11.86,14.07a.34.34,0,0,0,0,.48.81.81,0,0,1,.29.57,1.28,1.28,0,0,1-.27.65,29.38,29.38,0,0,1-3.6,3.65,9.07,9.07,0,0,1-2.73,1.79,5.43,5.43,0,0,1-1.71.45,1,1,0,0,1-.73-.31c-.22-.25-.6-.61-.93-1a2.71,2.71,0,0,1-.43-.56,9.71,9.71,0,0,1-.39-1,4.53,4.53,0,0,1-.22-1,3.21,3.21,0,0,1,1-2.51,30.47,30.47,0,0,1,3.66-3,5.14,5.14,0,0,1,1.65-1,2.62,2.62,0,0,1,1.79,0,.3.3,0,0,0,.4-.16.31.31,0,0,0-.17-.4,3.16,3.16,0,0,0-1.79-.19A5.63,5.63,0,0,0,5.27,11.7a30.41,30.41,0,0,0-3.93,2.94A4.21,4.21,0,0,0,0,18a6,6,0,0,0,.19,1A9.53,9.53,0,0,0,.7,20.3a3.53,3.53,0,0,0,.47.69c.36.41.83.84,1.09,1.13a2,2,0,0,0,1.59.68,6.21,6.21,0,0,0,2.05-.56,10,10,0,0,0,3-2.1,30.27,30.27,0,0,0,3.6-4,2,2,0,0,0,.36-1.07,1.46,1.46,0,0,0-.53-1A.35.35,0,0,0,11.86,14.07Z\" fill=\"#191919\" fill-rule=\"evenodd\"></path><path d=\"M6.43,15.15l1.16-.79A.31.31,0,0,0,7.73,14a.3.3,0,0,0-.41-.13L6,14.49a7.39,7.39,0,0,0-2.3,1.83,2.35,2.35,0,0,0-.38,2.26,1,1,0,0,0,1,.68,2.41,2.41,0,0,0,1.17-.43,9.29,9.29,0,0,0,.91-.75c.66-.6,1.25-1.26,1.86-1.85a.35.35,0,0,0,0-.49.36.36,0,0,0-.49,0c-.57.45-1.13.95-1.73,1.42a10.58,10.58,0,0,1-1.17.81c-1.23.74-.36-.89-.3-1A7.43,7.43,0,0,1,6.43,15.15Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path><path d=\"M19,7a6.13,6.13,0,0,1-1.26,1.28c-.21.15-.5.38-.78.56a1.9,1.9,0,0,1-.49.25.34.34,0,0,0-.25.41.34.34,0,0,0,.41.26,2.47,2.47,0,0,0,.55-.2c.35-.18.73-.44,1-.61a6.9,6.9,0,0,0,1.57-1.33A8.69,8.69,0,0,0,20.9,6a3.7,3.7,0,0,0,.43-1.13A1,1,0,0,0,21,4a1.36,1.36,0,0,0-.89-.39,3,3,0,0,0-1.08.17,6.4,6.4,0,0,0-1.63.82,15.32,15.32,0,0,0-2,1.7,4.54,4.54,0,0,0-.65.74,2.69,2.69,0,0,0-.31.61,3.5,3.5,0,0,0-.07.9.33.33,0,0,0,.17.24A.31.31,0,0,0,15,8.63c.18-.26-.17-.6.47-1.3A5.64,5.64,0,0,1,16,6.88a19,19,0,0,1,2-1.42,5.88,5.88,0,0,1,1.39-.61A1.87,1.87,0,0,1,20,4.73c.54,0,.12.31-.08.76A7.29,7.29,0,0,1,19,7Z\" fill=\"#0c6fff\" fill-rule=\"evenodd\"></path></g></svg>\n          </div>\n          <div>datacontractCli</div>\n        </a>\n        \n      </div>\n    \n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Title</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">Orders Latest</dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Version</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">1.0.0</dd>\n      </div>\n\n      \n\n      \n      <div class=\"sm:col-span-2\">\n        <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Successful customer orders in the webshop. \nAll orders since 2020-01-01. \nOrders with their line items are in their current state (no history included).\n</span>\n        </dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Owner</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">\n          <span>Checkout Team</span>\n        </dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">slackChannel</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">#checkout</dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Contact</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">\n          \n            John Doe (Data Product Owner)\n          \n          \n          \n            <div>\n              <a href=\"https://teams.microsoft.com/l/channel/example/checkout\" class=\"text-sky-500 hover:text-gray-700\">https://teams.microsoft.com/l/channel/example/checkout</a>\n            </div>\n          \n        </dd>\n      </div>\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n\n\n          \n          <section id=\"servers\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"servers\">Servers</h1>\n              <p class=\"text-sm text-gray-500\">Servers of the data contract</p>\n            </div>\n\n            <ul role=\"list\" class=\"mt-2 divide-y divide-gray-100 overflow-hidden bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-lg\">\n\n              \n                <li class=\"relative flex gap-x-6 px-4 py-5 sm:px-6\">\n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Server</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">production</dd>\n      </div>\n    </div>\n  </div>\n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Environment</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">prod</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Type</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">s3</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Location</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">s3://datacontract-example-orders-latest/data/{model}/*.json</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Format</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">json</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Delimiter</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">new_line</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n  <div class=\"flex items-center gap-x-4\">\n    <div class=\"sm:flex sm:flex-col\">\n      <div class=\"flex flex-col\">\n        <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">One folder per model. One file per day.</dd>\n      </div>\n    </div>\n  </div>\n  \n\n  \n\n</li>\n              \n\n            </ul>\n\n          </section>\n          \n\n\n          \n          <section id=\"terms\">\n            <div class=\"px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"terms\">Terms</h1>\n  <p class=\"text-sm text-gray-500\">Terms and conditions of the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Usage</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Data can be used for reports, analytics and machine learning use cases.\nOrder may be linked and joined by other tables\n</span>\n        </dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Limitations</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Not suitable for real-time use cases.\nData may not be used to identify individual customers.\nMax data processing per day: 10 TiB\n</span>\n        </dd>\n      </div>\n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Billing</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">5000 USD per month</span>\n        </dd>\n      </div>\n      \n\n      \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Notice Period</dt>\n          <dd class=\"mt-1 text-sm text-gray-900 flex\" >\n            <span class=\"whitespace-pre-wrap\">P3M</span>\n          </dd>\n        </div>\n      \n\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n          \n\n\n          <section id=\"models\">\n            <div class=\"flex justify-between\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Data Model\n                </h1>\n                <p class=\"text-sm text-gray-500\">The logical data model</p>\n              </div>\n            </div>\n\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>orders</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">One record per order. Includes cancelled and deleted orders.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Order ID</span><br>\n      \n      <span class=\"font-mono flex\">order_id <a href=\"#/definitions/order_id\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n    </div>\n    \n\n    <div>\n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">primary</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">unique</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:uuid</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">order_timestamp</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    timestamp\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">2024-09-09T08:30:00Z</span>\n    </div>\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">order_total</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    long\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Total amount the smallest monetary unit (e.g., cents).</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">9999</span>\n    </div>\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">customer_id</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Unique identifier for the customer.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">minLength:10</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">maxLength:20</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">customer_email_address</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The email address, as entered by the customer. The email address was not verified.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:email</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">sensitive</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">processed_timestamp</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    timestamp\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The timestamp when the record was processed by the data platform.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>line_items</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">A single article that is part of an order.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">lines_item_id</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Primary key of the lines_item_id table</div>\n    \n\n    \n\n    <div>\n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">primary</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">unique</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Order ID</span><br>\n      \n      <span class=\"font-mono flex\">order_id <a href=\"#/definitions/order_id\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n    </div>\n    \n\n    <div>\n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:uuid</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Stock Keeping Unit</span><br>\n      \n      <span class=\"font-mono flex\">sku <a href=\"#/definitions/sku\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The purchased article number</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">96385074</span>\n    </div>\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">pattern:^[A-Za-z0-9]{8,14}$</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <a href=\"https://en.wikipedia.org/wiki/Stock_keeping_unit\" class=\"inline-flex items-center px-1 py-1 mr-1 mt-1 text-sky-500 hover:text-gray-700 text-xs font-semibold\">wikipedia</a>\n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n          </section>\n\n          \n          <section id=\"definitions\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Definitions</h1>\n              <p class=\"text-sm text-gray-500\">Domain specific definitions in the data contract</p>\n            </div>\n\n            \n            <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>order_id</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">checkout</span>\n              <div class=\"text-sm font-medium text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr id=\"/definitions/order_id\">\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n                <div class=\"py-2 text-sm\">\n                  \n                  <div>Order ID</div>\n                  \n                  <div class=\"font-mono\">order_id</div>\n                </div>\n              </td>\n              <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                <div class=\"py-2 text-sm\">\n                  text\n                  \n                    <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">uuid</span>\n                  \n                </div>\n              </td>\n              <td class=\"px-3 py-2 text-sm text-gray-500 w-9/12\">\n                \n                <div class=\"mt-1\">\n                  <span class=\"text-gray-600 font-medium\">Example:</span> <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n                </div>\n                \n                \n                <div>\n                  <span class=\"text-gray-600 font-medium\">Tags:</span>\n                  \n                  <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">orders</span>\n                  \n                </div>\n                \n                \n                <div>\n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n                  \n                  \n                  \n                </div>\n              </td>\n\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n            <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>sku</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">inventory</span>\n              <div class=\"text-sm font-medium text-gray-500\">A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \nIt is typically associated with an article's barcode, such as the EAN/GTIN.\n</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr id=\"/definitions/sku\">\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n                <div class=\"py-2 text-sm\">\n                  \n                  <div>Stock Keeping Unit</div>\n                  \n                  <div class=\"font-mono\">sku</div>\n                </div>\n              </td>\n              <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                <div class=\"py-2 text-sm\">\n                  text\n                  \n                </div>\n              </td>\n              <td class=\"px-3 py-2 text-sm text-gray-500 w-9/12\">\n                \n                <div class=\"mt-1\">\n                  <span class=\"text-gray-600 font-medium\">Example:</span> <span class=\"font-mono\">96385074</span>\n                </div>\n                \n                \n                <div>\n                  <span class=\"text-gray-600 font-medium\">Tags:</span>\n                  \n                  <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">inventory</span>\n                  \n                </div>\n                \n                \n                <div>\n                  \n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">pattern:^[A-Za-z0-9]{8,14}$</span>\n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                    \n                    <a href=\"https://en.wikipedia.org/wiki/Stock_keeping_unit\" class=\"inline-flex items-center px-1 py-1 mr-1 mt-1 text-sky-500 hover:text-gray-700 text-xs font-semibold\">wikipedia</a>\n                    \n                  \n                </div>\n              </td>\n\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n          </section>\n          \n\n          \n          <section id=\"examples\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Examples</h1>\n              <p class=\"text-sm text-gray-500\">Examples for models in the data contract</p>\n            </div>\n            \n              <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>orders</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">csv</span>\n              <div class=\"text-sm font-medium text-gray-500\">An example list of order records.</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr>\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-12/12\">\n                <pre>order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n\"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n\"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n\"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n\"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n\"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n\"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n\"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n\"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n\"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n\"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n</pre>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n              <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>line_items</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">csv</span>\n              <div class=\"text-sm font-medium text-gray-500\">An example list of line items.</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr>\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-12/12\">\n                <pre>lines_item_id,order_id,sku\n\"LI-1\",\"1001\",\"5901234123457\"\n\"LI-2\",\"1001\",\"4001234567890\"\n\"LI-3\",\"1002\",\"5901234123457\"\n\"LI-4\",\"1002\",\"2001234567893\"\n\"LI-5\",\"1003\",\"4001234567890\"\n\"LI-6\",\"1003\",\"5001234567892\"\n\"LI-7\",\"1004\",\"5901234123457\"\n\"LI-8\",\"1005\",\"2001234567893\"\n\"LI-9\",\"1005\",\"5001234567892\"\n\"LI-10\",\"1005\",\"6001234567891\"\n</pre>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n          </section>\n          \n\n          \n          <section id=\"servicelevels\">\n            <div class=\"px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Service Levels</h1>\n  <p class=\"text-sm text-gray-500\">Service levels of the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n  <div class=\"px-4 py-5 sm:px-6\">\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 divide-y\">\n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"availability\">\n          Availability\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">The server is available during support hours</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Percentage</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">99.9%</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"retention\">\n          Retention\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">Data is retained for one year</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Period</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">P1Y</span>\n          </dd>\n        </div>\n        \n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"latency\">\n          Latency\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">Data is available within 25 hours after the order was placed</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Threshold</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">25h</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Source Timestamp field</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap font-mono\">orders.order_timestamp</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Processed Timestamp field</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap font-mono\">orders.processed_timestamp</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"freshness\">\n          Freshness\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">The age of the youngest row in a table.</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Threshold</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">25h</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Timestamp field</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap font-mono\">orders.order_timestamp</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"frequency\">\n          Frequency\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">Data is delivered once a day</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Type</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">batch</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Interval</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">daily</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Cron</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap font-mono\">0 0 * * *</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"support\">\n          Support\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">The data is available during typical business hours at headquarters</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Time</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">9am to 5pm in EST on business days</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Response Time</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">1h</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n      \n      <div class=\"grid sm:grid-cols-2\" >\n        <h2 class=\"sm:col-span-2 mt-2 text-base font-semibold leading-6 text-gray-900\" id=\"backup\">\n          Backup\n        </h2>\n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">Data is backed up once a week, every Sunday at 0:00 UTC.</span>\n          </dd>\n        </div>\n        \n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Cron</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap font-mono\">0 0 * * 0</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Recovery Time</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">24 hours</span>\n          </dd>\n        </div>\n        \n        \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Recovery Point</dt>\n          <dd class=\"mt-1 text-sm text-gray-900\">\n            <span class=\"whitespace-pre-wrap\">1 week</span>\n          </dd>\n        </div>\n        \n      </div>\n      \n    </dl>\n  </div>\n</div>\n          </section>\n          \n\n          \n            <section id=\"quality\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Quality\n                </h1>\n                <p class=\"text-sm text-gray-500\">\n                  <span>SodaCL</span>\n                </p>\n              </div>\n              <div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n                <div class=\"px-4 py-5 sm:px-6\">\n                  <div id=\"schema-specification\" >\n                      <pre><code class=\"text-sm\">checks for orders:\n- row_count >= 5\n- duplicate_count(order_id) = 0\nchecks for line_items:\n- values in (order_id) must exist in orders (order_id)\n- row_count >= 5\n</code></pre>\n                  </div>\n                </div>\n              </div>\n            </section>\n          \n\n        </div>\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 27 Jun 2024 14:50:10 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.8\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code>dataContractSpecification: 0.9.3\nid: urn:orders-latest\ninfo:\n  title: Orders Latest\n  version: 1.0.0\n  description: \"Successful customer orders in the webshop. \\nAll orders since 2020-01-01.\\\n    \\ \\nOrders with their line items are in their current state (no history included).\\n\"\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\n  slackChannel: '#checkout'\nservers:\n  production:\n    type: s3\n    description: One folder per model. One file per day.\n    environment: prod\n    format: json\n    delimiter: new_line\n    location: s3://datacontract-example-orders-latest/data/{model}/*.json\nterms:\n  usage: 'Data can be used for reports, analytics and machine learning use cases.\n\n    Order may be linked and joined by other tables\n\n    '\n  limitations: 'Not suitable for real-time use cases.\n\n    Data may not be used to identify individual customers.\n\n    Max data processing per day: 10 TiB\n\n    '\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        ref: '#/definitions/order_id'\n        title: Order ID\n        type: text\n        format: uuid\n        required: true\n        primary: true\n        unique: true\n        description: An internal ID that identifies an order in the online shop.\n        pii: true\n        classification: restricted\n        tags:\n        - orders\n        example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n      order_timestamp:\n        type: timestamp\n        required: true\n        primary: false\n        unique: false\n        description: The business timestamp in UTC when the order was successfully\n          registered in the source system and the payment was successful.\n        example: '2024-09-09T08:30:00Z'\n      order_total:\n        type: long\n        required: true\n        primary: false\n        unique: false\n        description: Total amount the smallest monetary unit (e.g., cents).\n        example: '9999'\n      customer_id:\n        type: text\n        required: false\n        primary: false\n        unique: false\n        description: Unique identifier for the customer.\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        type: text\n        format: email\n        required: true\n        primary: false\n        unique: false\n        description: The email address, as entered by the customer. The email address\n          was not verified.\n        pii: true\n        classification: sensitive\n      processed_timestamp:\n        type: timestamp\n        required: true\n        primary: false\n        unique: false\n        description: The timestamp when the record was processed by the data platform.\n        config:\n          jsonType: string\n          jsonFormat: date-time\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      lines_item_id:\n        type: text\n        required: true\n        primary: true\n        unique: true\n        description: Primary key of the lines_item_id table\n      order_id:\n        ref: '#/definitions/order_id'\n        title: Order ID\n        type: text\n        format: uuid\n        required: false\n        primary: false\n        unique: false\n        references: orders.order_id\n        description: An internal ID that identifies an order in the online shop.\n        pii: true\n        classification: restricted\n        tags:\n        - orders\n        example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n      sku:\n        ref: '#/definitions/sku'\n        title: Stock Keeping Unit\n        type: text\n        required: false\n        primary: false\n        unique: false\n        description: The purchased article number\n        pattern: ^[A-Za-z0-9]{8,14}$\n        tags:\n        - inventory\n        links:\n          wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n        example: '96385074'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    description: An internal ID that identifies an order in the online shop.\n    type: text\n    format: uuid\n    pii: true\n    classification: restricted\n    tags:\n    - orders\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    description: \"A Stock Keeping Unit (SKU) is an internal unique identifier for\\\n      \\ an article. \\nIt is typically associated with an article's barcode, such as\\\n      \\ the EAN/GTIN.\\n\"\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    tags:\n    - inventory\n    links:\n      wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n    example: '96385074'\nexamples:\n- type: csv\n  description: An example list of order records.\n  model: orders\n  data: 'order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n\n    \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n\n    \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n\n    '\n- type: csv\n  description: An example list of line items.\n  model: line_items\n  data: 'lines_item_id,order_id,sku\n\n    \"LI-1\",\"1001\",\"5901234123457\"\n\n    \"LI-2\",\"1001\",\"4001234567890\"\n\n    \"LI-3\",\"1002\",\"5901234123457\"\n\n    \"LI-4\",\"1002\",\"2001234567893\"\n\n    \"LI-5\",\"1003\",\"4001234567890\"\n\n    \"LI-6\",\"1003\",\"5001234567892\"\n\n    \"LI-7\",\"1004\",\"5901234123457\"\n\n    \"LI-8\",\"1005\",\"2001234567893\"\n\n    \"LI-9\",\"1005\",\"5001234567892\"\n\n    \"LI-10\",\"1005\",\"6001234567891\"\n\n    '\nquality:\n  type: SodaCL\n  specification:\n    checks for orders:\n    - row_count >= 5\n    - duplicate_count(order_id) = 0\n    checks for line_items:\n    - values in (order_id) must exist in orders (order_id)\n    - row_count >= 5\nservicelevels:\n  availability:\n    description: The server is available during support hours\n    percentage: 99.9%\n  retention:\n    description: Data is retained for one year\n    period: P1Y\n    unlimited: false\n  latency:\n    description: Data is available within 25 hours after the order was placed\n    threshold: 25h\n    sourceTimestampField: orders.order_timestamp\n    processedTimestampField: orders.processed_timestamp\n  freshness:\n    description: The age of the youngest row in a table.\n    threshold: 25h\n    timestampField: orders.order_timestamp\n  frequency:\n    description: Data is delivered once a day\n    type: batch\n    interval: daily\n    cron: 0 0 * * *\n  support:\n    description: The data is available during typical business hours at headquarters\n    time: 9am to 5pm in EST on business days\n    responseTime: 1h\n  backup:\n    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n    interval: weekly\n    cron: 0 0 * * 0\n    recoveryTime: 24 hours\n    recoveryPoint: 1 week\nlinks:\n  datacontractCli: https://cli.datacontract.com\ntags:\n- checkout\n- orders\n- s3\n</code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n</body>\n</html>"
  },
  {
    "path": "examples/orders-latest/datacontract.yaml",
    "content": "dataContractSpecification: 1.2.0\nid: orders-latest\ninfo:\n  title: Orders Latest\n  version: 2.0.0\n  description: |\n    Successful customer orders in the webshop.\n    All orders since 2020-01-01.\n    Orders with their line items are in their current state (no history included).\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://datacontract-example-orders-latest/v2/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"One folder per model. One file per day.\"\n    roles:\n      - name: analyst_us\n        description: Access to the data for US region\n      - name: analyst_cn\n        description: Access to the data for China region\nterms:\n  usage: |\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: |\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  policies:\n    - name: privacy-policy\n      url: https://example.com/privacy-policy\n    - name: license\n      description: External data is licensed under agreement 1234.\n      url: https://example.com/license/1234\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n        primaryKey: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n        examples:\n          - \"2024-09-09T08:30:00Z\"\n        tags: [\"business-timestamp\"]\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n        examples:\n          - 9999\n        quality:\n          - type: sql\n            description: 95% of all order total values are expected to be between 10 and 499 EUR.\n            query: |\n              SELECT quantile_cont(order_total, 0.95) AS percentile_95\n              FROM orders\n            mustBeBetween: [1000, 49900]\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer.\n        type: text\n        format: email\n        required: true\n        pii: true\n        classification: sensitive\n        quality:\n          - type: text\n            description: The email address is not verified and may be invalid.\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: email_address\n      processed_timestamp:\n        description: The timestamp when the record was processed by the data platform.\n        type: timestamp\n        required: true\n        config:\n          jsonType: string\n          jsonFormat: date-time\n    quality:\n      - type: sql\n        description: The maximum duration between two orders should be less that 3600 seconds\n        query: |\n          SELECT MAX(duration) AS max_duration FROM (SELECT EXTRACT(EPOCH FROM (order_timestamp - LAG(order_timestamp)\n          OVER (ORDER BY order_timestamp))) AS duration FROM orders)\n        mustBeLessThan: 3600\n      - type: sql\n        description: Row Count\n        query: |\n          SELECT count(*) as row_count\n          FROM orders\n        mustBeGreaterThan: 5\n    examples:\n      - |\n        order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n        \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      line_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n      order_id:\n        $ref: '#/definitions/order_id'\n        references: orders.order_id\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\n    primaryKey: [\"order_id\", \"line_item_id\"]\n    examples:\n      - |\n        line_item_id,order_id,sku\n        \"LI-1\",\"1001\",\"5901234123457\"\n        \"LI-2\",\"1001\",\"4001234567890\"\n        \"LI-3\",\"1002\",\"5901234123457\"\n        \"LI-4\",\"1002\",\"2001234567893\"\n        \"LI-5\",\"1003\",\"4001234567890\"\n        \"LI-6\",\"1003\",\"5001234567892\"\n        \"LI-7\",\"1004\",\"5901234123457\"\n        \"LI-8\",\"1005\",\"2001234567893\"\n        \"LI-9\",\"1005\",\"5001234567892\"\n        \"LI-10\",\"1005\",\"6001234567891\"\ndefinitions:\n  order_id:\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    examples:\n      - 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n    tags:\n      - orders\n  sku:\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    examples:\n      - \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article.\n      It is typically associated with an article's barcode, such as the EAN/GTIN.\n    links:\n      wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n    tags:\n      - inventory\nservicelevels:\n  availability:\n    description: The server is available during support hours\n    percentage: 99.9%\n  retention:\n    description: Data is retained for one year\n    period: P1Y\n    unlimited: false\n  latency:\n    description: Data is available within 25 hours after the order was placed\n    threshold: 25h\n    sourceTimestampField: orders.order_timestamp\n    processedTimestampField: orders.processed_timestamp\n  freshness:\n    description: The age of the youngest row in a table.\n    threshold: 25h\n    timestampField: orders.order_timestamp\n  frequency:\n    description: Data is delivered once a day\n    type: batch # or streaming\n    interval: daily # for batch, either or cron\n    cron: 0 0 * * * # for batch, either or interval\n  support:\n    description: The data is available during typical business hours at headquarters\n    time: 9am to 5pm in EST on business days\n    responseTime: 1h\n  backup:\n    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n    interval: weekly\n    cron: 0 0 * * 0\n    recoveryTime: 24 hours\n    recoveryPoint: 1 week\ntags:\n  - checkout\n  - orders\n  - s3\nlinks:\n  datacontractCli: https://cli.datacontract.com\n"
  },
  {
    "path": "examples/orders-latest-nested/datacontract.html",
    "content": "<!doctype html>\n<html class=\"h-full bg-gray-100\" lang=\"en\">\n<head>\n  <title>Data Contract</title>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  \n  <style>\n    /*\n! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box;\n  /* 1 */\n  border-width: 0;\n  /* 2 */\n  border-style: solid;\n  /* 2 */\n  border-color: #e5e7eb;\n  /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n  line-height: 1.5;\n  /* 1 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n  -moz-tab-size: 4;\n  /* 3 */\n  -o-tab-size: 4;\n     tab-size: 4;\n  /* 3 */\n  font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  /* 4 */\n  font-feature-settings: normal;\n  /* 5 */\n  font-variation-settings: normal;\n  /* 6 */\n  -webkit-tap-highlight-color: transparent;\n  /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0;\n  /* 1 */\n  line-height: inherit;\n  /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  border-top-width: 1px;\n  /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  /* 1 */\n  font-feature-settings: normal;\n  /* 2 */\n  font-variation-settings: normal;\n  /* 3 */\n  font-size: 1em;\n  /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0;\n  /* 1 */\n  border-color: inherit;\n  /* 2 */\n  border-collapse: collapse;\n  /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit;\n  /* 1 */\n  font-feature-settings: inherit;\n  /* 1 */\n  font-variation-settings: inherit;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  font-weight: inherit;\n  /* 1 */\n  line-height: inherit;\n  /* 1 */\n  letter-spacing: inherit;\n  /* 1 */\n  color: inherit;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n  padding: 0;\n  /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n  -webkit-appearance: button;\n  /* 1 */\n  background-color: transparent;\n  /* 2 */\n  background-image: none;\n  /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1;\n  /* 1 */\n  color: #9ca3af;\n  /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block;\n  /* 1 */\n  vertical-align: middle;\n  /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n  display: none;\n}\n\n*, ::before, ::after {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n  --tw-contain-size:  ;\n  --tw-contain-layout:  ;\n  --tw-contain-paint:  ;\n  --tw-contain-style:  ;\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border-width: 0;\n}\n\n.pointer-events-none {\n  pointer-events: none;\n}\n\n.visible {\n  visibility: visible;\n}\n\n.fixed {\n  position: fixed;\n}\n\n.absolute {\n  position: absolute;\n}\n\n.relative {\n  position: relative;\n}\n\n.inset-0 {\n  inset: 0px;\n}\n\n.inset-y-0 {\n  top: 0px;\n  bottom: 0px;\n}\n\n.left-0 {\n  left: 0px;\n}\n\n.right-0 {\n  right: 0px;\n}\n\n.top-0 {\n  top: 0px;\n}\n\n.z-10 {\n  z-index: 10;\n}\n\n.col-span-1 {\n  grid-column: span 1 / span 1;\n}\n\n.-mx-4 {\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.-my-2 {\n  margin-top: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.my-2 {\n  margin-top: 0.5rem;\n  margin-bottom: 0.5rem;\n}\n\n.-ml-0 {\n  margin-left: -0px;\n}\n\n.-ml-0\\.5 {\n  margin-left: -0.125rem;\n}\n\n.mb-3 {\n  margin-bottom: 0.75rem;\n}\n\n.mb-6 {\n  margin-bottom: 1.5rem;\n}\n\n.mr-1 {\n  margin-right: 0.25rem;\n}\n\n.mr-1\\.5 {\n  margin-right: 0.375rem;\n}\n\n.mr-6 {\n  margin-right: 1.5rem;\n}\n\n.mt-1 {\n  margin-top: 0.25rem;\n}\n\n.mt-2 {\n  margin-top: 0.5rem;\n}\n\n.mt-3 {\n  margin-top: 0.75rem;\n}\n\n.mt-5 {\n  margin-top: 1.25rem;\n}\n\n.mt-6 {\n  margin-top: 1.5rem;\n}\n\n.mt-8 {\n  margin-top: 2rem;\n}\n\n.mt-auto {\n  margin-top: auto;\n}\n\n.line-clamp-3 {\n  overflow: hidden;\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 3;\n}\n\n.block {\n  display: block;\n}\n\n.inline-block {\n  display: inline-block;\n}\n\n.flex {\n  display: flex;\n}\n\n.inline-flex {\n  display: inline-flex;\n}\n\n.table {\n  display: table;\n}\n\n.flow-root {\n  display: flow-root;\n}\n\n.grid {\n  display: grid;\n}\n\n.hidden {\n  display: none;\n}\n\n.h-10 {\n  height: 2.5rem;\n}\n\n.h-16 {\n  height: 4rem;\n}\n\n.h-4 {\n  height: 1rem;\n}\n\n.h-5 {\n  height: 1.25rem;\n}\n\n.h-6 {\n  height: 1.5rem;\n}\n\n.h-8 {\n  height: 2rem;\n}\n\n.h-full {\n  height: 100%;\n}\n\n.min-h-full {\n  min-height: 100%;\n}\n\n.w-1\\/12 {\n  width: 8.333333%;\n}\n\n.w-10 {\n  width: 2.5rem;\n}\n\n.w-2 {\n  width: 0.5rem;\n}\n\n.w-2\\/12 {\n  width: 16.666667%;\n}\n\n.w-4 {\n  width: 1rem;\n}\n\n.w-5 {\n  width: 1.25rem;\n}\n\n.w-6 {\n  width: 1.5rem;\n}\n\n.w-7\\/12 {\n  width: 58.333333%;\n}\n\n.w-8 {\n  width: 2rem;\n}\n\n.w-9\\/12 {\n  width: 75%;\n}\n\n.w-full {\n  width: 100%;\n}\n\n.w-screen {\n  width: 100vw;\n}\n\n.min-w-0 {\n  min-width: 0px;\n}\n\n.min-w-full {\n  min-width: 100%;\n}\n\n.max-w-7xl {\n  max-width: 80rem;\n}\n\n.flex-1 {\n  flex: 1 1 0%;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\n.transform {\n  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.grid-cols-1 {\n  grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n\n.flex-col {\n  flex-direction: column;\n}\n\n.flex-wrap {\n  flex-wrap: wrap;\n}\n\n.items-end {\n  align-items: flex-end;\n}\n\n.items-center {\n  align-items: center;\n}\n\n.items-baseline {\n  align-items: baseline;\n}\n\n.justify-center {\n  justify-content: center;\n}\n\n.justify-between {\n  justify-content: space-between;\n}\n\n.gap-1 {\n  gap: 0.25rem;\n}\n\n.gap-3 {\n  gap: 0.75rem;\n}\n\n.gap-6 {\n  gap: 1.5rem;\n}\n\n.gap-x-4 {\n  -moz-column-gap: 1rem;\n       column-gap: 1rem;\n}\n\n.gap-x-6 {\n  -moz-column-gap: 1.5rem;\n       column-gap: 1.5rem;\n}\n\n.gap-y-6 {\n  row-gap: 1.5rem;\n}\n\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-3 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n  margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-x-8 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-x-reverse: 0;\n  margin-right: calc(2rem * var(--tw-space-x-reverse));\n  margin-left: calc(2rem * calc(1 - var(--tw-space-x-reverse)));\n}\n\n.space-y-6 > :not([hidden]) ~ :not([hidden]) {\n  --tw-space-y-reverse: 0;\n  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n\n.divide-y > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-y-reverse: 0;\n  border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));\n  border-bottom-width: calc(1px * var(--tw-divide-y-reverse));\n}\n\n.divide-gray-100 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(243 244 246 / var(--tw-divide-opacity));\n}\n\n.divide-gray-200 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(229 231 235 / var(--tw-divide-opacity));\n}\n\n.divide-gray-300 > :not([hidden]) ~ :not([hidden]) {\n  --tw-divide-opacity: 1;\n  border-color: rgb(209 213 219 / var(--tw-divide-opacity));\n}\n\n.overflow-hidden {\n  overflow: hidden;\n}\n\n.overflow-x-auto {\n  overflow-x: auto;\n}\n\n.overflow-y-auto {\n  overflow-y: auto;\n}\n\n.truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.whitespace-nowrap {\n  white-space: nowrap;\n}\n\n.whitespace-pre-wrap {\n  white-space: pre-wrap;\n}\n\n.rounded-full {\n  border-radius: 9999px;\n}\n\n.rounded-lg {\n  border-radius: 0.5rem;\n}\n\n.rounded-md {\n  border-radius: 0.375rem;\n}\n\n.border-0 {\n  border-width: 0px;\n}\n\n.bg-blue-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(239 246 255 / var(--tw-bg-opacity));\n}\n\n.bg-gray-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(243 244 246 / var(--tw-bg-opacity));\n}\n\n.bg-gray-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.bg-gray-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-100 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(224 231 255 / var(--tw-bg-opacity));\n}\n\n.bg-indigo-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(79 70 229 / var(--tw-bg-opacity));\n}\n\n.bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-yellow-50 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(254 252 232 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-75 {\n  --tw-bg-opacity: 0.75;\n}\n\n.p-4 {\n  padding: 1rem;\n}\n\n.p-6 {\n  padding: 1.5rem;\n}\n\n.px-0 {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n.px-1 {\n  padding-left: 0.25rem;\n  padding-right: 0.25rem;\n}\n\n.px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n\n.px-2\\.5 {\n  padding-left: 0.625rem;\n  padding-right: 0.625rem;\n}\n\n.px-3 {\n  padding-left: 0.75rem;\n  padding-right: 0.75rem;\n}\n\n.px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n.px-6 {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.py-0 {\n  padding-top: 0px;\n  padding-bottom: 0px;\n}\n\n.py-0\\.5 {\n  padding-top: 0.125rem;\n  padding-bottom: 0.125rem;\n}\n\n.py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n\n.py-1\\.5 {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n}\n\n.py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.py-5 {\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n}\n\n.pb-4 {\n  padding-bottom: 1rem;\n}\n\n.pb-6 {\n  padding-bottom: 1.5rem;\n}\n\n.pb-7 {\n  padding-bottom: 1.75rem;\n}\n\n.pl-10 {\n  padding-left: 2.5rem;\n}\n\n.pl-3 {\n  padding-left: 0.75rem;\n}\n\n.pl-4 {\n  padding-left: 1rem;\n}\n\n.pr-2 {\n  padding-right: 0.5rem;\n}\n\n.pr-3 {\n  padding-right: 0.75rem;\n}\n\n.pr-4 {\n  padding-right: 1rem;\n}\n\n.pt-4 {\n  padding-top: 1rem;\n}\n\n.pt-5 {\n  padding-top: 1.25rem;\n}\n\n.text-left {\n  text-align: left;\n}\n\n.text-center {\n  text-align: center;\n}\n\n.align-middle {\n  vertical-align: middle;\n}\n\n.font-mono {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n.text-2xl {\n  font-size: 1.5rem;\n  line-height: 2rem;\n}\n\n.text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n\n.text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n\n.text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n\n.text-xs {\n  font-size: 0.75rem;\n  line-height: 1rem;\n}\n\n.font-bold {\n  font-weight: 700;\n}\n\n.font-medium {\n  font-weight: 500;\n}\n\n.font-semibold {\n  font-weight: 600;\n}\n\n.italic {\n  font-style: italic;\n}\n\n.leading-5 {\n  line-height: 1.25rem;\n}\n\n.leading-6 {\n  line-height: 1.5rem;\n}\n\n.leading-7 {\n  line-height: 1.75rem;\n}\n\n.text-blue-600 {\n  --tw-text-opacity: 1;\n  color: rgb(37 99 235 / var(--tw-text-opacity));\n}\n\n.text-gray-400 {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.text-gray-500 {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.text-gray-600 {\n  --tw-text-opacity: 1;\n  color: rgb(75 85 99 / var(--tw-text-opacity));\n}\n\n.text-gray-800 {\n  --tw-text-opacity: 1;\n  color: rgb(31 41 55 / var(--tw-text-opacity));\n}\n\n.text-gray-900 {\n  --tw-text-opacity: 1;\n  color: rgb(17 24 39 / var(--tw-text-opacity));\n}\n\n.text-sky-500 {\n  --tw-text-opacity: 1;\n  color: rgb(14 165 233 / var(--tw-text-opacity));\n}\n\n.text-white {\n  --tw-text-opacity: 1;\n  color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-yellow-600 {\n  --tw-text-opacity: 1;\n  color: rgb(202 138 4 / var(--tw-text-opacity));\n}\n\n.shadow {\n  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-sm {\n  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-xl {\n  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.ring-1 {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-inset {\n  --tw-ring-inset: inset;\n}\n\n.ring-black {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(0 0 0 / var(--tw-ring-opacity));\n}\n\n.ring-blue-500\\/10 {\n  --tw-ring-color: rgb(59 130 246 / 0.1);\n}\n\n.ring-gray-300 {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(209 213 219 / var(--tw-ring-opacity));\n}\n\n.ring-gray-500\\/10 {\n  --tw-ring-color: rgb(107 114 128 / 0.1);\n}\n\n.ring-gray-900\\/5 {\n  --tw-ring-color: rgb(17 24 39 / 0.05);\n}\n\n.ring-yellow-500\\/10 {\n  --tw-ring-color: rgb(234 179 8 / 0.1);\n}\n\n.ring-opacity-5 {\n  --tw-ring-opacity: 0.05;\n}\n\n.transition-all {\n  transition-property: all;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.transition-opacity {\n  transition-property: opacity;\n  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n  transition-duration: 150ms;\n}\n\n.placeholder\\:text-gray-400::-moz-placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.placeholder\\:text-gray-400::placeholder {\n  --tw-text-opacity: 1;\n  color: rgb(156 163 175 / var(--tw-text-opacity));\n}\n\n.hover\\:bg-gray-50:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 250 251 / var(--tw-bg-opacity));\n}\n\n.hover\\:bg-indigo-500:hover {\n  --tw-bg-opacity: 1;\n  background-color: rgb(99 102 241 / var(--tw-bg-opacity));\n}\n\n.hover\\:text-gray-500:hover {\n  --tw-text-opacity: 1;\n  color: rgb(107 114 128 / var(--tw-text-opacity));\n}\n\n.hover\\:text-gray-700:hover {\n  --tw-text-opacity: 1;\n  color: rgb(55 65 81 / var(--tw-text-opacity));\n}\n\n.focus\\:ring-2:focus {\n  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.focus\\:ring-inset:focus {\n  --tw-ring-inset: inset;\n}\n\n.focus\\:ring-indigo-600:focus {\n  --tw-ring-opacity: 1;\n  --tw-ring-color: rgb(79 70 229 / var(--tw-ring-opacity));\n}\n\n.focus-visible\\:outline:focus-visible {\n  outline-style: solid;\n}\n\n.focus-visible\\:outline-2:focus-visible {\n  outline-width: 2px;\n}\n\n.focus-visible\\:outline-offset-2:focus-visible {\n  outline-offset: 2px;\n}\n\n.focus-visible\\:outline-indigo-600:focus-visible {\n  outline-color: #4f46e5;\n}\n\n@media (min-width: 640px) {\n  .sm\\:col-span-1 {\n    grid-column: span 1 / span 1;\n  }\n\n  .sm\\:col-span-2 {\n    grid-column: span 2 / span 2;\n  }\n\n  .sm\\:-mx-6 {\n    margin-left: -1.5rem;\n    margin-right: -1.5rem;\n  }\n\n  .sm\\:my-8 {\n    margin-top: 2rem;\n    margin-bottom: 2rem;\n  }\n\n  .sm\\:ml-6 {\n    margin-left: 1.5rem;\n  }\n\n  .sm\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .sm\\:mt-5 {\n    margin-top: 1.25rem;\n  }\n\n  .sm\\:mt-6 {\n    margin-top: 1.5rem;\n  }\n\n  .sm\\:flex {\n    display: flex;\n  }\n\n  .sm\\:w-4\\/5 {\n    width: 80%;\n  }\n\n  .sm\\:w-72 {\n    width: 18rem;\n  }\n\n  .sm\\:grid-cols-2 {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  .sm\\:flex-row {\n    flex-direction: row;\n  }\n\n  .sm\\:flex-col {\n    flex-direction: column;\n  }\n\n  .sm\\:flex-wrap {\n    flex-wrap: wrap;\n  }\n\n  .sm\\:items-center {\n    align-items: center;\n  }\n\n  .sm\\:space-x-6 > :not([hidden]) ~ :not([hidden]) {\n    --tw-space-x-reverse: 0;\n    margin-right: calc(1.5rem * var(--tw-space-x-reverse));\n    margin-left: calc(1.5rem * calc(1 - var(--tw-space-x-reverse)));\n  }\n\n  .sm\\:truncate {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .sm\\:rounded-lg {\n    border-radius: 0.5rem;\n  }\n\n  .sm\\:p-0 {\n    padding: 0px;\n  }\n\n  .sm\\:p-6 {\n    padding: 1.5rem;\n  }\n\n  .sm\\:px-0 {\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n\n  .sm\\:px-6 {\n    padding-left: 1.5rem;\n    padding-right: 1.5rem;\n  }\n\n  .sm\\:pl-6 {\n    padding-left: 1.5rem;\n  }\n\n  .sm\\:text-3xl {\n    font-size: 1.875rem;\n    line-height: 2.25rem;\n  }\n\n  .sm\\:text-sm {\n    font-size: 0.875rem;\n    line-height: 1.25rem;\n  }\n\n  .sm\\:leading-6 {\n    line-height: 1.5rem;\n  }\n\n  .sm\\:tracking-tight {\n    letter-spacing: -0.025em;\n  }\n}\n\n@media (min-width: 768px) {\n  .md\\:order-1 {\n    order: 1;\n  }\n\n  .md\\:order-2 {\n    order: 2;\n  }\n\n  .md\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .md\\:flex {\n    display: flex;\n  }\n\n  .md\\:items-center {\n    align-items: center;\n  }\n\n  .md\\:justify-between {\n    justify-content: space-between;\n  }\n}\n\n@media (min-width: 1024px) {\n  .lg\\:-mx-8 {\n    margin-left: -2rem;\n    margin-right: -2rem;\n  }\n\n  .lg\\:ml-4 {\n    margin-left: 1rem;\n  }\n\n  .lg\\:mt-0 {\n    margin-top: 0px;\n  }\n\n  .lg\\:flex {\n    display: flex;\n  }\n\n  .lg\\:grid-cols-3 {\n    grid-template-columns: repeat(3, minmax(0, 1fr));\n  }\n\n  .lg\\:items-center {\n    align-items: center;\n  }\n\n  .lg\\:justify-between {\n    justify-content: space-between;\n  }\n\n  .lg\\:px-8 {\n    padding-left: 2rem;\n    padding-right: 2rem;\n  }\n}\n  </style>\n</head>\n<body class=\"h-full\">\n\n<div class=\"min-h-full flex flex-col\">\n\n  <nav class=\"bg-white shadow-sm\">\n    <div class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\">\n      <div class=\"flex h-16 justify-between\">\n        <div class=\"flex\">\n          <div class=\"flex flex-shrink-0 items-center mr-6\">\n            <a class=\"text-xl text-gray-900 font-semibold\" href=\"/\">\n              Data Contracts\n            </a>\n          </div>\n        </div>\n        <div class=\"hidden sm:ml-6 sm:flex sm:items-center\">\n          <a href=\"https://datacontract.com\" class=\"text-sky-500 hover:text-gray-700 text-sm font-semibold\" target=\"_blank\">datacontract.com</a>\n        </div>\n      </div>\n    </div>\n  </nav>\n\n  <main class=\"pb-7\">\n\n    <div class=\"pt-5 mx-auto max-w-7xl sm:px-6 lg:px-8\">\n      <div>\n        <div class=\"md:flex md:items-center md:justify-between px-4 sm:px-0\">\n          <div class=\"min-w-0 flex-1\">\n            <h2 class=\"text-2xl font-bold leading-7 text-gray-900 sm:truncate sm:text-3xl sm:tracking-tight\">\n              Data Contract</h2>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              urn:orders-latest-nested\n            </div>\n            <div class=\"mt-1 flex flex-col sm:mt-0 sm:flex-row sm:flex-wrap sm:space-x-6\">\n              \n            </div>\n          </div>\n          <div class=\"mt-5 flex lg:mt-0 lg:ml-4 gap-3 items-center\">\n            <button\n              type=\"button\"\n              onclick=\"document.getElementById('dialog-datacontract-yaml').showModal()\"\n              class=\"inline-flex items-center rounded-md bg-white px-3 py-2 text-sm font-semibold text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50\">\n              <svg class=\"-ml-0.5 mr-1.5 h-5 w-5 text-gray-600\" viewBox=\"-0.5 -0.5 24 24\">\n                <path d=\"m4.3125 8.145833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 11.020833333333334 9.104166666666668 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 5.270833333333334 6.708333333333334 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 13.895833333333334 7.1875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m4.3125 16.770833333333336 3.8333333333333335 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"M8.145833333333334 22.520833333333336h-6.708333333333334a0.9583333333333334 0.9583333333333334 0 0 1 -0.9583333333333334 -0.9583333333333334v-20.125a0.9583333333333334 0.9583333333333334 0 0 1 0.9583333333333334 -0.9583333333333334h12.739125a0.9583333333333334 0.9583333333333334 0 0 1 0.6775416666666667 0.28079166666666666L18.406708333333334 4.3125a0.9583333333333334 0.9583333333333334 0 0 1 0.28079166666666666 0.6775416666666667V8.145833333333334\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m15.045833333333333 21.370833333333334 -4.025 1.15 1.15 -4.025 6.879875 -6.879875a2.032625 2.032625 0 0 1 2.875 2.875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m18.188208333333332 12.478458333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path><path d=\"m12.170833333333333 18.495833333333334 2.875 2.875\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1\"></path>\n              </svg>\n              Show YAML\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div>\n        <div class=\"space-y-6 mt-6\">\n          <section id=\"information\">\n            <div class=\" px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"info\">Info</h1>\n  <p class=\"text-sm text-gray-500\">Information about the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    \n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Title</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">Orders Latest (Nested)</dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Version</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">1.0.0</dd>\n      </div>\n\n      \n\n      \n      <div class=\"sm:col-span-2\">\n        <dt class=\"text-sm font-medium text-gray-500\">Description</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Successful customer orders in the webshop. \nAll orders since 2020-01-01. \nOrders with their line items are in their current state (no history included).\n</span>\n        </dd>\n      </div>\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Owner</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">\n          <span>Checkout Team</span>\n        </dd>\n      </div>\n      \n\n      \n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Contact</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\">\n          \n            John Doe (Data Product Owner)\n          \n          \n          \n            <div>\n              <a href=\"https://teams.microsoft.com/l/channel/example/checkout\" class=\"text-sky-500 hover:text-gray-700\">https://teams.microsoft.com/l/channel/example/checkout</a>\n            </div>\n          \n        </dd>\n      </div>\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n\n\n          \n\n\n          \n          <section id=\"terms\">\n            <div class=\"px-4 sm:px-0\">\n  <h1 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"terms\">Terms</h1>\n  <p class=\"text-sm text-gray-500\">Terms and conditions of the data contract</p>\n</div>\n<div class=\"mt-2 overflow-hidden shadow sm:rounded-lg bg-white\">\n\n  <div class=\"px-4 py-5 sm:px-6\">\n\n    <dl class=\"grid grid-cols-1 gap-x-4 gap-y-6 sm:grid-cols-2\">\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Usage</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Data can be used for reports, analytics and machine learning use cases.\nOrder may be linked and joined by other tables\n</span>\n        </dd>\n      </div>\n\n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Limitations</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">Not suitable for real-time use cases.\nData may not be used to identify individual customers.\nMax data processing per day: 10 TiB\n</span>\n        </dd>\n      </div>\n\n      \n      <div class=\"sm:col-span-1\">\n        <dt class=\"text-sm font-medium text-gray-500\">Billing</dt>\n        <dd class=\"mt-1 text-sm text-gray-900\" >\n          <span class=\"whitespace-pre-wrap\">5000 USD per month</span>\n        </dd>\n      </div>\n      \n\n      \n        <div class=\"sm:col-span-1\">\n          <dt class=\"text-sm font-medium text-gray-500\">Notice Period</dt>\n          <dd class=\"mt-1 text-sm text-gray-900 flex\" >\n            <span class=\"whitespace-pre-wrap\">P3M</span>\n          </dd>\n        </div>\n      \n\n      \n\n    </dl>\n  </div>\n</div>\n          </section>\n          \n\n\n          <section id=\"models\">\n            <div class=\"flex justify-between\">\n              <div class=\"px-4 sm:px-0\">\n                <h1 class=\"text-base font-semibold leading-6 text-gray-900\">\n                  Data Model\n                </h1>\n                <p class=\"text-sm text-gray-500\">The logical data model</p>\n              </div>\n            </div>\n\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>orders</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">One record per order. Includes cancelled and deleted orders.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Order ID</span><br>\n      \n      <span class=\"font-mono flex\">order_id <a href=\"#/definitions/order_id\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n    </div>\n    \n\n    <div>\n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">primary</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">unique</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:uuid</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">order_timestamp</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    timestamp\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">order_total</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    long\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Total amount the smallest monetary unit (e.g., cents).</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">customer_id</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Unique identifier for the customer.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">minLength:10</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">maxLength:20</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">customer_email_address</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The email address, as entered by the customer. The email address was not verified.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:email</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">address</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    object\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The delivery address of the customer.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n\n  \n<tr class=\"bg-gray-50\">\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12 flex items-center gap-x-4\">\n    \n    \n    <div class=\"w-2\">&nbsp;</div>\n    \n    <div>\n      &#x21b3;\n    </div>\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">street</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The street name and house number.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n\n  \n<tr class=\"bg-gray-50\">\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12 flex items-center gap-x-4\">\n    \n    \n    <div class=\"w-2\">&nbsp;</div>\n    \n    <div>\n      &#x21b3;\n    </div>\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">city</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The city name.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n\n  \n<tr class=\"bg-gray-50\">\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12 flex items-center gap-x-4\">\n    \n    \n    <div class=\"w-2\">&nbsp;</div>\n    \n    <div>\n      &#x21b3;\n    </div>\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">additional_lines</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    array\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Additional address lines, such as floor, apartment, or company name.</div>\n    \n\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n\n<!-- Mark the end of the contained fields -->\n<tr style=\"--tw-divide-y-reverse: 2\">\n</tr>\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">processed_timestamp</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    timestamp\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The timestamp when the record was processed by the data platform.</div>\n    \n\n    \n\n    <div>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n\n            <div class=\"mt-3 flow-root\">\n              <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n                <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n                  <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n                    <table class=\"min-w-full divide-y divide-gray-300\">\n                      <thead class=\"bg-gray-50\">\n                      <tr>\n                        <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n                          <span>line_items</span>\n                          <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">table</span>\n                          <div class=\"text-sm font-medium text-gray-500\">A single article that is part of an order.</div>\n                        </th>\n\n                      </tr>\n                      </thead>\n                      <tbody class=\"divide-y divide-gray-200 bg-white\">\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span class=\"font-mono flex\">lines_item_id</span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">Primary key of the lines_item_id table</div>\n    \n\n    \n\n    <div>\n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">primary</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">required</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">unique</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Order ID</span><br>\n      \n      <span class=\"font-mono flex\">order_id <a href=\"#/definitions/order_id\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n    </div>\n    \n\n    <div>\n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">format:uuid</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                        \n<tr>\n  <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n\n    <div class=\"py-2 text-sm\">\n      \n      <span>Stock Keeping Unit</span><br>\n      \n      <span class=\"font-mono flex\">sku <a href=\"#/definitions/sku\">\n        <svg title=\"Definition\" class=\"mr-1.5 h-5 w-5 flex-shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"-0.75 -0.75 24 24\"><defs></defs><path d=\"M3.046875 5.15625h16.40625s0.9375 0 0.9375 0.9375v10.3125s0 0.9375 -0.9375 0.9375H3.046875s-0.9375 0 -0.9375 -0.9375v-10.3125s0 -0.9375 0.9375 -0.9375\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 10.3125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"m12.568125 13.125 4.6875 0\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path><path d=\"M5.068124999999999 8.4375h4.6875v4.6875h-4.6875Z\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\"></path></svg>\n      </a></span>\n    </div>\n  </td>\n  <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n    \n    text\n    \n  </td>\n  <td class=\"px-3 py-2 text-sm text-gray-500 w-7/12\">\n    \n    <div class=\"text-gray-500\">The purchased article number</div>\n    \n\n    \n    <div class=\"mt-1 italic\">\n      Example: <span class=\"font-mono\">96385074</span>\n    </div>\n    \n\n    <div>\n      \n      \n      \n      \n      \n      \n      \n      <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">pattern:^[A-Za-z0-9]{8,14}$</span>\n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n      \n    </div>\n  </td>\n</tr>\n\n\n                      \n                      </tbody>\n                    </table>\n                  </div>\n                </div>\n              </div>\n            </div>\n            \n          </section>\n\n          \n          <section id=\"definitions\">\n            <div class=\"px-4 sm:px-0\">\n              <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Definitions</h1>\n              <p class=\"text-sm text-gray-500\">Domain specific definitions in the data contract</p>\n            </div>\n\n            \n            <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>order_id</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">checkout</span>\n              <div class=\"text-sm font-medium text-gray-500\">An internal ID that identifies an order in the online shop.</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr id=\"/definitions/order_id\">\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n                <div class=\"py-2 text-sm\">\n                  \n                  <div>Order ID</div>\n                  \n                  <div class=\"font-mono\">order_id</div>\n                </div>\n              </td>\n              <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                <div class=\"py-2 text-sm\">\n                  text\n                  \n                    <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">uuid</span>\n                  \n                </div>\n              </td>\n              <td class=\"px-3 py-2 text-sm text-gray-500 w-9/12\">\n                \n                <div class=\"mt-1\">\n                  <span class=\"text-gray-600 font-medium\">Example:</span> <span class=\"font-mono\">243c25e5-a081-43a9-aeab-6d5d5b6cb5e2</span>\n                </div>\n                \n                \n                \n                <div>\n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-blue-50 px-1 py-1 text-xs font-medium text-blue-600 ring-1 ring-inset ring-blue-500/10 mr-1 mt-1\">restricted</span>\n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-yellow-50 px-1 py-1 text-xs font-medium text-yellow-600 ring-1 ring-inset ring-yellow-500/10 mr-1 mt-1\">PII</span>\n                  \n                  \n                  \n                </div>\n              </td>\n\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n            <div class=\"mt-3 flow-root\">\n  <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n    <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n      <div class=\"overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg\">\n\n        <table class=\"min-w-full divide-y divide-gray-300\">\n          <thead class=\"bg-gray-50\">\n          <tr>\n            <th scope=\"colgroup\" colspan=\"3\" class=\"py-2 pl-4 pr-3 text-left font-semibold text-gray-900 sm:pl-6\">\n              <span>sku</span>\n              <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10\">inventory</span>\n              <div class=\"text-sm font-medium text-gray-500\">A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \nIt is typically associated with an article's barcode, such as the EAN/GTIN.\n</div>\n            </th>\n          </tr>\n          </thead>\n          <tbody class=\"divide-y divide-gray-200 bg-white\">\n            <tr id=\"/definitions/sku\">\n              <td class=\"whitespace-nowrap py-2 pl-4 pr-2 text-sm font-medium text-gray-900 sm:pl-6 w-2/12\">\n                <div class=\"py-2 text-sm\">\n                  \n                  <div>Stock Keeping Unit</div>\n                  \n                  <div class=\"font-mono\">sku</div>\n                </div>\n              </td>\n              <td class=\"whitespace-nowrap px-1 py-2 text-sm text-gray-500 w-1/12\">\n                <div class=\"py-2 text-sm\">\n                  text\n                  \n                </div>\n              </td>\n              <td class=\"px-3 py-2 text-sm text-gray-500 w-9/12\">\n                \n                <div class=\"mt-1\">\n                  <span class=\"text-gray-600 font-medium\">Example:</span> <span class=\"font-mono\">96385074</span>\n                </div>\n                \n                \n                \n                <div>\n                  \n                  \n                  \n                  <span class=\"inline-flex items-center rounded-md bg-gray-50 px-1 py-1 text-xs font-medium text-gray-600 ring-1 ring-inset ring-gray-500/10 mr-1 mt-1\">pattern:^[A-Za-z0-9]{8,14}$</span>\n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                  \n                </div>\n              </td>\n\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</div>\n            \n          </section>\n          \n\n          \n\n          \n\n          \n\n        </div>\n      </div>\n\n      <div class=\"mt-6 text-sm text-gray-400\">\n        Created at 27 Jun 2024 14:50:06 UTC with <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500\">Data Contract CLI</a> v0.10.8\n      </div>\n\n    </div>\n  </main>\n\n  <dialog  id=\"dialog-datacontract-yaml\" class=\"relative z-10\" aria-labelledby=\"modal-title\" aria-modal=\"true\">\n    <div class=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"></div>\n\n    <div class=\"fixed inset-0 z-10 w-screen overflow-y-auto\">\n      <div class=\"flex min-h-full items-end justify-center p-4 text-center sm:items-center sm:p-0\">\n        <div class=\"relative transform rounded-lg bg-white px-4 pb-4 pt-5 text-left shadow-xl transition-all sm:my-8 sm:w-4/5 sm:p-6\">\n          <div class=\"absolute right-0 top-0 pr-4 pt-4\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\" class=\"rounded-md bg-white text-gray-400 hover:text-gray-500\">\n              <span class=\"sr-only\">Close</span>\n              <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n              </svg>\n            </button>\n          </div>\n          <div>\n            <div class=\"mt-3 mb-3 text-center sm:mt-5\">\n\n              <h3 class=\"text-base font-semibold leading-6 text-gray-900\" id=\"modal-title\">Data Contract YAML</h3>\n            </div>\n            <pre class=\"overflow-x-auto text-sm bg-gray-50 p-4\"><code>dataContractSpecification: 0.9.3\nid: urn:orders-latest-nested\ninfo:\n  title: Orders Latest (Nested)\n  version: 1.0.0\n  description: \"Successful customer orders in the webshop. \\nAll orders since 2020-01-01.\\\n    \\ \\nOrders with their line items are in their current state (no history included).\\n\"\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nterms:\n  usage: 'Data can be used for reports, analytics and machine learning use cases.\n\n    Order may be linked and joined by other tables\n\n    '\n  limitations: 'Not suitable for real-time use cases.\n\n    Data may not be used to identify individual customers.\n\n    Max data processing per day: 10 TiB\n\n    '\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        ref: '#/definitions/order_id'\n        title: Order ID\n        type: text\n        format: uuid\n        required: true\n        primary: true\n        unique: true\n        description: An internal ID that identifies an order in the online shop.\n        pii: true\n        classification: restricted\n        example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n      order_timestamp:\n        type: timestamp\n        required: true\n        primary: false\n        unique: false\n        description: The business timestamp in UTC when the order was successfully\n          registered in the source system and the payment was successful.\n      order_total:\n        type: long\n        required: true\n        primary: false\n        unique: false\n        description: Total amount the smallest monetary unit (e.g., cents).\n      customer_id:\n        type: text\n        required: false\n        primary: false\n        unique: false\n        description: Unique identifier for the customer.\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        type: text\n        format: email\n        required: true\n        primary: false\n        unique: false\n        description: The email address, as entered by the customer. The email address\n          was not verified.\n      address:\n        type: object\n        required: false\n        primary: false\n        unique: false\n        description: The delivery address of the customer.\n        fields:\n          street:\n            type: text\n            required: false\n            primary: false\n            unique: false\n            description: The street name and house number.\n          city:\n            type: text\n            required: false\n            primary: false\n            unique: false\n            description: The city name.\n          additional_lines:\n            type: array\n            required: false\n            primary: false\n            unique: false\n            description: Additional address lines, such as floor, apartment, or company\n              name.\n            items:\n              type: text\n              required: false\n              primary: false\n              unique: false\n              description: Additional line\n      processed_timestamp:\n        type: timestamp\n        required: true\n        primary: false\n        unique: false\n        description: The timestamp when the record was processed by the data platform.\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      lines_item_id:\n        type: text\n        required: true\n        primary: true\n        unique: true\n        description: Primary key of the lines_item_id table\n      order_id:\n        ref: '#/definitions/order_id'\n        title: Order ID\n        type: text\n        format: uuid\n        required: false\n        primary: false\n        unique: false\n        references: orders.order_id\n        description: An internal ID that identifies an order in the online shop.\n        pii: true\n        classification: restricted\n        example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n      sku:\n        ref: '#/definitions/sku'\n        title: Stock Keeping Unit\n        type: text\n        required: false\n        primary: false\n        unique: false\n        description: The purchased article number\n        pattern: ^[A-Za-z0-9]{8,14}$\n        example: '96385074'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    description: An internal ID that identifies an order in the online shop.\n    type: text\n    format: uuid\n    pii: true\n    classification: restricted\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    description: \"A Stock Keeping Unit (SKU) is an internal unique identifier for\\\n      \\ an article. \\nIt is typically associated with an article's barcode, such as\\\n      \\ the EAN/GTIN.\\n\"\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    example: '96385074'\n</code></pre>\n          </div>\n          <div class=\"mt-5 sm:mt-6\">\n            <button type=\"button\" onclick=\"document.getElementById('dialog-datacontract-yaml').close()\"\n                    class=\"inline-flex w-full justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600\">Close</button>\n          </div>\n        </div>\n      </div>\n    </div>\n  </dialog>\n\n\n  <footer class=\"bg-white mt-auto text-sm text-gray-400\">\n    <div class=\"mx-auto max-w-7xl py-5 px-6 md:flex md:items-center md:justify-between lg:px-8\">\n      <div class=\"flex justify-center space-x-6 md:order-2\">\n        <div>\n          <a href=\"https://cli.datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract CLI</a>\n\n          <a href=\"https://datacontract.com\" class=\"text-gray-400 hover:text-gray-500 px-2\">Data Contract Specification</a>\n        </div>\n\n\n      </div>\n      <div class=\"mt-8 md:order-1 md:mt-0\">\n        <p class=\"text-center leading-5 text-gray-400\">\n          Supported with ❤️ by <a href=\"https://datamesh-manager.com\" class=\"text-gray-400 hover:text-gray-500\">Data Mesh Manager</a>\n        </p>\n      </div>\n    </div>\n\n  </footer>\n\n</div>\n\n</body>\n</html>"
  },
  {
    "path": "examples/orders-latest-nested/datacontract.yaml",
    "content": "dataContractSpecification: 0.9.3\nid: urn:orders-latest-nested\ninfo:\n  title: Orders Latest (Nested)\n  version: 1.0.0\n  description: |\n    Successful customer orders in the webshop. \n    All orders since 2020-01-01. \n    Orders with their line items are in their current state (no history included).\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nterms:\n  usage: |\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: |\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n        primary: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer. The email address was not verified.\n        type: text\n        format: email\n        required: true\n      address:\n        type: object\n        description: The delivery address of the customer.\n        fields:\n          street:\n            description: The street name and house number.\n            type: text\n          city:\n            description: The city name.\n            type: text\n          additional_lines:\n            description: Additional address lines, such as floor, apartment, or company name.\n            type: array\n            items:\n              type: text\n              description: Additional line\n      processed_timestamp:\n        description: The timestamp when the record was processed by the data platform.\n        type: timestamp\n        required: true\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      lines_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n        unique: true\n        primary: true\n      order_id:\n        $ref: '#/definitions/order_id'\n        references: orders.order_id\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    example: \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \n      It is typically associated with an article's barcode, such as the EAN/GTIN.\n"
  },
  {
    "path": "examples/time-example/datacontract.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Time Data Type Example - Data Contract Specification v1.2.1</title>\n    <style>\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n            line-height: 1.6;\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 20px;\n            background-color: #f8f9fa;\n        }\n        .container {\n            background: white;\n            padding: 30px;\n            border-radius: 8px;\n            box-shadow: 0 2px 10px rgba(0,0,0,0.1);\n        }\n        h1 {\n            color: #2c3e50;\n            border-bottom: 3px solid #3498db;\n            padding-bottom: 10px;\n        }\n        h2 {\n            color: #34495e;\n            margin-top: 30px;\n        }\n        h3 {\n            color: #7f8c8d;\n        }\n        .field {\n            background: #f8f9fa;\n            padding: 15px;\n            margin: 10px 0;\n            border-left: 4px solid #3498db;\n            border-radius: 4px;\n        }\n        .field-name {\n            font-weight: bold;\n            color: #2c3e50;\n        }\n        .field-type {\n            color: #e74c3c;\n            font-weight: bold;\n        }\n        .field-description {\n            color: #7f8c8d;\n            margin: 5px 0;\n        }\n        .examples {\n            background: #ecf0f1;\n            padding: 10px;\n            border-radius: 4px;\n            margin: 10px 0;\n        }\n        .example-item {\n            background: white;\n            padding: 8px;\n            margin: 5px 0;\n            border-radius: 3px;\n            font-family: monospace;\n            border-left: 3px solid #27ae60;\n        }\n        .version-badge {\n            background: #3498db;\n            color: white;\n            padding: 5px 10px;\n            border-radius: 15px;\n            font-size: 0.9em;\n            display: inline-block;\n            margin-bottom: 20px;\n        }\n        .info-section {\n            background: #e8f4fd;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n        }\n        .warning {\n            background: #fff3cd;\n            border: 1px solid #ffeaa7;\n            color: #856404;\n            padding: 15px;\n            border-radius: 4px;\n            margin: 20px 0;\n        }\n        .use-case {\n            background: #d4edda;\n            border: 1px solid #c3e6cb;\n            color: #155724;\n            padding: 15px;\n            border-radius: 4px;\n            margin: 15px 0;\n        }\n        .model-section {\n            background: #f8f9fa;\n            padding: 20px;\n            border-radius: 8px;\n            margin: 20px 0;\n            border-left: 4px solid #28a745;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"version-badge\">Data Contract Specification v1.2.1</div>\n        <h1>Time Data Type Example</h1>\n        \n        <div class=\"info-section\">\n            <h2>Overview</h2>\n            <p>This example demonstrates the usage of the new <strong>time</strong> data type introduced in Data Contract Specification v1.2.1. The time data type is specifically designed for storing time values without date information, making it perfect for business hours, schedules, and time-based data.</p>\n        </div>\n\n        <div class=\"warning\">\n            <strong>Note:</strong> The <code>time</code> data type may not be supported by all server types. Please check your specific data platform's documentation for compatibility.\n        </div>\n\n        <h2>Data Contract Details</h2>\n        <ul>\n            <li><strong>ID:</strong> time-demo</li>\n            <li><strong>Title:</strong> Time Data Type Example</li>\n            <li><strong>Version:</strong> 1.0.0</li>\n            <li><strong>Owner:</strong> Data Contract Team</li>\n        </ul>\n\n        <div class=\"model-section\">\n            <h2>Model: business_hours</h2>\n            <p>This model demonstrates how to use the time data type for business hours and schedules.</p>\n\n            <div class=\"field\">\n                <div class=\"field-name\">location_id</div>\n                <div class=\"field-type\">type: string</div>\n                <div class=\"field-description\">Unique identifier for the business location</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"loc_001\"</div>\n                    <div class=\"example-item\">\"loc_002\"</div>\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <div class=\"field-name\">opening_time</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">Daily opening time for the business</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"09:00:00\"</div>\n                    <div class=\"example-item\">\"08:30:00\"</div>\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <div class=\"field-name\">closing_time</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">Daily closing time for the business</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"17:00:00\"</div>\n                    <div class=\"example-item\">\"21:00:00\"</div>\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <div class=\"field-name\">lunch_start</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">Start time of lunch break</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"12:00:00\"</div>\n                    <div class=\"example-item\">\"12:30:00\"</div>\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <div class=\"field-name\">lunch_end</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">End time of lunch break</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"13:00:00\"</div>\n                    <div class=\"example-item\">\"13:30:00\"</div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"model-section\">\n            <h2>Model: shift_schedules</h2>\n            <p>This model demonstrates time data type usage for employee shift schedules.</p>\n\n            <div class=\"field\">\n                <div class=\"field-name\">shift_start</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">Start time of the employee's shift</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"08:00:00\"</div>\n                    <div class=\"example-item\">\"16:00:00\"</div>\n                </div>\n            </div>\n\n            <div class=\"field\">\n                <div class=\"field-name\">shift_end</div>\n                <div class=\"field-type\">type: time</div>\n                <div class=\"field-description\">End time of the employee's shift</div>\n                <div class=\"examples\">\n                    <strong>Examples:</strong>\n                    <div class=\"example-item\">\"16:00:00\"</div>\n                    <div class=\"example-item\">\"00:00:00\"</div>\n                </div>\n            </div>\n        </div>\n\n        <h2>Sample Data</h2>\n        <div class=\"examples\">\n            <strong>Business Hours CSV Example:</strong>\n            <div class=\"example-item\">location_id,location_name,opening_time,closing_time,lunch_start,lunch_end</div>\n            <div class=\"example-item\">\"loc_001\",\"Downtown Store\",\"09:00:00\",\"17:00:00\",\"12:00:00\",\"13:00:00\"</div>\n            <div class=\"example-item\">\"loc_002\",\"Mall Branch\",\"08:30:00\",\"21:00:00\",\"12:30:00\",\"13:30:00\"</div>\n            <div class=\"example-item\">\"loc_003\",\"24/7 Store\",\"00:00:00\",\"23:59:59\",,</div>\n        </div>\n\n        <div class=\"examples\">\n            <strong>Shift Schedules CSV Example:</strong>\n            <div class=\"example-item\">employee_id,shift_start,shift_end,break_start,break_end</div>\n            <div class=\"example-item\">\"emp_001\",\"08:00:00\",\"16:00:00\",\"12:00:00\",\"13:00:00\"</div>\n            <div class=\"example-item\">\"emp_002\",\"16:00:00\",\"00:00:00\",\"20:00:00\",\"21:00:00\"</div>\n            <div class=\"example-item\">\"emp_003\",\"00:00:00\",\"08:00:00\",,</div>\n        </div>\n\n        <h2>Time Data Type Characteristics</h2>\n        <ul>\n            <li><strong>Format:</strong> Typically follows ISO 8601 time format (HH:MM:SS)</li>\n            <li><strong>No Date Information:</strong> Contains only time components, no date</li>\n            <li><strong>24-hour Format:</strong> Uses 24-hour clock format</li>\n            <li><strong>Optional Seconds:</strong> Can include or exclude seconds based on precision needs</li>\n        </ul>\n\n        <h2>Use Cases</h2>\n        <div class=\"use-case\">\n            <h3>Business Operations</h3>\n            <ul>\n                <li>Store opening and closing hours</li>\n                <li>Service availability times</li>\n                <li>Break and lunch schedules</li>\n                <li>Operating hours for different days</li>\n            </ul>\n        </div>\n\n        <div class=\"use-case\">\n            <h3>Employee Management</h3>\n            <ul>\n                <li>Shift start and end times</li>\n                <li>Break periods</li>\n                <li>Work schedule definitions</li>\n                <li>Time tracking data</li>\n            </ul>\n        </div>\n\n        <div class=\"use-case\">\n            <h3>Event Scheduling</h3>\n            <ul>\n                <li>Meeting start and end times</li>\n                <li>Event schedules</li>\n                <li>Appointment times</li>\n                <li>Class schedules</li>\n            </ul>\n        </div>\n\n        <div class=\"use-case\">\n            <h3>Transportation</h3>\n            <ul>\n                <li>Departure and arrival times</li>\n                <li>Bus and train schedules</li>\n                <li>Flight times</li>\n                <li>Delivery time windows</li>\n            </ul>\n        </div>\n\n        <h2>Comparison with Other Time-Related Types</h2>\n        <table style=\"width: 100%; border-collapse: collapse; margin: 20px 0;\">\n            <thead>\n                <tr style=\"background: #f8f9fa;\">\n                    <th style=\"border: 1px solid #dee2e6; padding: 10px; text-align: left;\">Data Type</th>\n                    <th style=\"border: 1px solid #dee2e6; padding: 10px; text-align: left;\">Description</th>\n                    <th style=\"border: 1px solid #dee2e6; padding: 10px; text-align: left;\">Example</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\"><code>time</code></td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">Time only, no date</td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">\"09:00:00\"</td>\n                </tr>\n                <tr>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\"><code>date</code></td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">Date only, no time</td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">\"2024-01-15\"</td>\n                </tr>\n                <tr>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\"><code>timestamp</code></td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">Date and time with timezone</td>\n                    <td style=\"border: 1px solid #dee2e6; padding: 10px;\">\"2024-01-15T09:00:00Z\"</td>\n                </tr>\n            </tbody>\n        </table>\n\n        <div class=\"info-section\">\n            <h2>Testing</h2>\n            <p>You can test this data contract using the Data Contract CLI:</p>\n            <div class=\"example-item\">datacontract test examples/time-example/datacontract.yaml</div>\n        </div>\n\n        <div class=\"warning\">\n            <strong>Important:</strong> When using the time data type, ensure your data processing tools and pipelines are compatible with time-only data. Some data platforms may require specific configurations or have limitations when working with time data types.\n        </div>\n    </div>\n</body>\n</html> "
  },
  {
    "path": "examples/time-example/datacontract.yaml",
    "content": "dataContractSpecification: 1.2.1\nid: time-demo\ninfo:\n  title: Time Data Type Example\n  version: 1.0.0\n  description: |\n    Example demonstrating the usage of the time data type\n    introduced in Data Contract Specification v1.2.1.\n  owner: Data Contract Team\n  contact:\n    name: Data Contract Team\n    url: https://github.com/datacontract/datacontract-specification\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://example-time-demo/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"Example data with time fields\"\nterms:\n  usage: |\n    This is an example demonstrating the new time data type.\n    Data can be used for testing and educational purposes.\n  limitations: |\n    This is example data only and should not be used in production.\nmodels:\n  business_hours:\n    description: Business hours for different locations\n    type: table\n    fields:\n      location_id:\n        type: string\n        description: Unique identifier for the business location\n        required: true\n        primaryKey: true\n        examples:\n          - \"loc_001\"\n          - \"loc_002\"\n      location_name:\n        type: string\n        description: Name of the business location\n        required: true\n        examples:\n          - \"Downtown Store\"\n          - \"Mall Branch\"\n      opening_time:\n        type: time\n        description: Daily opening time for the business\n        required: true\n        examples:\n          - \"09:00:00\"\n          - \"08:30:00\"\n      closing_time:\n        type: time\n        description: Daily closing time for the business\n        required: true\n        examples:\n          - \"17:00:00\"\n          - \"21:00:00\"\n      lunch_start:\n        type: time\n        description: Start time of lunch break\n        required: false\n        examples:\n          - \"12:00:00\"\n          - \"12:30:00\"\n      lunch_end:\n        type: time\n        description: End time of lunch break\n        required: false\n        examples:\n          - \"13:00:00\"\n          - \"13:30:00\"\n    examples:\n      - |\n        location_id,location_name,opening_time,closing_time,lunch_start,lunch_end\n        \"loc_001\",\"Downtown Store\",\"09:00:00\",\"17:00:00\",\"12:00:00\",\"13:00:00\"\n        \"loc_002\",\"Mall Branch\",\"08:30:00\",\"21:00:00\",\"12:30:00\",\"13:30:00\"\n        \"loc_003\",\"24/7 Store\",\"00:00:00\",\"23:59:59\",,\n  shift_schedules:\n    description: Employee shift schedules\n    type: table\n    fields:\n      employee_id:\n        type: string\n        description: Unique identifier for the employee\n        required: true\n        primaryKey: true\n        examples:\n          - \"emp_001\"\n          - \"emp_002\"\n      shift_start:\n        type: time\n        description: Start time of the employee's shift\n        required: true\n        examples:\n          - \"08:00:00\"\n          - \"16:00:00\"\n      shift_end:\n        type: time\n        description: End time of the employee's shift\n        required: true\n        examples:\n          - \"16:00:00\"\n          - \"00:00:00\"\n      break_start:\n        type: time\n        description: Start time of the break period\n        required: false\n        examples:\n          - \"12:00:00\"\n          - \"20:00:00\"\n      break_end:\n        type: time\n        description: End time of the break period\n        required: false\n        examples:\n          - \"13:00:00\"\n          - \"21:00:00\"\n    examples:\n      - |\n        employee_id,shift_start,shift_end,break_start,break_end\n        \"emp_001\",\"08:00:00\",\"16:00:00\",\"12:00:00\",\"13:00:00\"\n        \"emp_002\",\"16:00:00\",\"00:00:00\",\"20:00:00\",\"21:00:00\"\n        \"emp_003\",\"00:00:00\",\"08:00:00\",,\ntags:\n  - example\n  - time\n  - v1.2.1\nlinks:\n  datacontractCli: https://cli.datacontract.com "
  },
  {
    "path": "examples/variant-json-example/datacontract.yaml",
    "content": "dataContractSpecification: 1.2.1\nid: variant-json-demo\ninfo:\n  title: Variant and JSON Data Types Example\n  version: 1.0.0\n  description: |\n    Example demonstrating the usage of variant and json data types\n    introduced in Data Contract Specification v1.2.1.\n  owner: Data Contract Team\n  contact:\n    name: Data Contract Team\n    url: https://github.com/datacontract/datacontract-specification\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://example-variant-json-demo/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"Example data with variant and json fields\"\nterms:\n  usage: |\n    This is an example demonstrating the new variant and json data types.\n    Data can be used for testing and educational purposes.\n  limitations: |\n    This is example data only and should not be used in production.\nmodels:\n  user_profiles:\n    description: User profiles with variant and JSON data fields\n    type: table\n    fields:\n      user_id:\n        type: string\n        description: Unique identifier for the user\n        required: true\n        primaryKey: true\n        examples:\n          - \"user_123\"\n          - \"user_456\"\n      profile_data:\n        type: variant\n        description: Semi-structured profile data that can contain various types of information\n        required: false\n        examples:\n          - \"John Doe\"\n          - 25\n          - true\n          - {\"preferences\": {\"theme\": \"dark\", \"language\": \"en\"}}\n      metadata:\n        type: json\n        description: JSON-formatted metadata about the user profile\n        required: false\n        examples:\n          - '{\"created_at\": \"2024-01-15T10:30:00Z\", \"source\": \"web_form\", \"version\": 1}'\n          - '{\"tags\": [\"premium\", \"verified\"], \"settings\": {\"notifications\": true}}'\n      preferences:\n        type: json\n        description: User preferences stored as JSON\n        required: false\n        examples:\n          - '{\"theme\": \"dark\", \"language\": \"en\", \"timezone\": \"UTC\"}'\n          - '{\"notifications\": {\"email\": true, \"sms\": false, \"push\": true}}'\n    examples:\n      - |\n        user_id,profile_data,metadata,preferences\n        \"user_123\",\"John Doe\",'{\"created_at\": \"2024-01-15T10:30:00Z\", \"source\": \"web_form\"}','{\"theme\": \"dark\", \"language\": \"en\"}'\n        \"user_456\",25,'{\"tags\": [\"premium\"], \"version\": 2}','{\"notifications\": {\"email\": true, \"sms\": false}}'\n        \"user_789\",true,'{\"source\": \"api\", \"verified\": true}','{\"theme\": \"light\", \"timezone\": \"EST\"}'\ntags:\n  - example\n  - variant\n  - json\n  - v1.2.1\nlinks:\n  datacontractCli: https://cli.datacontract.com "
  },
  {
    "path": "gen-openapi-yaml",
    "content": "#!/bin/bash\n\n# INSTALL BEFORE\n# npm install -g @openapi-contrib/json-schema-to-openapi-schema\n# brew install yq\n\njson-schema-to-openapi-schema convert datacontract.schema.json > datacontract.schema.openapi-format.json\nyq --input-format=json --output-format=yaml --prettyPrint datacontract.schema.openapi-format.json > datacontract.schema.openapi-format.yaml\necho \"Compare 'datacontract.schema.openapi-format.yaml' with openapi.yaml of the Data Mesh Manager\"\necho \"Prepend 'DataContract:\\\\n' and match the indendation correctly. Then, compare in IntelliJ\" \n"
  },
  {
    "path": "versions/0.9.0/README.md",
    "content": "# Data Contract Specification\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers. A data contract is implemented by a data product's output port or other data technologies. Data contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets. It is data platform neutral, yet supports well-known formats to express schemas (e.g., dbt models, JSON Schema, Protobuf, SQL DDL) and quality tests (e.g., SodaCL, SQL queries) to avoid unnecessary abstractions. The data contract specification is an open initiative to define a common data contract format. Think of an [OpenAPI specification](https://www.openapis.org/), but for data sets.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/).\nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted. They make semantic and quality expectations explicit. They are often created in [workshops](/workshop). Later in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\n_Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties. The term \"contract\" may be somewhat misleading, but it is how it is used in practice. The mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract. Data usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nThe specification is inspired by [AIDA User Group's Open Data Contract Standard](https://github.com/AIDAUserGroup/open-data-contract-standard), (formerly [PayPal's Data Contract Template](https://github.com/paypal/data-contract-template/blob/main/docs/README.md)) and Data Mesh Manager's [Data Contract API](https://www.datamesh-manager.com).\nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\n\nVersion\n---\n\n0.9.0\n\nExample\n---\n\n[![Open in Data Contract Studio](https://img.shields.io/badge/open%20in-Data%20Contract%20Studio-blue)](https://studio.datacontract.com/)\n\n```yaml\ndataContractSpecification: 0.9.0\nid: urn:datacontract:checkout:orders-latest-npii\ninfo:\n  title: Orders Latest NPII\n  version: 1.0.0\n  description: Successful customer orders in the webshop. All orders since 2020-01-01. Orders with their line items are in their current state (no history included). PII data is removed.\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    email: john.doe@example.com\nservers:\n  production:\n    type: BigQuery\n    project: acme_orders_prod\n    dataset: bigquery_orders_latest_npii_v1\nterms:\n  usage: >\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: >\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  billing: 5000 USD per month\n  noticePeriod: P3M\nschema:\n  type: dbt  # the specification format: dbt, bigquery, avro, protobuf, sql, json-schema, custom\n  specification:  # expressed as string or inline yaml or via \"$ref: model.yaml\"\n    version: 2 \n    description: The subset of the output port's data model that we agree to use\n    models:\n      - name: orders\n        description: >\n          One record per order. Includes cancelled and deleted orders.\n        columns:\n          - name: order_id\n            data_type: string\n            description: Primary key of the orders table\n          - name: order_timestamp\n            data_type: timestamptz\n            description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n          - name: order_total\n            data_type: integer\n            description: \"Total amount of the order in the smallest monetary unit (e.g., cents).\"\n      - name: line_items\n        description: >\n          The items that are part of an order\n        columns:\n          - name: lines_item_id\n            data_type: string\n            description: Primary key of the lines_item_id table\n          - name: order_id\n            data_type: string\n            description: Foreign key to the orders table\n          - name: sku\n            data_type: string\n            description: The purchased article number\nexamples:\n  - type: csv # csv, json, yaml, custom\n    model: orders\n    data: |- # expressed as string or inline yaml or via \"$ref: data.csv\"\n      order_id,order_timestamp,order_total\n      \"1001\",\"2023-09-09T08:30:00Z\",2500\n      \"1002\",\"2023-09-08T15:45:00Z\",1800\n      \"1003\",\"2023-09-07T12:15:00Z\",3200\n      \"1004\",\"2023-09-06T19:20:00Z\",1500\n      \"1005\",\"2023-09-05T10:10:00Z\",4200\n      \"1006\",\"2023-09-04T14:55:00Z\",2800\n      \"1007\",\"2023-09-03T21:05:00Z\",1900\n      \"1008\",\"2023-09-02T17:40:00Z\",3600\n      \"1009\",\"2023-09-01T09:25:00Z\",3100\n      \"1010\",\"2023-08-31T22:50:00Z\",2700\n  - type: csv\n    model: line_items\n    data: |-\n      lines_item_id,order_id,sku\n      \"1\",\"1001\",\"5901234123457\"\n      \"2\",\"1001\",\"4001234567890\"\n      \"3\",\"1002\",\"5901234123457\"\n      \"4\",\"1002\",\"2001234567893\"\n      \"5\",\"1003\",\"4001234567890\"\n      \"6\",\"1003\",\"5001234567892\"\n      \"7\",\"1004\",\"5901234123457\"\n      \"8\",\"1005\",\"2001234567893\"\n      \"9\",\"1005\",\"5001234567892\"\n      \"10\",\"1005\",\"6001234567891\"\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - freshness(order_timestamp) < 24h\n      - row_count > 500000\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 500000\n```\n\nSchema\n---\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                               | Description                                                                                           |\n|---------------------------|------------------------------------|-------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                           | REQUIRED. Specifies the Data Contract Specification being used.                                       |\n| id                        | `string`                           | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number                                             |\n| info                      | [Info Object](#info-object)        | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                        |\n| servers                   | [Servers Object](#servers-object)  | Specifies the servers of the data contract.                                                           |\n| terms                     | [Terms Object](#terms-object)      | Specifies the terms and conditions of the data contract.                                    |\n| schema                    | [Schema Object](#schema-object)    | Specifies the data contract schema. The specification supports different schemas.                     |\n| examples                  | [Examples Object](#examples-object) | Specifies example data sets for the schema. The specification supports different example types.       |\n| quality                   | [Quality Object](#quality-object)  | Specifies the quality attributes and checks. The specification supports different quality check DSLs. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field   | Type   | Description                                                                                                                                                      |\n|---------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title   | `string` | REQUIRED. The title of the data contract.                                                                                                                        |\n| version | `string` | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| description | `string` | A description of the data contract.                                                                                                                              |\n| owner   | `string` | The owner or team responsible for managing the data contract and providing the data.                                                                            |\n| dataProduct | `string` | The identifier of the data product that contains the output port providing the data.                                                                                               |\n| outputPort | `string` | DEPRECATED. The identifier of the output port that implements the data contract.                                                                                                              |\n| contact | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\n\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Servers Object\n\nInformation about the servers.\n\nThe Servers Object is a map of [Server Objects](#server-object).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type     | Description                                                                                                                                                              |\n|-------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `s3`, `redshift`, `snowflake`, `databricks`, `kafka` |\n| description | `string` | An optional string describing the server.                                                                                                                                |\n\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description |\n|---------|----------|-------------|\n| type    | `string` | `bigquery`  |\n| project | `string` |             |\n| dataset | `string` |             |\n\n#### S3 Server Object\n\n| Field    | Type     | Description                    |\n|----------|----------|--------------------------------|\n| type     | `string` | `s3`                           |\n| location | `string` | S3 URL, starting with `s3://`  |\n\nExample:\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n```\n\n\n#### Redshift Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `redshift`  |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field    | Type     | Description  |\n|----------|----------|--------------|\n| type     | `string` | `databricks` |\n| share     | `string` |              |\n\n#### Kafka Server Object\n\n| Field | Type     | Description |\n|-------|----------|-------------|\n| type  | `string` | `kafka`     |\n| host  | `string` |             |\n| topic | `string` |             |\n\n\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field                | Type   | Description                                                                                                                                                                 |\n|----------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage                | `string` | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations          | `string` | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| billing              | `string` | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod         | `string` | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\n\n### Schema Object\n\nThe schema of the data contract describes the syntax and semantics of provided data sets.\nAs the type of the output port depends on the data platform, multiple schema specifications are supported.\n\nA schema may define a single table, a collection of tables as a dataset, a file structure, or any arbitrary structure.\n\nTo avoid unnecessary abstractions, the data contract specification supports existing well-known formats. Some schema types, such as `dbt`, also support defining tests and additional metadata.\n\n\n| Field | Type                                                                                                                                                                                                                 | Description                                                                                                                         |\n| ----- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                                                                                                               | REQUIRED. The type of the schema.<br> Typical values are: `dbt`, `bigquery`, `json-schema`, `sql-ddl`, `avro`, `protobuf`, `custom` |\n| specification | [dbt Schema Object](#dbt-schema-object) \\|<br> [BigQuery Schema Object](#bigquery-schema-object) \\|<br> [JSON Schema Schema Object](#bigquery-schema-object) \\|<br> [SQL DDL Schema Object](#sql-ddl-schema-object) \\|<br> `string` | REQUIRED. The specification of the schema. The schema specification can be encoded as a string or as inline YAML.                  |\n\n\n#### dbt Schema Object\n\nhttps://docs.getdbt.com/reference/model-properties\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: dbt\n  specification:\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: dbt\n  specification: |-\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\n#### BigQuery Schema Object\n\nThe schema structure is defined by the [Google BigQuery Table](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource:-table) object. You can extract such a Table object via the [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) endpoint.\n\nInstead of providing a single Table object, you can also provide an array of such objects. Be aware that [tables.list](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list) only returns a subset of the full Table object. You need to call every Table object via [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) to get the full Table object, including the actual schema.\n\nLearn more: [Google BigQuery REST Reference v2](https://cloud.google.com/bigquery/docs/reference/rest)\n\n\n\nExample:\n\n```yaml\nschema:\n  type: bigquery\n  specification: |-\n    {\n      \"tableReference\": {\n        \"projectId\": \"my-project\",\n        \"datasetId\": \"my_dataset\",\n        \"tableId\": \"my_table\"\n      },\n      \"description\": \"This is a description\",\n      \"type\": \"TABLE\",\n      \"schema\": {\n        \"fields\": [\n          {\n            \"name\": \"name\",\n            \"type\": \"STRING\",\n            \"mode\": \"NULLABLE\",\n            \"description\": \"This is a description\"\n          }\n        ]\n      }\n    }\n```\n\n#### JSON Schema Schema Object\n\nJSON Schema can be defined as JSON or rendered as YAML, following the [OpenAPI Schema Object dialect](https://spec.openapis.org/oas/v3.1.0#properties)\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: json-schema\n  specification:\n    orders:\n      description: One record per order. Includes cancelled and deleted orders.\n      type: object\n      properties:\n        order_id:\n          type: string\n          description: Primary key of the orders table\n        order_timestamp:\n          type: string\n          format: date-time\n          description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total:\n          type: integer\n          description: Total amount of the order in the smallest monetary unit (e.g., cents).\n    line_items:\n      type: object\n      properties:\n        lines_item_id:\n          type: string\n          description: Primary key of the lines_item_id table\n        order_id:\n          type: string\n          description: Foreign key to the orders table\n        sku:\n          type: string\n          description: The purchased article number\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: json-schema\n  specification: |-\n    {\n      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"orders\": {\n          \"type\": \"object\",\n          \"description\": \"One record per order. Includes cancelled and deleted orders.\",\n          \"properties\": {\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the orders table\"\n            },\n            \"order_timestamp\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\"\n            },\n            \"order_total\": {\n              \"type\": \"integer\",\n              \"description\": \"Total amount of the order in the smallest monetary unit (e.g., cents).\"\n            }\n          },\n          \"required\": [\"order_id\", \"order_timestamp\", \"order_total\"]\n        },\n        \"line_items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"lines_item_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the lines_item_id table\"\n            },\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Foreign key to the orders table\"\n            },\n            \"sku\": {\n              \"type\": \"string\",\n              \"description\": \"The purchased article number\"\n            }\n          },\n          \"required\": [\"lines_item_id\", \"order_id\", \"sku\"]\n        }\n      },\n      \"required\": [\"orders\", \"line_items\"]\n    }\n```\n\n#### SQL DDL Schema Object\n\nClassical SQL DDLs can be used to describe the structure.\n\n\nExample (string):\n\n```yaml\nschema:\n  type: sql-ddl\n  specification: |-\n      -- One record per order. Includes cancelled and deleted orders.\n      CREATE TABLE orders (\n        order_id TEXT PRIMARY KEY, -- Primary key of the orders table\n        order_timestamp TIMESTAMPTZ NOT NULL, -- The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total INTEGER NOT NULL -- Total amount of the order in the smallest monetary unit (e.g., cents)\n      );\n    \n      -- The items that are part of an order\n      CREATE TABLE line_items (\n        lines_item_id TEXT PRIMARY KEY, -- Primary key of the lines_item_id table\n        order_id TEXT REFERENCES orders(order_id), -- Foreign key to the orders table\n        sku TEXT NOT NULL -- The purchased article number\n      );\n\n```\n\n### Examples Object\n\nThe Examples Object is an array of [Example Objects](#examples-object).\n\n### Example Object\n\n| Field       | Type     | Description                                                                                                                             |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `csv`, `json`, `yaml`, `custom` |\n| description | `string` | An optional string describing the example.                                                                                              |\n| model       | `string` | The reference to the model in the schema, e.g. a table name.                                                                            |                                                                                        \n| data        | `string` | Example data for this model.                                                                                                            |\n\nExample:\n\n```yaml\nexamples:\n- type: csv\n  model: orders\n  data: |-\n    order_id,order_timestamp,order_total\n    \"1001\",\"2023-09-09T08:30:00Z\",2500\n    \"1002\",\"2023-09-08T15:45:00Z\",1800\n    \"1003\",\"2023-09-07T12:15:00Z\",3200\n    \"1004\",\"2023-09-06T19:20:00Z\",1500\n    \"1005\",\"2023-09-05T10:10:00Z\",4200\n    \"1006\",\"2023-09-04T14:55:00Z\",2800\n    \"1007\",\"2023-09-03T21:05:00Z\",1900\n    \"1008\",\"2023-09-02T17:40:00Z\",3600\n    \"1009\",\"2023-09-01T09:25:00Z\",3100\n    \"1010\",\"2023-08-31T22:50:00Z\",2700\n```\n\n### Quality Object\n\nThe quality object contains quality attributes and checks.\n\n| Field | Type                                                                                                                          | Description                                                                                                                     |\n| ----- |-------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                        | REQUIRED. The type of the schema.<br> Typical values are: `SodaCL`, `montecarlo`, `custom`                                      |\n| specification | [SodaCL Quality Object](#sodacl-quality-object) \\|<br> [Monte Carlo Schema Object](#monte-carlo-quality-object) \\|<br> `string` | REQUIRED. The specification of the quality attributes. The quality specification can be encoded as a string or as inline YAML.  |\n\n\n#### SodaCL Quality Object\n\nQuality attributes in [Soda Checks Language](https://docs.soda.io/soda-cl/soda-cl-overview.html).\n\nThe `specification` represents the content of a `checks.yml` file.\n\nExample (inline):\n\n```yaml\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, dbt-tests, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - row_count > 0\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 0\n```\n\nExample (string):\n\n```yaml\nquality:\n  type: SodaCL\n  specification: |-\n    checks for search_queries:\n      - freshness(search_timestamp) < 1d\n      - row_count > 100000\n      - missing_count(search_query) = 0\n```\n\n#### Monte Carlo Quality Object\n\nQuality attributes defined as Monte Carlos [Monitors as Code](https://docs.getmontecarlo.com/docs/monitors-as-code).\n\nThe `specification` represents the content of a `montecarlo.yml` file.\n\nExample (string):\n\n```yaml\nquality:\n  type: montecarlo\n  specification: |-\n    montecarlo:\n      field_health:\n        - table: project:dataset.table_name\n          timestamp_field: created\n      dimension_tracking:\n        - table: project:dataset.table_name\n          timestamp_field: created\n          field: order_status\n```\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom fields can be added with any name. The value can be null, a primitive, an array or an object.\n\n### Design Principles\n\nThe Data Contract Specification follows these design principles:\n\n- Is an open standard and its serialization can be versioned in git\n- Follows OpenAPI and AsyncAPI conventions so that it feels immediately familiar\n- Supports tooling by being machine-readable\n- Supports existing well-known formats to avoid unnecessary abstractions\n- Supports contract-first approaches\n- Supports code-first approaches\n\nTooling\n---\n- [Data Contract Studio](https://studio.datacontract.com/) is a free web tool to develop and share data contracts.\n- [Data Contract CLI](https://github.com/datacontract/cli) is a free CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Mesh Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data products and data contracts. It supports the data contract specification and allows the user to import or export data contracts using this specification.\n\n\nOther Data Contract Specifications\n---\n- [AIDA User Group's Open Data Contract Standard](https://github.com/AIDAUserGroup/open-data-contract-standard)\n- [PayPal's Data Contract Template](https://github.com/paypal/data-contract-template/blob/main/docs/README.md)\n\nLiterature\n---\n- [Driving Data Quality with Data Contracts](https://www.amazon.com/dp/B0C37FPH3D) by Andrew Jones\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>\n"
  },
  {
    "path": "versions/0.9.0/datacontract.init.yaml",
    "content": "dataContractSpecification: 0.9.0\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  my-stage:\n#    type: bigquery\n#    project:\n#    dataset:\n\n#servers:\n#  my-stage:\n#    type: s3\n#    location: s3://\n\n#servers:\n#  my-stage:\n#    type: redshift\n#    account:\n#    database:\n#    schema:\n\n#servers:\n#  my-stage:\n#    type: snowflake\n#    account:\n#    database:\n#    schema:\n\n#servers:\n#  my-stage:\n#    type: databricks\n#    share:\n\n#servers:\n#  my-stage:\n#    type: kafka\n#    host:\n#    topic:\n\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### schema\n\n#schema:\n#  type: dbt\n#  specification:\n#    version:\n#    models:\n#      - name:\n#        description:\n#        columns:\n#          - name:\n#            type:\n#            description:\n#            tests:\n\n#schema:\n#  type: dbt\n#  specification: |-\n#    version:\n#    models:\n#      - name:\n#        description:\n#        columns:\n#          - name:\n#            type:\n#            description:\n#            tests:\n\n#schema:\n#  type: dbt\n#  specification: \"$ref: model.yaml\"\n\n#schema:\n#  type: bigquery\n#  specification: |-\n#  {\n#    \"tableReference\": {\n#      \"projectId\": \"my-project\",\n#      \"datasetId\": \"my_dataset\",\n#      \"tableId\": \"my_table\"\n#    },\n#    \"description\": \"This is a description\",\n#    \"type\": \"TABLE\",\n#    \"schema\": {\n#      \"fields\": [\n#        {\n#          \"name\": \"name\",\n#          \"type\": \"STRING\",\n#          \"mode\": \"NULLABLE\",\n#          \"description\": \"This is a description\"\n#        }\n#      ]\n#    }\n#  }\n\n#schema:\n#  type: json-schema\n#  specification:\n#    my-table:\n#      description:\n#      type: object\n#      properties:\n#        id:\n#          type: string\n#          description:\n\n#schema:\n#  type: json-schema\n#  specification: |-\n#    {\n#      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n#      \"type\": \"object\",\n#      \"properties\": {\n#        \"my_table\": {\n#          \"type\": \"object\",\n#          \"description\": \"\",\n#          \"properties\": {\n#            \"id\": {\n#              \"type\": \"string\",\n#              \"description\": \"\"\n#            },\n#          \"required\": [\"id\"]\n#        }\n#      },\n#      \"required\": [\"my-table\"]\n#    }\n\n#schema:\n#  type: sql-ddl\n#  specification: |-\n#    CREATE TABLE my_table (\n#      id TEXT PRIMARY KEY\n#    );\n\n#schema:\n#  type: avro\n#  specification:\n#    User:\n#      type: record\n#      name: MyTable\n#      fields:\n#        - name: id\n#          type: string\n\n#schema:\n#  type: avro\n#  specification: |-\n#    {\n#      \"type\": \"record\",\n#      \"name\": \"MyTable\",\n#      \"fields\": [\n#        {\n#          \"name\": \"name\",\n#          \"type\": \"string\"\n#        }\n#      ]\n#    }\n\n#schema:\n#  type: protobuf\n#  specification: |-\n#    message MyTable {\n#      string id = 1;\n#    }\n\n#schema:\n#  type: custom\n#  specification:\n\n\n### examples\n\n#examples:\n#  - type: csv\n#    model: my_table\n#    data: |-\n#      id,timestamp,amount\n#      \"1001\",\"2023-09-09T08:30:00Z\",2500\n#      \"1002\",\"2023-09-08T15:45:00Z\",1800\n#\n#examples:\n#  - type: csv\n#    model: my_table\n#    data: \"$ref: data.csv\"\n\n#examples:\n#  - type: json\n#    model: my_table\n#    data: |-\n#      [\n#        {\n#          \"id\": \"1001\",\n#          \"timestamp\": \"2023-09-09T08:30:00Z\",\n#          \"amount\": 2500\n#        },\n#        {\n#          \"id\": \"1002\",\n#          \"timestamp\": \"2023-09-08T15:45:00Z\",\n#          \"amount\": 1800\n#        }\n#      ]\n\n#examples:\n#  - type: yaml\n#    model: my_table\n#    data:\n#      - id: 1001\n#        timestamp: 2023-09-09T08:30:00Z\n#        amount: 2500\n#      - id: 1002\n#        timestamp: 2023-09-08T15:45:00Z\n#        amount: 1800\n\n#examples:\n#  - type: custom\n#    model: my_table\n#    data: |-\n\n\n### quality\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table:\n#      - duplicate_count(order_id) = 0\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table: |-\n#      - duplicate_count(id) = 0\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table: \"$ref: checks.yaml\"\n\n#quality:\n#  type: montecarlo\n#  specification: |-\n#    montecarlo:\n#      field_health:\n#        - table: my_project:my_dataset.my_table\n#          fields:\n#            - id\n#            - timestamp\n#            - amount\n#          timestamp_field: timestamp\n\n#quality:\n#  type: custom\n#  specification: |-\n"
  },
  {
    "path": "versions/0.9.0/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"dataProduct\": {\n          \"type\": \"string\",\n          \"description\": \"The data product that contains the output port providing the data.\"\n        },\n        \"outputPort\": {\n          \"type\": \"string\",\n          \"description\": \"The output port that implements the data contract.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\"\n        }\n      },\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"bigquery\",\n                  \"BigQuery\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"dataset\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"dataset\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"s3\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"An optional string describing the server. Must be in the form of a URL.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"redshift\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"snowflake\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"databricks\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"share\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"share\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"kafka\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"topic\"\n            ]\n          }\n        ]\n      },\n      \"description\": \"Information about the servers.\"\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      }\n    },\n    \"schema\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"dbt\",\n            \"bigquery\",\n            \"json-schema\",\n            \"sql-ddl\",\n            \"avro\",\n            \"protobuf\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the schema. Typical values are: dbt, bigquery, json-schema, sql-ddl, avro, protobuf, custom.\"\n        },\n        \"specification\": {\n          \"anyOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the schema as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the schema as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The schema of the data contract describes the syntax and semantics of provided data sets. It supports different schema types.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"csv\",\n              \"json\",\n              \"yaml\",\n              \"custom\"\n            ],\n            \"description\": \"The type of the example data. Well-known types are: csv, json, yaml, custom.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string describing the example.\"\n          },\n          \"model\": {\n            \"type\": \"string\",\n            \"description\": \"The reference to the model in the schema, e.g., a table name.\"\n          },\n          \"data\": {\n            \"type\": \"string\",\n            \"description\": \"Example data for this model.\"\n          }\n        },\n        \"required\": [\n          \"type\",\n          \"model\",\n          \"data\"\n        ]\n      },\n      \"description\": \"The Examples Object is an array of Example Objects.\"\n    },\n    \"quality\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"SodaCL\",\n            \"montecarlo\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the quality check. Typical values are: SodaCL, montecarlo, custom.\"\n        },\n        \"specification\": {\n          \"anyOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the quality attributes as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the quality attributes as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The quality object contains quality attributes and checks.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ]\n}\n"
  },
  {
    "path": "versions/0.9.1/README.md",
    "content": "# Data Contract Specification\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers. \nA data contract is implemented by a data product's output port or other data technologies. \nData contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets. \nIt is data platform neutral and can be used with any data platform, such as AWS S3, Google BigQuery, Microsoft Fabric, Databricks, and Snowflake. \nThe data contract specification is an open initiative to define a common data contract format. \nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/). \nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted. \nThey make semantic and quality expectations explicit. \nThey are often created collaboratively in [workshops](/workshop) together with data providers and data consumers. \nLater in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\nThe specification comes along with the [Data Contract CLI](https://github.com/datacontract/cli), an open-source tool to develop, validate, and enforce data contracts.\n\n_Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties. \nThe term \"contract\" may be somewhat misleading, but it is how it is used in practice. \nThe mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract. \nData usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nVersion\n---\n\n0.9.1 ([Changelog](CHANGELOG.md))\n\nExample\n---\n\n[![Open in Data Contract Studio](https://img.shields.io/badge/open%20in-Data%20Contract%20Studio-blue)](https://studio.datacontract.com/)\n\n```yaml\ndataContractSpecification: 0.9.1\nid: urn:datacontract:checkout:orders-latest-npii\ninfo:\n  title: Orders Latest NPII\n  version: 1.0.0\n  description: Successful customer orders in the webshop. All orders since 2020-01-01. Orders with their line items are in their current state (no history included). PII data is removed.\n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    email: john.doe@example.com\nservers:\n  production:\n    type: BigQuery\n    project: acme_orders_prod\n    dataset: bigquery_orders_latest_npii_v1\nterms:\n  usage: >\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: >\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table \n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n      order_timestamp:\n        type: timestamp\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n      order_total:\n        type: long\n        description: Total amount the smallest monetary unit (e.g., cents).\n  line_items:\n    description: A single article that is part of an order.  \n    type: table\n    fields:\n      lines_item_id:\n        type: string\n        description: Primary key of the lines_item_id table\n      order_id:\n        $ref: '#/definitions/order_id'\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    type: string\n    description: An internal ID that identifies an order in the online shop.\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    type: string\n    example: AC1212ME1\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \n      It is typically associated with an article's barcode, such as the EAN/GTIN.\nexamples:\n  - type: csv # csv, json, yaml, custom\n    model: orders\n    data: |- # expressed as string or inline yaml or via \"$ref: data.csv\"\n      order_id,order_timestamp,order_total\n      \"1001\",\"2023-09-09T08:30:00Z\",2500\n      \"1002\",\"2023-09-08T15:45:00Z\",1800\n      \"1003\",\"2023-09-07T12:15:00Z\",3200\n      \"1004\",\"2023-09-06T19:20:00Z\",1500\n      \"1005\",\"2023-09-05T10:10:00Z\",4200\n      \"1006\",\"2023-09-04T14:55:00Z\",2800\n      \"1007\",\"2023-09-03T21:05:00Z\",1900\n      \"1008\",\"2023-09-02T17:40:00Z\",3600\n      \"1009\",\"2023-09-01T09:25:00Z\",3100\n      \"1010\",\"2023-08-31T22:50:00Z\",2700\n  - type: csv\n    model: line_items\n    data: |-\n      lines_item_id,order_id,sku\n      \"1\",\"1001\",\"5901234123457\"\n      \"2\",\"1001\",\"4001234567890\"\n      \"3\",\"1002\",\"5901234123457\"\n      \"4\",\"1002\",\"2001234567893\"\n      \"5\",\"1003\",\"4001234567890\"\n      \"6\",\"1003\",\"5001234567892\"\n      \"7\",\"1004\",\"5901234123457\"\n      \"8\",\"1005\",\"2001234567893\"\n      \"9\",\"1005\",\"5001234567892\"\n      \"10\",\"1005\",\"6001234567891\"\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - freshness(order_timestamp) < 24h\n      - row_count > 500000\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 500000\n```\n\nSchema\n---\n\n- [Data Contract Object](#data-contract-object)\n- [Info Object](#info-object)\n- [Contact Object](#contact-object)\n- [Server Object](#server-object)\n- [Terms Object](#terms-object)\n- [Model Object](#model-object)\n- [Field Object](#field-object)\n- [Definition Object](#definition-object)\n- [Schema Object](#schema-object)\n- [Example Object](#example-object)\n- [Quality Object](#quality-object)\n- [Data Types](#data-types)\n- [Specification Extensions](#specification-extensions)\n\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                                                 | Description                                                                                              |\n|---------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                                             | REQUIRED. Specifies the Data Contract Specification being used.                                          |\n| id                        | `string`                                             | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number |\n| info                      | [Info Object](#info-object)                          | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                           |\n| servers                   | Map[string, [Server Object](#server-object)]         | Specifies the servers of the data contract.                                                              |\n| terms                     | [Terms Object](#terms-object)                        | Specifies the terms and conditions of the data contract.                                                 |\n| models                    | Map[string, [Model Object](#model-object)]           | Specifies the logical data model.                                                                                |\n| definitions               | Map[string, [Definition Object](#definition-object)] | Specifies definitions.                                                                                   |\n| schema                    | [Schema Object](#schema-object)                      | Specifies the physical schema. The specification supports different schema format.                       |\n| examples                  | Array of [Example Objects](#example-object)          | Specifies example data sets for the data model. The specification supports different example types.          |\n| quality                   | [Quality Object](#quality-object)                    | Specifies the quality attributes and checks. The specification supports different quality check DSLs.    |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field   | Type   | Description                                                                                                                                                      |\n|---------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title   | `string` | REQUIRED. The title of the data contract.                                                                                                                        |\n| version | `string` | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| description | `string` | A description of the data contract.                                                                                                                              |\n| owner   | `string` | The owner or team responsible for managing the data contract and providing the data.                                                                            |\n| contact | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type     | Description                                                                                                                                                              |\n|-------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `s3`, `redshift`, `snowflake`, `databricks`, `kafka` |\n| description | `string` | An optional string describing the server.                                                                                                                                |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description |\n|---------|----------|-------------|\n| type    | `string` | `bigquery`  |\n| project | `string` |             |\n| dataset | `string` |             |\n\n#### S3 Server Object\n\n| Field    | Type     | Description                    |\n|----------|----------|--------------------------------|\n| type     | `string` | `s3`                           |\n| location | `string` | S3 URL, starting with `s3://`  |\n\nExample:\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n```\n\n\n#### Redshift Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `redshift`  |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field    | Type     | Description  |\n|----------|----------|--------------|\n| type     | `string` | `databricks` |\n| share     | `string` |              |\n\n#### Kafka Server Object\n\n| Field | Type     | Description |\n|-------|----------|-------------|\n| type  | `string` | `kafka`     |\n| host  | `string` |             |\n| topic | `string` |             |\n\n\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field                | Type   | Description                                                                                                                                                                 |\n|----------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage                | `string` | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations          | `string` | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| billing              | `string` | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod         | `string` | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\n\n### Model Object\n\nThe Model Object describes the structure and semantics of a data model, such as tables, views, or structured files.\n\nThe name of the data model (table name) is defined by the key that refers to this Model Object.\n\n| Field       | Type                                         | Description                                                           |\n|-------------|----------------------------------------------|-----------------------------------------------------------------------|\n| type        | `string`                                     | The type of the model. Examples: `table`, `object`. Default: `table`. |\n| description | `string`                                     | An optional string describing the data model.                         |\n| fields      | Map[`string`, [Field Object](#field-object)] | The fields (e.g. columns) of the data model.                          |\n\n\n\n### Field Object\n\nThe Field Objects describes one field (column, property, nested field) of a data model.\n\n| Field          | Type                     | Description                                                                                                                                                                            |\n|----------------|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type           | [Data Type](#data-types) | The logical data type of the field.                                                                                                                                                    |\n| description    | `string`                 | An optional string describing the semantic of the data in this field.                                                                                                                  |\n| pii            | `boolean`                | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                         | \n| classification | `string`                 | The data class defining the sensitivity level for this field, according to the organization's classification scheme. Examples may be: `sensitive`, `restricted`, `internal`, `public`. |\n| tags           | Array of `string`        | Custom metadata to provide additional context.                                                                                                                                         |\n| $ref           | `string`                 | A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.                                                      |\n\n\n### Definition Object\n\nThe Definition Object includes a clear and concise explanations of syntax, semantic, and classification of a business object in a given domain.\nIt serves as a reference for a common understanding of terminology, ensure consistent usage and to identify join-able fields.\nModels fields can refer to definitions using the `$ref` field to link to existing definitions and avoid duplicate documentations.\n\n| Field          | Type                     | Description                                                                                                          |\n|----------------|--------------------------|----------------------------------------------------------------------------------------------------------------------|\n| domain         | `string`                 | The domain in which this definition is valid. Default: `global`.                                                     |\n| name           | `string`                 | The technical name of this definition.                                                                               |\n| title          | `string`                 | The business name of this definition.                                                                                |\n| type           | [Data Type](#data-types) | The logical data type                                                                                                |\n| description    | `string`                 | Clear and concise explanations related to the domain                                                                 |\n| example        | `string`                 | An example value.                                                                                                    |\n| pii            | `boolean`                | An indication, if this field contains Personal Identifiable Information (PII).                                       |\n| classification | `string`                 | The data class defining the sensitivity level for this field, according to the organization's classification scheme. |\n| tags           | Array of `string`        | Custom metadata to provide additional context.                                                                       |\n\n\n### Schema Object\n\nThe schema of the data contract describes the physical schema. \nThe type of the schema depends on the data platform.\n\n| Field | Type                                                                                                                                                                                                                 | Description                                                                                                                         |\n| ----- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                                                                                                               | REQUIRED. The type of the schema.<br> Typical values are: `dbt`, `bigquery`, `json-schema`, `sql-ddl`, `avro`, `protobuf`, `custom` |\n| specification | [dbt Schema Object](#dbt-schema-object) \\|<br> [BigQuery Schema Object](#bigquery-schema-object) \\|<br> [JSON Schema Schema Object](#bigquery-schema-object) \\|<br> [SQL DDL Schema Object](#sql-ddl-schema-object) \\|<br> `string` | REQUIRED. The specification of the schema. The schema specification can be encoded as a string or as inline YAML.                  |\n\n\n#### dbt Schema Object\n\nhttps://docs.getdbt.com/reference/model-properties\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: dbt\n  specification:\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: dbt\n  specification: |-\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\n#### BigQuery Schema Object\n\nThe schema structure is defined by the [Google BigQuery Table](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource:-table) object. You can extract such a Table object via the [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) endpoint.\n\nInstead of providing a single Table object, you can also provide an array of such objects. Be aware that [tables.list](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list) only returns a subset of the full Table object. You need to call every Table object via [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) to get the full Table object, including the actual schema.\n\nLearn more: [Google BigQuery REST Reference v2](https://cloud.google.com/bigquery/docs/reference/rest)\n\n\n\nExample:\n\n```yaml\nschema:\n  type: bigquery\n  specification: |-\n    {\n      \"tableReference\": {\n        \"projectId\": \"my-project\",\n        \"datasetId\": \"my_dataset\",\n        \"tableId\": \"my_table\"\n      },\n      \"description\": \"This is a description\",\n      \"type\": \"TABLE\",\n      \"schema\": {\n        \"fields\": [\n          {\n            \"name\": \"name\",\n            \"type\": \"STRING\",\n            \"mode\": \"NULLABLE\",\n            \"description\": \"This is a description\"\n          }\n        ]\n      }\n    }\n```\n\n#### JSON Schema Schema Object\n\nJSON Schema can be defined as JSON or rendered as YAML, following the [OpenAPI Schema Object dialect](https://spec.openapis.org/oas/v3.1.0#properties)\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: json-schema\n  specification:\n    orders:\n      description: One record per order. Includes cancelled and deleted orders.\n      type: object\n      properties:\n        order_id:\n          type: string\n          description: Primary key of the orders table\n        order_timestamp:\n          type: string\n          format: date-time\n          description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total:\n          type: integer\n          description: Total amount of the order in the smallest monetary unit (e.g., cents).\n    line_items:\n      type: object\n      properties:\n        lines_item_id:\n          type: string\n          description: Primary key of the lines_item_id table\n        order_id:\n          type: string\n          description: Foreign key to the orders table\n        sku:\n          type: string\n          description: The purchased article number\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: json-schema\n  specification: |-\n    {\n      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"orders\": {\n          \"type\": \"object\",\n          \"description\": \"One record per order. Includes cancelled and deleted orders.\",\n          \"properties\": {\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the orders table\"\n            },\n            \"order_timestamp\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\"\n            },\n            \"order_total\": {\n              \"type\": \"integer\",\n              \"description\": \"Total amount of the order in the smallest monetary unit (e.g., cents).\"\n            }\n          },\n          \"required\": [\"order_id\", \"order_timestamp\", \"order_total\"]\n        },\n        \"line_items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"lines_item_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the lines_item_id table\"\n            },\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Foreign key to the orders table\"\n            },\n            \"sku\": {\n              \"type\": \"string\",\n              \"description\": \"The purchased article number\"\n            }\n          },\n          \"required\": [\"lines_item_id\", \"order_id\", \"sku\"]\n        }\n      },\n      \"required\": [\"orders\", \"line_items\"]\n    }\n```\n\n#### SQL DDL Schema Object\n\nClassical SQL DDLs can be used to describe the structure.\n\n\nExample (string):\n\n```yaml\nschema:\n  type: sql-ddl\n  specification: |-\n      -- One record per order. Includes cancelled and deleted orders.\n      CREATE TABLE orders (\n        order_id TEXT PRIMARY KEY, -- Primary key of the orders table\n        order_timestamp TIMESTAMPTZ NOT NULL, -- The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total INTEGER NOT NULL -- Total amount of the order in the smallest monetary unit (e.g., cents)\n      );\n    \n      -- The items that are part of an order\n      CREATE TABLE line_items (\n        lines_item_id TEXT PRIMARY KEY, -- Primary key of the lines_item_id table\n        order_id TEXT REFERENCES orders(order_id), -- Foreign key to the orders table\n        sku TEXT NOT NULL -- The purchased article number\n      );\n\n```\n\n### Example Object\n\n| Field       | Type     | Description                                                                                                                             |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `csv`, `json`, `yaml`, `custom` |\n| description | `string` | An optional string describing the example.                                                                                              |\n| model       | `string` | The reference to the model in the schema, e.g. a table name.                                                                            |                                                                                        \n| data        | `string` | Example data for this model.                                                                                                            |\n\nExample:\n\n```yaml\nexamples:\n- type: csv\n  model: orders\n  data: |-\n    order_id,order_timestamp,order_total\n    \"1001\",\"2023-09-09T08:30:00Z\",2500\n    \"1002\",\"2023-09-08T15:45:00Z\",1800\n    \"1003\",\"2023-09-07T12:15:00Z\",3200\n    \"1004\",\"2023-09-06T19:20:00Z\",1500\n    \"1005\",\"2023-09-05T10:10:00Z\",4200\n    \"1006\",\"2023-09-04T14:55:00Z\",2800\n    \"1007\",\"2023-09-03T21:05:00Z\",1900\n    \"1008\",\"2023-09-02T17:40:00Z\",3600\n    \"1009\",\"2023-09-01T09:25:00Z\",3100\n    \"1010\",\"2023-08-31T22:50:00Z\",2700\n```\n\n### Quality Object\n\nThe quality object contains quality attributes and checks.\n\n| Field | Type                                                                                                                          | Description                                                                                                                     |\n| ----- |-------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                        | REQUIRED. The type of the schema.<br> Typical values are: `SodaCL`, `montecarlo`, `custom`                                      |\n| specification | [SodaCL Quality Object](#sodacl-quality-object) \\|<br> [Monte Carlo Schema Object](#monte-carlo-quality-object) \\|<br> `string` | REQUIRED. The specification of the quality attributes. The quality specification can be encoded as a string or as inline YAML.  |\n\n\n#### SodaCL Quality Object\n\nQuality attributes in [Soda Checks Language](https://docs.soda.io/soda-cl/soda-cl-overview.html).\n\nThe `specification` represents the content of a `checks.yml` file.\n\nExample (inline):\n\n```yaml\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, dbt-tests, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - row_count > 0\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 0\n```\n\nExample (string):\n\n```yaml\nquality:\n  type: SodaCL\n  specification: |-\n    checks for search_queries:\n      - freshness(search_timestamp) < 1d\n      - row_count > 100000\n      - missing_count(search_query) = 0\n```\n\n#### Monte Carlo Quality Object\n\nQuality attributes defined as Monte Carlos [Monitors as Code](https://docs.getmontecarlo.com/docs/monitors-as-code).\n\nThe `specification` represents the content of a `montecarlo.yml` file.\n\nExample (string):\n\n```yaml\nquality:\n  type: montecarlo\n  specification: |-\n    montecarlo:\n      field_health:\n        - table: project:dataset.table_name\n          timestamp_field: created\n      dimension_tracking:\n        - table: project:dataset.table_name\n          timestamp_field: created\n          field: order_status\n```\n\n### Data Types\n\nThe following data types are supported for model fields and definitions:\n\n- Unicode character sequence: `string`, `text`, `varchar`\n- Any numeric type, either integers or floating point numbers: `number`, `decimal`, `numeric`\n- 32-bit signed integer: `int`, `integer`\n- 64-bit signed integer: `long`, `bigint`\n- Single precision (32-bit) IEEE 754 floating-point number: `float`\n- Double precision (64-bit) IEEE 754 floating-point number: `double`\n- Binary value: `boolean`\n- Timestamp with timezone: `timestamp`, `timestamp_tz`\n- Timestamp with no timezone: `timestamp_ntz`\n- Date with no time information: `date`\n- Array: `array`\n- Sequence of 8-bit unsigned bytes: `bytes`\n- Complex type: `object`, `record`, `struct`\n- No value: `null`\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom fields can be added with any name. The value can be null, a primitive, an array or an object. \n\n### Design Principles\n\nThe Data Contract Specification follows these design principles:\n\n- A free, open, and open-sourced standard\n- Follow OpenAPI and AsyncAPI conventions so that it feels immediately familiar \n- Support contract-first approaches\n- Support code-first approaches\n- Support tooling by being machine-readable\n\nTooling\n---\n- [Data Contract CLI](https://github.com/datacontract/cli) is a free CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Contract Studio](https://studio.datacontract.com/) is a free web tool to develop and share data contracts.\n- [Data Mesh Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data products and data contracts. It supports the data contract specification and allows the user to import or export data contracts using this specification.\n\n\nOther Data Contract Specifications\n---\n- [AIDA User Group's Open Data Contract Standard](https://github.com/AIDAUserGroup/open-data-contract-standard)\n- [PayPal's Data Contract Template](https://github.com/paypal/data-contract-template/blob/main/docs/README.md)\n\nLiterature\n---\n- [Driving Data Quality with Data Contracts](https://www.amazon.com/dp/B0C37FPH3D) by Andrew Jones\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>\n"
  },
  {
    "path": "versions/0.9.1/datacontract.init.yaml",
    "content": "dataContractSpecification: 0.9.1\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  my-stage:\n#    type: bigquery\n#    project:\n#    dataset:\n\n#servers:\n#  my-stage:\n#    type: s3\n#    location: s3://\n\n#servers:\n#  my-stage:\n#    type: redshift\n#    account:\n#    database:\n#    schema:\n\n#servers:\n#  my-stage:\n#    type: snowflake\n#    account:\n#    database:\n#    schema:\n\n#servers:\n#  my-stage:\n#    type: databricks\n#    share:\n\n#servers:\n#  my-stage:\n#    type: kafka\n#    host:\n#    topic:\n\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n### models\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type: \n#         description:\n\n### definitions\n# definitions: \n#   my_field: \n#     domain: \n#     name: \n#     title: \n#     type: \n#     description: \n#     example: \n#     pii:\n#     classification: \n\n### schema\n\n#schema:\n#  type: dbt\n#  specification:\n#    version:\n#    models:\n#      - name:\n#        description:\n#        columns:\n#          - name:\n#            type:\n#            description:\n#            tests:\n\n#schema:\n#  type: dbt\n#  specification: |-\n#    version:\n#    models:\n#      - name:\n#        description:\n#        columns:\n#          - name:\n#            type:\n#            description:\n#            tests:\n\n#schema:\n#  type: dbt\n#  specification: \"$ref: model.yaml\"\n\n#schema:\n#  type: bigquery\n#  specification: |-\n#  {\n#    \"tableReference\": {\n#      \"projectId\": \"my-project\",\n#      \"datasetId\": \"my_dataset\",\n#      \"tableId\": \"my_table\"\n#    },\n#    \"description\": \"This is a description\",\n#    \"type\": \"TABLE\",\n#    \"schema\": {\n#      \"fields\": [\n#        {\n#          \"name\": \"name\",\n#          \"type\": \"STRING\",\n#          \"mode\": \"NULLABLE\",\n#          \"description\": \"This is a description\"\n#        }\n#      ]\n#    }\n#  }\n\n#schema:\n#  type: json-schema\n#  specification:\n#    my-table:\n#      description:\n#      type: object\n#      properties:\n#        id:\n#          type: string\n#          description:\n\n#schema:\n#  type: json-schema\n#  specification: |-\n#    {\n#      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n#      \"type\": \"object\",\n#      \"properties\": {\n#        \"my_table\": {\n#          \"type\": \"object\",\n#          \"description\": \"\",\n#          \"properties\": {\n#            \"id\": {\n#              \"type\": \"string\",\n#              \"description\": \"\"\n#            },\n#          \"required\": [\"id\"]\n#        }\n#      },\n#      \"required\": [\"my-table\"]\n#    }\n\n#schema:\n#  type: sql-ddl\n#  specification: |-\n#    CREATE TABLE my_table (\n#      id TEXT PRIMARY KEY\n#    );\n\n#schema:\n#  type: avro\n#  specification:\n#    User:\n#      type: record\n#      name: MyTable\n#      fields:\n#        - name: id\n#          type: string\n\n#schema:\n#  type: avro\n#  specification: |-\n#    {\n#      \"type\": \"record\",\n#      \"name\": \"MyTable\",\n#      \"fields\": [\n#        {\n#          \"name\": \"name\",\n#          \"type\": \"string\"\n#        }\n#      ]\n#    }\n\n#schema:\n#  type: protobuf\n#  specification: |-\n#    message MyTable {\n#      string id = 1;\n#    }\n\n#schema:\n#  type: custom\n#  specification:\n\n\n### examples\n\n#examples:\n#  - type: csv\n#    model: my_table\n#    data: |-\n#      id,timestamp,amount\n#      \"1001\",\"2023-09-09T08:30:00Z\",2500\n#      \"1002\",\"2023-09-08T15:45:00Z\",1800\n#\n#examples:\n#  - type: csv\n#    model: my_table\n#    data: \"$ref: data.csv\"\n\n#examples:\n#  - type: json\n#    model: my_table\n#    data: |-\n#      [\n#        {\n#          \"id\": \"1001\",\n#          \"timestamp\": \"2023-09-09T08:30:00Z\",\n#          \"amount\": 2500\n#        },\n#        {\n#          \"id\": \"1002\",\n#          \"timestamp\": \"2023-09-08T15:45:00Z\",\n#          \"amount\": 1800\n#        }\n#      ]\n\n#examples:\n#  - type: yaml\n#    model: my_table\n#    data:\n#      - id: 1001\n#        timestamp: 2023-09-09T08:30:00Z\n#        amount: 2500\n#      - id: 1002\n#        timestamp: 2023-09-08T15:45:00Z\n#        amount: 1800\n\n#examples:\n#  - type: custom\n#    model: my_table\n#    data: |-\n\n\n### quality\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table:\n#      - duplicate_count(order_id) = 0\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table: |-\n#      - duplicate_count(id) = 0\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_table: \"$ref: checks.yaml\"\n\n#quality:\n#  type: montecarlo\n#  specification: |-\n#    montecarlo:\n#      field_health:\n#        - table: my_project:my_dataset.my_table\n#          fields:\n#            - id\n#            - timestamp\n#            - amount\n#          timestamp_field: timestamp\n\n#quality:\n#  type: custom\n#  specification: |-\n"
  },
  {
    "path": "versions/0.9.1/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\"\n        }\n      },\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"anyOf\": [\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"bigquery\",\n                  \"BigQuery\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"dataset\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"dataset\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"s3\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"An optional string describing the server. Must be in the form of a URL.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"redshift\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"snowflake\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"databricks\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"share\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"share\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"kafka\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"topic\"\n            ]\n          }\n        ]\n      },\n      \"description\": \"Information about the servers.\"\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      }\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, object. Default: table.\",\n            \"type\": \"string\",\n            \"default\": \"table\"\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"type\": {\n                  \"type\": \"string\",\n                  \"description\": \"The logical data type of the field.\",\n                  \"enum\": [\n                    \"number\", \"decimal\", \"numeric\",\n                    \"int\", \"integer\",\n                    \"long\", \"bigint\",\n                    \"float\",\n                    \"double\",\n                    \"string\", \"text\", \"varchar\",\n                    \"boolean\",\n                    \"timestamp\", \"timestamp_tz\",\n                    \"timestamp_ntz\",\n                    \"date\",\n                    \"array\",\n                    \"object\", \"record\", \"struct\",\n                    \"bytes\",\n                    \"null\"\n                  ]\n                },\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\"sensitive\", \"restricted\", \"internal\", \"public\"]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"schema\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"dbt\",\n            \"bigquery\",\n            \"json-schema\",\n            \"sql-ddl\",\n            \"avro\",\n            \"protobuf\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the schema. Typical values are: dbt, bigquery, json-schema, sql-ddl, avro, protobuf, custom.\"\n        },\n        \"specification\": {\n          \"anyOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the schema as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the schema as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The schema of the data contract describes the syntax and semantics of provided data sets. It supports different schema types.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"csv\",\n              \"json\",\n              \"yaml\",\n              \"custom\"\n            ],\n            \"description\": \"The type of the example data. Well-known types are: csv, json, yaml, custom.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string describing the example.\"\n          },\n          \"model\": {\n            \"type\": \"string\",\n            \"description\": \"The reference to the model in the schema, e.g., a table name.\"\n          },\n          \"data\": {\n            \"type\": \"string\",\n            \"description\": \"Example data for this model.\"\n          }\n        },\n        \"required\": [\n          \"type\",\n          \"data\"\n        ]\n      },\n      \"description\": \"The Examples Object is an array of Example Objects.\"\n    },\n    \"quality\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"SodaCL\",\n            \"montecarlo\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the quality check. Typical values are: SodaCL, montecarlo, custom.\"\n        },\n        \"specification\": {\n          \"anyOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the quality attributes as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the quality attributes as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The quality object contains quality attributes and checks.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ]\n}\n"
  },
  {
    "path": "versions/0.9.2/README.md",
    "content": "# Data Contract Specification\n\n<a href=\"https://github.com/datacontract/datacontract-specification\">\n    <img alt=\"Stars\" src=\"https://img.shields.io/github/stars/datacontract/datacontract-specification\" /></a>\n<a href=\"https://datacontract.com/slack\" rel=\"nofollow\"><img src=\"https://camo.githubusercontent.com/5ade1fd1e76a6ab860802cdd2941fe2501e2ca2cb534e5d8968dbf864c13d33d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f736c61636b2d6a6f696e5f636861742d77686974652e7376673f6c6f676f3d736c61636b267374796c653d736f6369616c\" alt=\"Slack Status\" data-canonical-src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" style=\"max-width: 100%;\"></a>\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers.\nA data contract is implemented by a data product's output port or other data technologies.\nData contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets.\nIt is data platform neutral and can be used with any data platform, such as AWS S3, Google BigQuery, Microsoft Fabric, Databricks, and Snowflake.\nThe data contract specification is an open initiative to define a common data contract format.\nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/).\nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted.\nThey make semantic and quality expectations explicit.\nThey are often created collaboratively in [workshops](/workshop) together with data providers and data consumers.\nLater in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\nThe specification comes along with the [Data Contract CLI](https://github.com/datacontract/cli), an open-source tool to develop, validate, and enforce data contracts.\n\n_Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties.\nThe term \"contract\" may be somewhat misleading, but it is how it is used in practice.\nThe mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract.\nData usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nVersion\n---\n\n0.9.2 ([Changelog](CHANGELOG.md))\n\nExample\n---\n\n[![Open in Data Contract Studio](https://img.shields.io/badge/open%20in-Data%20Contract%20Studio-blue)](https://studio.datacontract.com/)\n\n```yaml\ndataContractSpecification: 0.9.2\nid: urn:datacontract:checkout:orders-latest\ninfo:\n  title: Orders Latest\n  version: 1.0.0\n  description: |\n    Successful customer orders in the webshop. \n    All orders since 2020-01-01. \n    Orders with their line items are in their current state (no history included). \n  owner: Checkout Team\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nservers:\n  production:\n    type: s3\n    location: s3://datacontract-example-orders-latest/data/{model}/*.json\n    format: json\n    delimiter: new_line\nterms:\n  usage: >\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: >\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer. The email address was not verified.\n        type: text\n        format: email\n        required: true\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      lines_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n        unique: true\n      order_id:\n        $ref: '#/definitions/order_id'\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    example: \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \n      It is typically associated with an article's barcode, such as the EAN/GTIN.\nexamples:\n  - type: csv # csv, json, yaml, custom\n    model: orders\n    data: |- # expressed as string or inline yaml or via \"$ref: data.csv\"\n      order_id,order_timestamp,order_total,customer_id,customer_email_address\n      \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\"\n      \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\"\n      \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\"\n      \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\"\n      \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\"\n      \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\"\n      \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\"\n      \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\"\n      \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\"\n      \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\"\n  - type: csv\n    model: line_items\n    data: |-\n      lines_item_id,order_id,sku\n      \"LI-1\",\"1001\",\"5901234123457\"\n      \"LI-2\",\"1001\",\"4001234567890\"\n      \"LI-3\",\"1002\",\"5901234123457\"\n      \"LI-4\",\"1002\",\"2001234567893\"\n      \"LI-5\",\"1003\",\"4001234567890\"\n      \"LI-6\",\"1003\",\"5001234567892\"\n      \"LI-7\",\"1004\",\"5901234123457\"\n      \"LI-8\",\"1005\",\"2001234567893\"\n      \"LI-9\",\"1005\",\"5001234567892\"\n      \"LI-10\",\"1005\",\"6001234567891\"\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - freshness(order_timestamp) < 24h\n      - row_count >= 5000\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - values in (order_id) must exist in orders (order_id)\n      - row_count >= 5000\n```\n\nData Contract CLI\n---\n\nThe [Data Contract CLI](https://cli.datacontract.com) is a command line tool and Python library to lint, test, import and export data contracts.\n\nHere is short example how to verify that your actual dataset matches the data contract:\n\n```bash\npip3 install datacontract-cli\ndatacontract test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nor, if you prefer Docker:\n```bash\ndocker run datacontract/cli test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nThe Data Contract contains all required information to verify data:\n\n- The _servers_ block has the connection details to the actual data set.\n- The _models_ define the syntax, formats, and constraints.\n- The _quality_ defined further quality checks.\n\nThe Data Contract CLI chooses the appropriate engine, formulates test cases, connects to the server, and executes the tests, based on the server type.\n\nMore information and configuration options on [cli.datacontract.com](https://cli.datacontract.com).\n\n\nSpecification\n---\n\n![The eight major categories in the data contract specification](images/categories.png)\n\n- [Data Contract Object](#data-contract-object)\n- [Info Object](#info-object)\n- [Contact Object](#contact-object)\n- [Server Object](#server-object)\n- [Terms Object](#terms-object)\n- [Model Object](#model-object)\n- [Field Object](#field-object)\n- [Definition Object](#definition-object)\n- [Schema Object](#schema-object)\n- [Example Object](#example-object)\n- [Quality Object](#quality-object)\n- [Data Types](#data-types)\n- [Specification Extensions](#specification-extensions)\n\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                                                 | Description                                                                                              |\n|---------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                                             | REQUIRED. Specifies the Data Contract Specification being used.                                          |\n| id                        | `string`                                             | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number |\n| info                      | [Info Object](#info-object)                          | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                           |\n| servers                   | Map[string, [Server Object](#server-object)]         | Specifies the servers of the data contract.                                                              |\n| terms                     | [Terms Object](#terms-object)                        | Specifies the terms and conditions of the data contract.                                                 |\n| models                    | Map[string, [Model Object](#model-object)]           | Specifies the logical data model.                                                                                |\n| definitions               | Map[string, [Definition Object](#definition-object)] | Specifies definitions.                                                                                   |\n| schema                    | [Schema Object](#schema-object)                      | Specifies the physical schema. The specification supports different schema format.                       |\n| examples                  | Array of [Example Objects](#example-object)          | Specifies example data sets for the data model. The specification supports different example types.          |\n| quality                   | [Quality Object](#quality-object)                    | Specifies the quality attributes and checks. The specification supports different quality check DSLs.    |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field   | Type   | Description                                                                                                                                                      |\n|---------|--------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title   | `string` | REQUIRED. The title of the data contract.                                                                                                                        |\n| version | `string` | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| description | `string` | A description of the data contract.                                                                                                                              |\n| owner   | `string` | The owner or team responsible for managing the data contract and providing the data.                                                                            |\n| contact | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type     | Description                                                                                                                                                                                             |\n|-------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `s3`, `redshift`, `snowflake`, `databricks`, `postgres`, `kafka`, `pubsub`, `local` |\n| description | `string` | An optional string describing the server.                                                                                                                                                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `bigquery`            |\n| project | `string` | The GCP project name. |\n| dataset | `string` |                       |\n\n#### S3 Server Object\n\n| Field    | Type     | Description                    |\n|----------|----------|--------------------------------|\n| type     | `string` | `s3`                           |\n| location | `string` | S3 URL, starting with `s3://`  |\n| endpointUrl | `string` | The server endpoint for S3-compatible servers, such as `https://minio.example.com`  |\n| format   | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`  |\n| delimiter | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`  |\n\nExample:\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n```\n\n\n#### Redshift Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `redshift`  |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field   | Type     | Description                                                         |\n|---------|----------|---------------------------------------------------------------------|\n| type    | `string` | `databricks`                                                        |\n| host    | `string` | The Databricks host, e.g., `dbc-abcdefgh-1234.cloud.databricks.com` |\n| catalog | `string` | The name of the Hive or Unity catalog                               |\n| schema  | `string` | The schema name in the catalog                                      |\n\n#### Postgres Server Object\n\n| Field    | Type      | Description                                             |\n|----------|-----------|---------------------------------------------------------|\n| type     | `string`  | `postgres`                                              |\n| host     | `string`  | The host to the database server                         |\n| port     | `integer` | The port to the database server                         |\n| database | `string`  | The name of the database, e.g., `postgres`.             |\n| schema   | `string`  | The name of the schema in the database, e.g., `public`. |\n\n\n#### Kafka Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kafka`                                                                   |\n| host   | `string` | The bootstrap server of the kafka cluster.                                |\n| topic  | `string` | The topic name.                                                           |\n| format | `string` | The format of the message. Examples: json, avro, protobuf. Default: json. |\n\n#### Pub/Sub Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `pubsub`              |\n| project | `string` | The GCP project name. |\n| topic   | `string` | The topic name.       |\n\n#### Local Server Object\n\n| Field  | Type     | Description                                                                         |\n|--------|----------|-------------------------------------------------------------------------------------|\n| type   | `string` | `local`                                                                             |\n| path   | `string` | The relative or absolute path to the data file(s), such as `./folder/data.parquet`. |\n| format | `string` | The format of the file(s), such as `parquet`, `csv`, or `json`.                     |\n\n\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field                | Type   | Description                                                                                                                                                                 |\n|----------------------|--------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage                | `string` | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations          | `string` | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| billing              | `string` | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod         | `string` | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\n\n### Model Object\n\nThe Model Object describes the structure and semantics of a data model, such as tables, views, or structured files.\n\nThe name of the data model (table name) is defined by the key that refers to this Model Object.\n\n| Field       | Type                                         | Description                                                                   |\n|-------------|----------------------------------------------|-------------------------------------------------------------------------------|\n| type        | `string`                                     | The type of the model. Examples: `table`, `view`, `object`. Default: `table`. |\n| description | `string`                                     | An optional string describing the data model.                                 |\n| fields      | Map[`string`, [Field Object](#field-object)] | The fields (e.g. columns) of the data model.                                  |\n\n\n\n### Field Object\n\nThe Field Objects describes one field (column, property, nested field) of a data model.\n\n| Field            | Type                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description      | `string`                 | An optional string describing the semantic of the data in this field.                                                                                                                                                                                                                                                                                                                                                        |\n| type             | [Data Type](#data-types) | The logical data type of the field.                                                                                                                                                                                                                                                                                                                                                                                          |\n| required         | `boolean`                | An indication, if this field must contain a value and may not be null. Default: `false`                                                                                                                                                                                                                                                                                                                                      |\n| primary          | `boolean`                | If this field is a primary key. Default: `false`                                                                                                                                                                                                                                                                                                                                                                             |\n| references       | `string`                 | The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.                                                                                                                                                                                                                                                                                                                                                                           |\n| unique           | `boolean`                | An indication, if the value must be unique within the model. Default: `false`                                                                                                                                                                                                                                                                                                                                                |\n| format           | `string`                 | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| minLength        | `number`                 | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                 | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                 | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                 | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                 | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                 | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                 | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| example          | `string`                 | An example value.                                                                                                                                                                                                                                                                                                                                                                                                            |\n| pii              | `boolean`                | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               | \n| classification   | `string`                 | The data class defining the sensitivity level for this field, according to the organization's classification scheme. Examples may be: `sensitive`, `restricted`, `internal`, `public`.                                                                                                                                                                                                                                       |\n| tags             | Array of `string`        | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| $ref             | `string`                 | A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.                                                                                                                                                                                                                                                                                            |\n\n\n### Definition Object\n\nThe Definition Object includes a clear and concise explanations of syntax, semantic, and classification of a business object in a given domain.\nIt serves as a reference for a common understanding of terminology, ensure consistent usage and to identify join-able fields.\nModels fields can refer to definitions using the `$ref` field to link to existing definitions and avoid duplicate documentations.\n\n| Field            | Type                     | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| domain           | `string`                 | The domain in which this definition is valid. Default: `global`.                                                                                                                                                                                                                                                                                                                                                             |\n| name             | `string`                 | The technical name of this definition.                                                                                                                                                                                                                                                                                                                                                                                       |\n| title            | `string`                 | The business name of this definition.                                                                                                                                                                                                                                                                                                                                                                                        |\n| description      | `string`                 | Clear and concise explanations related to the domain                                                                                                                                                                                                                                                                                                                                                                         |\n| type             | [Data Type](#data-types) | The logical data type                                                                                                                                                                                                                                                                                                                                                                                                        |\n| enum             | array of `string`        | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| format           | `string`                 | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| minLength        | `number`                 | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                 | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                 | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                 | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                 | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                 | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                 | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| example          | `string`                 | An example value.                                                                                                                                                                                                                                                                                                                                                                                                            |\n| pii              | `boolean`                | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               |\n| classification   | `string`                 | The data class defining the sensitivity level for this field, according to the organization's classification scheme.                                                                                                                                                                                                                                                                                                         |\n| tags             | Array of `string`        | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n\n\n### Schema Object\n\nThe schema of the data contract describes the physical schema.\nThe type of the schema depends on the data platform.\n\n| Field | Type                                                                                                                                                                                                                 | Description                                                                                                                         |\n| ----- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                                                                                                               | REQUIRED. The type of the schema.<br> Typical values are: `dbt`, `bigquery`, `json-schema`, `sql-ddl`, `avro`, `protobuf`, `custom` |\n| specification | [dbt Schema Object](#dbt-schema-object) \\|<br> [BigQuery Schema Object](#bigquery-schema-object) \\|<br> [JSON Schema Schema Object](#bigquery-schema-object) \\|<br> [SQL DDL Schema Object](#sql-ddl-schema-object) \\|<br> `string` | REQUIRED. The specification of the schema. The schema specification can be encoded as a string or as inline YAML.                  |\n\n\n#### dbt Schema Object\n\nhttps://docs.getdbt.com/reference/model-properties\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: dbt\n  specification:\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: dbt\n  specification: |-\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\n#### BigQuery Schema Object\n\nThe schema structure is defined by the [Google BigQuery Table](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource:-table) object. You can extract such a Table object via the [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) endpoint.\n\nInstead of providing a single Table object, you can also provide an array of such objects. Be aware that [tables.list](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list) only returns a subset of the full Table object. You need to call every Table object via [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) to get the full Table object, including the actual schema.\n\nLearn more: [Google BigQuery REST Reference v2](https://cloud.google.com/bigquery/docs/reference/rest)\n\n\n\nExample:\n\n```yaml\nschema:\n  type: bigquery\n  specification: |-\n    {\n      \"tableReference\": {\n        \"projectId\": \"my-project\",\n        \"datasetId\": \"my_dataset\",\n        \"tableId\": \"my_table\"\n      },\n      \"description\": \"This is a description\",\n      \"type\": \"TABLE\",\n      \"schema\": {\n        \"fields\": [\n          {\n            \"name\": \"name\",\n            \"type\": \"STRING\",\n            \"mode\": \"NULLABLE\",\n            \"description\": \"This is a description\"\n          }\n        ]\n      }\n    }\n```\n\n#### JSON Schema Schema Object\n\nJSON Schema can be defined as JSON or rendered as YAML, following the [OpenAPI Schema Object dialect](https://spec.openapis.org/oas/v3.1.0#properties)\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: json-schema\n  specification:\n    orders:\n      description: One record per order. Includes cancelled and deleted orders.\n      type: object\n      properties:\n        order_id:\n          type: string\n          description: Primary key of the orders table\n        order_timestamp:\n          type: string\n          format: date-time\n          description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total:\n          type: integer\n          description: Total amount of the order in the smallest monetary unit (e.g., cents).\n    line_items:\n      type: object\n      properties:\n        lines_item_id:\n          type: string\n          description: Primary key of the lines_item_id table\n        order_id:\n          type: string\n          description: Foreign key to the orders table\n        sku:\n          type: string\n          description: The purchased article number\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: json-schema\n  specification: |-\n    {\n      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"orders\": {\n          \"type\": \"object\",\n          \"description\": \"One record per order. Includes cancelled and deleted orders.\",\n          \"properties\": {\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the orders table\"\n            },\n            \"order_timestamp\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\"\n            },\n            \"order_total\": {\n              \"type\": \"integer\",\n              \"description\": \"Total amount of the order in the smallest monetary unit (e.g., cents).\"\n            }\n          },\n          \"required\": [\"order_id\", \"order_timestamp\", \"order_total\"]\n        },\n        \"line_items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"lines_item_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the lines_item_id table\"\n            },\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Foreign key to the orders table\"\n            },\n            \"sku\": {\n              \"type\": \"string\",\n              \"description\": \"The purchased article number\"\n            }\n          },\n          \"required\": [\"lines_item_id\", \"order_id\", \"sku\"]\n        }\n      },\n      \"required\": [\"orders\", \"line_items\"]\n    }\n```\n\n#### SQL DDL Schema Object\n\nClassical SQL DDLs can be used to describe the structure.\n\n\nExample (string):\n\n```yaml\nschema:\n  type: sql-ddl\n  specification: |-\n      -- One record per order. Includes cancelled and deleted orders.\n      CREATE TABLE orders (\n        order_id TEXT PRIMARY KEY, -- Primary key of the orders table\n        order_timestamp TIMESTAMPTZ NOT NULL, -- The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total INTEGER NOT NULL -- Total amount of the order in the smallest monetary unit (e.g., cents)\n      );\n    \n      -- The items that are part of an order\n      CREATE TABLE line_items (\n        lines_item_id TEXT PRIMARY KEY, -- Primary key of the lines_item_id table\n        order_id TEXT REFERENCES orders(order_id), -- Foreign key to the orders table\n        sku TEXT NOT NULL -- The purchased article number\n      );\n\n```\n\n### Example Object\n\n| Field       | Type     | Description                                                                                                                             |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `csv`, `json`, `yaml`, `custom` |\n| description | `string` | An optional string describing the example.                                                                                              |\n| model       | `string` | The reference to the model in the schema, e.g. a table name.                                                                            |                                                                                        \n| data        | `string` | Example data for this model.                                                                                                            |\n\nExample:\n\n```yaml\nexamples:\n- type: csv\n  model: orders\n  data: |-\n    order_id,order_timestamp,order_total\n    \"1001\",\"2023-09-09T08:30:00Z\",2500\n    \"1002\",\"2023-09-08T15:45:00Z\",1800\n    \"1003\",\"2023-09-07T12:15:00Z\",3200\n    \"1004\",\"2023-09-06T19:20:00Z\",1500\n    \"1005\",\"2023-09-05T10:10:00Z\",4200\n    \"1006\",\"2023-09-04T14:55:00Z\",2800\n    \"1007\",\"2023-09-03T21:05:00Z\",1900\n    \"1008\",\"2023-09-02T17:40:00Z\",3600\n    \"1009\",\"2023-09-01T09:25:00Z\",3100\n    \"1010\",\"2023-08-31T22:50:00Z\",2700\n```\n\n### Quality Object\n\nThe quality object contains quality attributes and checks.\n\n| Field | Type                                                                                                                          | Description                                                                                                                     |\n| ----- |-------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------|\n| type | `string`                                                                                                                        | REQUIRED. The type of the schema.<br> Typical values are: `SodaCL`, `montecarlo`, `custom`                                      |\n| specification | [SodaCL Quality Object](#sodacl-quality-object) \\|<br> [Monte Carlo Schema Object](#monte-carlo-quality-object) \\|<br> `string` | REQUIRED. The specification of the quality attributes. The quality specification can be encoded as a string or as inline YAML.  |\n\n\n#### SodaCL Quality Object\n\nQuality attributes in [Soda Checks Language](https://docs.soda.io/soda-cl/soda-cl-overview.html).\n\nThe `specification` represents the content of a `checks.yml` file.\n\nExample (inline):\n\n```yaml\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, dbt-tests, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - row_count > 0\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 0\n```\n\nExample (string):\n\n```yaml\nquality:\n  type: SodaCL\n  specification: |-\n    checks for search_queries:\n      - freshness(search_timestamp) < 1d\n      - row_count > 100000\n      - missing_count(search_query) = 0\n```\n\n#### Monte Carlo Quality Object\n\nQuality attributes defined as Monte Carlos [Monitors as Code](https://docs.getmontecarlo.com/docs/monitors-as-code).\n\nThe `specification` represents the content of a `montecarlo.yml` file.\n\nExample (string):\n\n```yaml\nquality:\n  type: montecarlo\n  specification: |-\n    montecarlo:\n      field_health:\n        - table: project:dataset.table_name\n          timestamp_field: created\n      dimension_tracking:\n        - table: project:dataset.table_name\n          timestamp_field: created\n          field: order_status\n```\n\n### Data Types\n\nThe following data types are supported for model fields and definitions:\n\n- Unicode character sequence: `string`, `text`, `varchar`\n- Any numeric type, either integers or floating point numbers: `number`, `decimal`, `numeric`\n- 32-bit signed integer: `int`, `integer`\n- 64-bit signed integer: `long`, `bigint`\n- Single precision (32-bit) IEEE 754 floating-point number: `float`\n- Double precision (64-bit) IEEE 754 floating-point number: `double`\n- Binary value: `boolean`\n- Timestamp with timezone: `timestamp`, `timestamp_tz`\n- Timestamp with no timezone: `timestamp_ntz`\n- Date with no time information: `date`\n- Array: `array`\n- Sequence of 8-bit unsigned bytes: `bytes`\n- Complex type: `object`, `record`, `struct`\n- No value: `null`\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom fields can be added with any name. The value can be null, a primitive, an array or an object.\n\n### Design Principles\n\nThe Data Contract Specification follows these design principles:\n\n- A free, open, and open-sourced standard\n- Follow OpenAPI and AsyncAPI conventions so that it feels immediately familiar\n- Support contract-first approaches\n- Support code-first approaches\n- Support tooling by being machine-readable\n\nTooling\n---\n- [Data Contract CLI](https://github.com/datacontract/cli) is a free CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Contract Studio](https://studio.datacontract.com/) is a free web tool to develop and share data contracts.\n- [Data Mesh Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data products and data contracts. It supports the data contract specification and allows the user to import or export data contracts using this specification.\n\n\nOther Data Contract Specifications\n---\n- [AIDA User Group's Open Data Contract Standard](https://github.com/AIDAUserGroup/open-data-contract-standard)\n- [PayPal's Data Contract Template](https://github.com/paypal/data-contract-template/blob/main/docs/README.md)\n\nLiterature\n---\n- [Driving Data Quality with Data Contracts](https://www.amazon.com/dp/B0C37FPH3D) by Andrew Jones\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>\n"
  },
  {
    "path": "versions/0.9.2/datacontract.init.yaml",
    "content": "dataContractSpecification: 0.9.2\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### examples\n\n#examples:\n#  - type: csv\n#    model: my_model\n#    data: |-\n#      id,timestamp,amount\n#      \"1001\",\"2023-09-09T08:30:00Z\",2500\n#      \"1002\",\"2023-09-08T15:45:00Z\",1800\n\n\n### quality\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_model: |-\n#      - duplicate_count(id) = 0\n"
  },
  {
    "path": "versions/0.9.2/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\"\n        }\n      },\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"additionalProperties\": {\n        \"oneOf\": [\n          {\n            \"type\": \"object\",\n            \"title\": \"BigQueryServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"bigquery\",\n                  \"BigQuery\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"dataset\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"dataset\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"S3Server\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"s3\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"An optional string describing the server. Must be in the form of a URL.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"RedshiftServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"redshift\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"SnowflakeServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"snowflake\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"DatabricksServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"databricks\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The Databricks host\",\n                \"examples\": [\"dbc-abcdefgh-1234.cloud.databricks.com\"]\n              },\n              \"catalog\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the Hive or Unity catalog\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The schema name in the catalog\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"catalog\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"PostgresServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"postgres\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The host to the database server\",\n                \"examples\": [\"localhost\"]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"The port to the database server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the database.\",\n                \"examples\": [\"postgres\"]\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the schema in the database.\",\n                \"examples\": [\"public\"]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"port\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"KafkaServer\",\n            \"description\": \"Kafka Server\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"kafka\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The bootstrap server of the kafka cluster.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"The topic name.\"\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the message. Examples: json, avro, protobuf. Default: json.\",\n                \"default\": \"json\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"topic\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"PubSubServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"pubsub\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"The GCP project name.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"The topic name.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"topic\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"LocalServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"local\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"path\": {\n                \"type\": \"string\",\n                \"description\": \"The relative or absolute path to the data file(s).\",\n                \"examples\": [\n                  \"./folder/data.parquet\",\n                  \"./folder/*.parquet\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the file(s)\",\n                \"examples\": [\"json\", \"parquet\", \"csv\"]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"path\",\n              \"format\"\n            ]\n          }\n\n        ]\n      },\n      \"description\": \"Information about the servers.\"\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      }\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"type\": {\n                  \"type\": \"string\",\n                  \"title\": \"FieldType\",\n                  \"description\": \"The logical data type of the field.\",\n                  \"enum\": [\n                    \"number\",\n                    \"decimal\",\n                    \"numeric\",\n                    \"int\",\n                    \"integer\",\n                    \"long\",\n                    \"bigint\",\n                    \"float\",\n                    \"double\",\n                    \"string\",\n                    \"text\",\n                    \"varchar\",\n                    \"boolean\",\n                    \"timestamp\",\n                    \"timestamp_tz\",\n                    \"timestamp_ntz\",\n                    \"date\",\n                    \"array\",\n                    \"object\",\n                    \"record\",\n                    \"struct\",\n                    \"bytes\",\n                    \"null\"\n                  ]\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\"\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"description\": \"The logical data type.\"\n          },\n          \"minLength\": {\n            \"type\": \"number\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"number\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          }\n        },\n        \"required\": [\n          \"name\",\n          \"type\"\n        ]\n      }\n    },\n    \"schema\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"title\": \"SchemaType\",\n          \"enum\": [\n            \"dbt\",\n            \"bigquery\",\n            \"json-schema\",\n            \"sql-ddl\",\n            \"avro\",\n            \"protobuf\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the schema. Typical values are dbt, bigquery, json-schema, sql-ddl, avro, protobuf, custom.\"\n        },\n        \"specification\": {\n          \"oneOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the schema as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the schema as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The schema of the data contract describes the syntax and semantics of provided data sets. It supports different schema types.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"type\": {\n            \"type\": \"string\",\n            \"title\": \"ExampleType\",\n            \"enum\": [\n              \"csv\",\n              \"json\",\n              \"yaml\",\n              \"custom\"\n            ],\n            \"description\": \"The type of the example data. Well-known types are csv, json, yaml, custom.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string describing the example.\"\n          },\n          \"model\": {\n            \"type\": \"string\",\n            \"description\": \"The reference to the model in the schema, e.g., a table name.\"\n          },\n          \"data\": {\n            \"oneOf\": [{\n              \"type\": \"string\",\n              \"description\": \"Example data for this model.\"\n            },{\n              \"type\": \"array\",\n              \"description\": \"Example data for this model in a structured format. Use this for type json or yaml.\"\n            }]\n          }\n        },\n        \"required\": [\n          \"type\",\n          \"data\"\n        ]\n      },\n      \"description\": \"The Examples Object is an array of Example Objects.\"\n    },\n    \"quality\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"title\": \"QualityType\",\n          \"enum\": [\n            \"SodaCL\",\n            \"montecarlo\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the quality check. Typical values are SodaCL, montecarlo, custom.\"\n        },\n        \"specification\": {\n          \"oneOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the quality attributes as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the quality attributes as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The quality object contains quality attributes and checks.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ]\n}\n"
  },
  {
    "path": "versions/0.9.3/README.md",
    "content": "# Data Contract Specification\n\n<a href=\"https://github.com/datacontract/datacontract-specification\">\n    <img alt=\"Stars\" src=\"https://img.shields.io/github/stars/datacontract/datacontract-specification\" /></a>\n<a href=\"https://datacontract.com/slack\" rel=\"nofollow\"><img src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" alt=\"Slack Status\" data-canonical-src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" style=\"max-width: 100%;\"></a>\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers.\nThink of an API, but for data.\nA data contract is implemented by a data product or other data technologies, even legacy data warehouses.\nData contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets.\nIt is data platform neutral and can be used with any data platform, such as AWS S3, Google BigQuery, Azure, Databricks, and Snowflake.\nThe data contract specification is an open initiative to define a common data contract format.\nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/).\nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted.\nThey make semantic and quality expectations explicit.\nThey are often created collaboratively in [workshops](./workshop.md) together with data providers and data consumers.\nLater in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\nThe specification comes along with the [Data Contract CLI](https://github.com/datacontract/datacontract-cli), an open-source tool to develop, validate, and enforce data contracts.\n\n> _Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties.\n> The term \"contract\" may be somewhat misleading, but it is how it is used by the industry.\n> The mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract.\n> Data usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nVersion\n---\n\n0.9.3 ([Changelog](CHANGELOG.md))\n\nExample\n---\n\n[![Data Contract Catalog](https://img.shields.io/badge/Data%20Contract-Catalog-blue)](https://datacontract.com/examples/index.html)\n\n```yaml\ndataContractSpecification: 0.9.3\nid: urn:datacontract:checkout:orders-latest\ninfo:\n  title: Orders Latest\n  version: 1.0.0\n  description: |\n    Successful customer orders in the webshop. \n    All orders since 2020-01-01. \n    Orders with their line items are in their current state (no history included).\n  owner: Checkout Team\n  slackChannel: \"#checkout\"\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\ntags:\n  - checkout\n  - orders\n  - s3\nlinks:\n  datacontractCli: https://cli.datacontract.com\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://datacontract-example-orders-latest/data/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"One folder per model. One file per day.\"\nterms:\n  usage: |\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: |\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n        primary: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n        example: \"2024-09-09T08:30:00Z\"\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n        example: \"9999\"\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer. The email address was not verified.\n        type: text\n        format: email\n        required: true\n        pii: true\n        classification: sensitive\n      processed_timestamp:\n        description: The timestamp when the record was processed by the data platform.\n        type: timestamp\n        required: true\n        config:\n          jsonType: string\n          jsonFormat: date-time\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      lines_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n        unique: true\n        primary: true\n      order_id:\n        $ref: '#/definitions/order_id'\n        references: orders.order_id\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\ndefinitions:\n  order_id:\n    domain: checkout\n    name: order_id\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    example: 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n    tags:\n      - orders\n  sku:\n    domain: inventory\n    name: sku\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    example: \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article. \n      It is typically associated with an article's barcode, such as the EAN/GTIN.\n    links:\n      wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n    tags:\n      - inventory\nexamples:\n  - type: csv # csv, json, yaml, custom\n    model: orders\n    description: An example list of order records.\n    data: | # expressed as string or inline yaml or via \"$ref: data.csv\"\n      order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n      \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n      \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n  - type: csv\n    model: line_items\n    description: An example list of line items.\n    data: |\n      lines_item_id,order_id,sku\n      \"LI-1\",\"1001\",\"5901234123457\"\n      \"LI-2\",\"1001\",\"4001234567890\"\n      \"LI-3\",\"1002\",\"5901234123457\"\n      \"LI-4\",\"1002\",\"2001234567893\"\n      \"LI-5\",\"1003\",\"4001234567890\"\n      \"LI-6\",\"1003\",\"5001234567892\"\n      \"LI-7\",\"1004\",\"5901234123457\"\n      \"LI-8\",\"1005\",\"2001234567893\"\n      \"LI-9\",\"1005\",\"5001234567892\"\n      \"LI-10\",\"1005\",\"6001234567891\"\nservicelevels:\n  availability:\n    description: The server is available during support hours\n    percentage: 99.9%\n  retention:\n    description: Data is retained for one year\n    period: P1Y\n    unlimited: false\n  latency:\n    description: Data is available within 25 hours after the order was placed\n    threshold: 25h\n    sourceTimestampField: orders.order_timestamp\n    processedTimestampField: orders.processed_timestamp\n  freshness:\n    description: The age of the youngest row in a table.\n    threshold: 25h\n    timestampField: orders.order_timestamp\n  frequency:\n    description: Data is delivered once a day\n    type: batch # or streaming\n    interval: daily # for batch, either or cron\n    cron: 0 0 * * * # for batch, either or interval\n  support:\n    description: The data is available during typical business hours at headquarters\n    time: 9am to 5pm in EST on business days\n    responseTime: 1h\n  backup:\n    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n    interval: weekly\n    cron: 0 0 * * 0\n    recoveryTime: 24 hours\n    recoveryPoint: 1 week\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - row_count >= 5\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - values in (order_id) must exist in orders (order_id)\n      - row_count >= 5\n```\n\nData Contract CLI\n---\n\nThe [Data Contract CLI](https://cli.datacontract.com) is a command line tool and Python library to lint, test, import and export data contracts.\n\nHere is short example how to verify that your actual dataset matches the data contract:\n\n```bash\npip3 install datacontract-cli\ndatacontract test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nor, if you prefer Docker:\n```bash\ndocker run datacontract/cli test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nThe Data Contract contains all required information to verify data:\n\n- The _servers_ block has the connection details to the actual data set.\n- The _models_ define the syntax, formats, and constraints.\n- The _quality_ defined further quality checks.\n\nThe Data Contract CLI chooses the appropriate engine, formulates test cases, connects to the server, and executes the tests, based on the server type.\n\nMore information and configuration options on [cli.datacontract.com](https://cli.datacontract.com).\n\n\nSpecification\n---\n\n![The eight major categories in the data contract specification](images/categories.png)\n\n- [Data Contract Object](#data-contract-object)\n- [Info Object](#info-object)\n- [Contact Object](#contact-object)\n- [Server Object](#server-object)\n- [Terms Object](#terms-object)\n- [Model Object](#model-object)\n- [Field Object](#field-object)\n- [Definition Object](#definition-object)\n- [Schema Object (DEPRECATED)](#schema-object-deprecated)\n- [Example Object](#example-object)\n- [Service Level Object](#service-levels-object)\n- [Quality Object](#quality-object)\n- [Data Types](#data-types)\n- [Specification Extensions](#specification-extensions)\n\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                                                 | Description                                                                                              |\n|---------------------------|------------------------------------------------------|----------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                                             | REQUIRED. Specifies the Data Contract Specification being used.                                          |\n| id                        | `string`                                             | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number |\n| info                      | [Info Object](#info-object)                          | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                           |\n| servers                   | Map[`string`, [Server Object](#server-object)]         | Specifies the servers of the data contract.                                                              |\n| terms                     | [Terms Object](#terms-object)                        | Specifies the terms and conditions of the data contract.                                                 |\n| models                    | Map[`string`, [Model Object](#model-object)]           | Specifies the logical data model.                                                                        |\n| definitions               | Map[`string`, [Definition Object](#definition-object)] | Specifies definitions.                                                                                   |\n| schema                    | [Schema Object (DEPRECATED)](#schema-object-deprecated) | Specifies the physical schema. The specification supports different schema format.                       |\n| examples                  | Array of [Example Objects](#example-object)          | Specifies example data sets for the data model. The specification supports different example types.      |\n| servicelevels             | [Service Levels Object](#service-levels-object)      | Specifies the service level of the provided data                                                         |\n| quality                   | [Quality Object](#quality-object)                    | Specifies the quality attributes and checks. The specification supports different quality check DSLs.    |\n| links                     | Map[`string`, `string`]                                  | Additional external documentation links.                                                                 |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.    |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field       | Type                              | Description                                                                                                                                                      |\n|-------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title       | `string`                          | REQUIRED. The title of the data contract.                                                                                                                        |\n| version     | `string`                          | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| status      | `string`                          | The status of the data contract. Can be `proposed`, `in development`, `active`, `deprecated`, `retired`.                                                                   |\n| description | `string`                          | A description of the data contract.                                                                                                                              |\n| owner       | `string`                          | The owner or team responsible for managing the data contract and providing the data.                                                                             |\n| contact     | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type     | Description                                                                                                                                                                                                                                                                  |\n|-------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | REQUIRED. The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `s3`, `glue`, `redshift`, `azure`, `sqlserver`, `snowflake`, `databricks`, `postgres`, `oracle`, `kafka`, `pubsub`, `sftp`, `kinesis`, `trino`, `local` |\n| description | `string` | An optional string describing the server.                                                                                                                                                                                                                                    |\n| environment | `string` | An optional string describing the environment, e.g., prod, sit, stg.                                                                                                                                                                                                         |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `bigquery`            |\n| project | `string` | The GCP project name. |\n| dataset | `string` |                       |\n\n#### S3 Server Object\n\n| Field       | Type     | Description                                                                                                             |\n|-------------|----------|-------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | `s3`                                                                                                                    |\n| location    | `string` | S3 URL, starting with `s3://`                                                                                           |\n| endpointUrl | `string` | The server endpoint for S3-compatible servers, such as MioIO or Google Cloud Storage, e.g., `https://minio.example.com` |\n| format      | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                              |\n| delimiter   | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`        |\n\nExample (AWS S3):\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n    format: json\n    delimiter: new_line\n```\n\nExample (MinIO):\n\n```yaml\nservers:\n  minio:\n    type: s3\n    endpointUrl: http://localhost:9000\n    location: s3://my-bucket/path/\n    format: delta\n```\n\nExample (Google Cloud Storage):\n\n```yaml\nservers:\n  gcs:\n    type: s3\n    endpointUrl: https://storage.googleapis.com\n    location: s3://my-bucket/path/*/*/*/*/*.parquet\n    format: parquet\n```\n\n\n#### Redshift Server Object\n\n| Field             | Type     | Description                                                                                                         |\n|-------------------|----------|---------------------------------------------------------------------------------------------------------------------|\n| type              | `string` | `redshift`                                                                                                          |\n| account           | `string` |                                                                                                                     |\n| database          | `string` |                                                                                                                     |\n| schema            | `string` |                                                                                                                     |\n| clusterIdentifier | `string` | Identifier of the cluster. <br /> Example: `analytics-cluster`                                                      |\n| host              | `string` | Host of the cluster. <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com`                   |\n| port              | `number` | Port of the cluster. <br /> Example: `5439`                                                                         |\n| endpoint          | `string` | Endpoint of the cluster <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics` |\n\nExample, specifying an endpoint:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    endpoint: analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\n```\n\nExample, specifying the cluster identifier:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    clusterIdentifier: analytics-cluster\n```\n\nExample, specifying the cluster host:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    host: analytics-cluster.example.eu-west-1.redshift.amazonaws.com\n    port: 5439\n```\n\n#### Azure Server Object\n\n| Field     | Type     | Description                                                                                                                                                                                                                                                                                                              |\n|-----------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type      | `string` | `azure`                                                                                                                                                                                                                                                                                                                  |\n| location  | `string` | Fully qualified path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs. Starting with `az://` or `abfss`<br> Examples: `az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet` or `abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet` |\n| format    | `string` | Format of files, such as `parquet`, `json`, `csv`                                                                                                                                                                                                                                                                        |\n| delimiter | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`                                                                                                                                                                                                         |\n\n\n#### SQL-Server Server Object\n\n| Field    | Type      | Description                                          |\n|----------|-----------|------------------------------------------------------|\n| type     | `string`  | `sqlserver`                                          |\n| host     | `string`  | The host to the database server                      |\n| port     | `integer` | The port to the database server, default: `1433`     |\n| database | `string`  | The name of the database, e.g., `database`.          |\n| schema   | `string`  | The name of the schema in the database, e.g., `dbo`. |\n| driver   | `string`  | The name of the supported driver, e.g., `ODBC Driver 18 for SQL Server`. |\n\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field   | Type     | Description                                                         |\n|---------|----------|---------------------------------------------------------------------|\n| type    | `string` | `databricks`                                                        |\n| host    | `string` | The Databricks host, e.g., `dbc-abcdefgh-1234.cloud.databricks.com` |\n| catalog | `string` | The name of the Hive or Unity catalog                               |\n| schema  | `string` | The schema name in the catalog                                      |\n\n#### Postgres Server Object\n\n| Field    | Type      | Description                                             |\n|----------|-----------|---------------------------------------------------------|\n| type     | `string`  | `postgres`                                              |\n| host     | `string`  | The host to the database server                         |\n| port     | `integer` | The port to the database server                         |\n| database | `string`  | The name of the database, e.g., `postgres`.             |\n| schema   | `string`  | The name of the schema in the database, e.g., `public`. |\n\n#### Oracle Server Object\n\n| Field       | Type      | Description                     |\n|-------------|-----------|---------------------------------|\n| type        | `string`  | `oracle`                        |\n| host        | `string`  | The host to the oracle server   |\n| port        | `integer` | The port to the oracle server   |\n| serviceName | `string`  | The name of the service         |\n\n#### Kafka Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kafka`                                                                   |\n| host   | `string` | The bootstrap server of the kafka cluster.                                |\n| topic  | `string` | The topic name.                                                           |\n| format | `string` | The format of the message. Examples: json, avro, protobuf. Default: json. |\n\n#### Pub/Sub Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `pubsub`              |\n| project | `string` | The GCP project name. |\n| topic   | `string` | The topic name.       |\n\n#### sftp Server Object\n\n| Field     | Type     | Description                                                                                                      |\n|-----------|----------|------------------------------------------------------------------------------------------------------------------|\n| type      | `string` | `sftp`                                                                                                           |\n| location  | `string` | S3 URL, starting with `sftp://`                                                                                  |\n| format    | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                       |\n| delimiter | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array` |\n\n#### AWS Kinesis Data Streams Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kinesis`                                                                 |\n| stream | `string` | The name of the Kinesis data stream.                                      |\n| region | `string` | AWS region, e.g., `eu-west-1`.                                            |\n| format | `string` | The format of the records. Examples: json, avro, protobuf.                |\n\n#### Trino Server Object\n\n| Field    | Type      | Description                                               |\n|----------|-----------|-----------------------------------------------------------|\n| type     | `string`  | `trino`                                                   |\n| host     | `string`  | The Trino host                                            |\n| port     | `integer` | The Trino port                                            | \n| catalog  | `string`  | The name of the catalog, e.g., `my_catalog`.              |\n| schema   | `string`  | The name of the schema in the catalog, e.g., `my_schema`. |\n\n#### Local Server Object\n\n| Field  | Type     | Description                                                                         |\n|--------|----------|-------------------------------------------------------------------------------------|\n| type   | `string` | `local`                                                                             |\n| path   | `string` | The relative or absolute path to the data file(s), such as `./folder/data.parquet`. |\n| format | `string` | The format of the file(s), such as `parquet`, `delta`, `csv`, or `json`.            |\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field        | Type     | Description                                                                                                                                                                 |\n|--------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage        | `string` | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations  | `string` | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| billing      | `string` | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod | `string` | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Model Object\n\nThe Model Object describes the structure and semantics of a data model, such as tables, views, or structured files.\n\nThe name of the data model (table name) is defined by the key that refers to this Model Object.\n\n| Field       | Type                                         | Description                                                                                                                          |\n|-------------|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`                                     | The type of the model. Examples: `table`, `view`, `object`. Default: `table`.                                                        |\n| description | `string`                                     | An optional string describing the data model.                                                                                        |\n| title       | `string`                                     | An optional string for the title of the data model. Especially useful if the name of the model is cryptic or contains abbreviations. |\n| fields      | Map[`string`, [Field Object](#field-object)] | The fields (e.g. columns) of the data model.                                                                                         |\n| config      | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                             |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Field Object\n\nThe Field Objects describes one field (column, property, nested field) of a data model.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description      | `string`                                     | An optional string describing the semantic of the data in this field.                                                                                                                                                                                                                                                                                                                                                        |\n| type             | [Data Type](#data-types)                     | The logical data type of the field.                                                                                                                                                                                                                                                                                                                                                                                          |\n| title            | `string`                                     | An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.                                                                                                                                                                                                                                                                                  |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| required         | `boolean`                                    | An indication, if this field must contain a value and may not be null. Default: `false`                                                                                                                                                                                                                                                                                                                                      |\n| primary          | `boolean`                                    | If this field is a primary key. Default: `false`                                                                                                                                                                                                                                                                                                                                                                             |\n| references       | `string`                                     | The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.                                                                                                                                                                                                                                                     |\n| unique           | `boolean`                                    | An indication, if the value must be unique within the model. Default: `false`                                                                                                                                                                                                                                                                                                                                                |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| example          | `string`                                     | An example value.                                                                                                                                                                                                                                                                                                                                                                                                            |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               | \n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme. Examples may be: `sensitive`, `restricted`, `internal`, `public`.                                                                                                                                                                                                                                       |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`,`string`]                       | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| $ref             | `string`                                     | A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.                                                                                                                                                                                                                                                                                            |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n| config           | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                                                                                                                                                                                                                                                                                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Definition Object\n\nThe Definition Object includes a clear and concise explanations of syntax, semantic, and classification of a business object in a given domain.\nIt serves as a reference for a common understanding of terminology, ensure consistent usage and to identify join-able fields.\nModels fields can refer to definitions using the `$ref` field to link to existing definitions and avoid duplicate documentations.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| name             | `string`                                     | REQUIRED. The technical name of this definition.                                                                                                                                                                                                                                                                                                                                                                             |\n| type             | [Data Type](#data-types)                     | REQUIRED. The logical data type                                                                                                                                                                                                                                                                                                                                                                                              |\n| domain           | `string`                                     | The domain in which this definition is valid. Default: `global`.                                                                                                                                                                                                                                                                                                                                                             |\n| title            | `string`                                     | The business name of this definition.                                                                                                                                                                                                                                                                                                                                                                                        |\n| description      | `string`                                     | Clear and concise explanations related to the domain                                                                                                                                                                                                                                                                                                                                                                         |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| example          | `string`                                     | An example value.                                                                                                                                                                                                                                                                                                                                                                                                            |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               |\n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme.                                                                                                                                                                                                                                                                                                         |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`, `string`]                      | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Schema Object (DEPRECATED)\n\nThe schema of the data contract describes the physical schema.\nThe type of the schema depends on the data platform.\n\n| Field         | Type                                                                                                                                                                                                                                | Description                                                                                                                         |\n|---------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------|\n| type          | `string`                                                                                                                                                                                                                            | REQUIRED. The type of the schema.<br> Typical values are: `dbt`, `bigquery`, `json-schema`, `sql-ddl`, `avro`, `protobuf`, `custom` |\n| specification | [dbt Schema Object](#dbt-schema-object) \\|<br> [BigQuery Schema Object](#bigquery-schema-object) \\|<br> [JSON Schema Schema Object](#bigquery-schema-object) \\|<br> [SQL DDL Schema Object](#sql-ddl-schema-object) \\|<br> `string` | REQUIRED. The specification of the schema. The schema specification can be encoded as a string or as inline YAML.                   |\n\n\n#### dbt Schema Object\n\nhttps://docs.getdbt.com/reference/model-properties\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: dbt\n  specification:\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: dbt\n  specification: |-\n    version: 2\n    models:\n      - name: \"My Table\"\n        description: \"My description\"\n        columns:\n          - name: \"My column\"\n            data_type: text\n            description: \"My description\"\n```\n\n#### BigQuery Schema Object\n\nThe schema structure is defined by the [Google BigQuery Table](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables#resource:-table) object. You can extract such a Table object via the [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) endpoint.\n\nInstead of providing a single Table object, you can also provide an array of such objects. Be aware that [tables.list](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/list) only returns a subset of the full Table object. You need to call every Table object via [tables.get](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/get) to get the full Table object, including the actual schema.\n\nLearn more: [Google BigQuery REST Reference v2](https://cloud.google.com/bigquery/docs/reference/rest)\n\n\n\nExample:\n\n```yaml\nschema:\n  type: bigquery\n  specification: |-\n    {\n      \"tableReference\": {\n        \"projectId\": \"my-project\",\n        \"datasetId\": \"my_dataset\",\n        \"tableId\": \"my_table\"\n      },\n      \"description\": \"This is a description\",\n      \"type\": \"TABLE\",\n      \"schema\": {\n        \"fields\": [\n          {\n            \"name\": \"name\",\n            \"type\": \"STRING\",\n            \"mode\": \"NULLABLE\",\n            \"description\": \"This is a description\"\n          }\n        ]\n      }\n    }\n```\n\n#### JSON Schema Schema Object\n\nJSON Schema can be defined as JSON or rendered as YAML, following the [OpenAPI Schema Object dialect](https://spec.openapis.org/oas/v3.1.0#properties)\n\nExample (inline YAML):\n\n```yaml\nschema:\n  type: json-schema\n  specification:\n    orders:\n      description: One record per order. Includes cancelled and deleted orders.\n      type: object\n      properties:\n        order_id:\n          type: string\n          description: Primary key of the orders table\n        order_timestamp:\n          type: string\n          format: date-time\n          description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total:\n          type: integer\n          description: Total amount of the order in the smallest monetary unit (e.g., cents).\n    line_items:\n      type: object\n      properties:\n        lines_item_id:\n          type: string\n          description: Primary key of the lines_item_id table\n        order_id:\n          type: string\n          description: Foreign key to the orders table\n        sku:\n          type: string\n          description: The purchased article number\n```\n\nExample (string):\n\n```yaml\nschema:\n  type: json-schema\n  specification: |-\n    {\n      \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"orders\": {\n          \"type\": \"object\",\n          \"description\": \"One record per order. Includes cancelled and deleted orders.\",\n          \"properties\": {\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the orders table\"\n            },\n            \"order_timestamp\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\"\n            },\n            \"order_total\": {\n              \"type\": \"integer\",\n              \"description\": \"Total amount of the order in the smallest monetary unit (e.g., cents).\"\n            }\n          },\n          \"required\": [\"order_id\", \"order_timestamp\", \"order_total\"]\n        },\n        \"line_items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"lines_item_id\": {\n              \"type\": \"string\",\n              \"description\": \"Primary key of the lines_item_id table\"\n            },\n            \"order_id\": {\n              \"type\": \"string\",\n              \"description\": \"Foreign key to the orders table\"\n            },\n            \"sku\": {\n              \"type\": \"string\",\n              \"description\": \"The purchased article number\"\n            }\n          },\n          \"required\": [\"lines_item_id\", \"order_id\", \"sku\"]\n        }\n      },\n      \"required\": [\"orders\", \"line_items\"]\n    }\n```\n\n#### SQL DDL Schema Object\n\nClassical SQL DDLs can be used to describe the structure.\n\n\nExample (string):\n\n```yaml\nschema:\n  type: sql-ddl\n  specification: |-\n      -- One record per order. Includes cancelled and deleted orders.\n      CREATE TABLE orders (\n        order_id TEXT PRIMARY KEY, -- Primary key of the orders table\n        order_timestamp TIMESTAMPTZ NOT NULL, -- The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        order_total INTEGER NOT NULL -- Total amount of the order in the smallest monetary unit (e.g., cents)\n      );\n    \n      -- The items that are part of an order\n      CREATE TABLE line_items (\n        lines_item_id TEXT PRIMARY KEY, -- Primary key of the lines_item_id table\n        order_id TEXT REFERENCES orders(order_id), -- Foreign key to the orders table\n        sku TEXT NOT NULL -- The purchased article number\n      );\n\n```\n\n### Example Object\n\n| Field       | Type     | Description                                                                                                                             |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | The type of the data product technology that implements the data contract. Well-known server types are: `csv`, `json`, `yaml`, `custom` |\n| description | `string` | An optional string describing the example.                                                                                              |\n| model       | `string` | The reference to the model in the schema, e.g. a table name.                                                                            |                                                                                        \n| data        | `string` | Example data for this model.                                                                                                            |\n\nExample:\n\n```yaml\nexamples:\n- type: csv\n  model: orders\n  data: |-\n    order_id,order_timestamp,order_total\n    \"1001\",\"2023-09-09T08:30:00Z\",2500\n    \"1002\",\"2023-09-08T15:45:00Z\",1800\n    \"1003\",\"2023-09-07T12:15:00Z\",3200\n    \"1004\",\"2023-09-06T19:20:00Z\",1500\n    \"1005\",\"2023-09-05T10:10:00Z\",4200\n    \"1006\",\"2023-09-04T14:55:00Z\",2800\n    \"1007\",\"2023-09-03T21:05:00Z\",1900\n    \"1008\",\"2023-09-02T17:40:00Z\",3600\n    \"1009\",\"2023-09-01T09:25:00Z\",3100\n    \"1010\",\"2023-08-31T22:50:00Z\",2700\n```\n\n### Service Levels Object\n\nA service level is defined as an agreed-upon, measurable level of performance for provided the data.\nData Contract Specification defines well-known service levels.\nThis list can be extended with custom service levels.\n\nOne can either describe each service level informally using the `description` field, or make use of the predefined fields for automation support, e.g., via the [Data Contract CLI](https://cli.datacontract.com).\n\n| Field        | Type                                          | Description                                                             |\n|--------------|-----------------------------------------------|-------------------------------------------------------------------------|\n| availability | [Availability Object](#availability-object)   | The promised uptime of the system that provides the data                |\n| retention    | [Retention Object](#retention-object)         | The period how long data will be available.                             |\n| latency      | [Latency Object](#latency-object)             | The maximum amount of time from the source to its destination. |\n| freshness    | [Freshness Object](#freshness-object)         | The maximum age of the youngest entry.                                  |\n| frequency    | [Frequency Object](#frequency-object)         | The update frequency.                                                   |\n| support      | [Support Object](#support-object)             | The times when support is provided.                                     |\n| backup       | [Backup Object](#backup-object)               | The details about data backup procedures.                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Availability Object\n\nAvailability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\n\n| Field       | Type     | Description                                                                    |\n|-------------|----------|--------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the availability service level.                  |\n| percentage  | `string` | An optional string describing the guaranteed uptime in percent (e.g., `99.9%`) |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Retention Object\n\nRetention covers the period how long data will be available.\n\n| Field          | Type      | Description                                                                                                                                             |\n|----------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description    | `string`  | An optional string describing the retention service level.                                                                                              |\n| period         | `string`  | An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).  |\n| unlimited      | `boolean` | An optional indicator that data is kept forever.                                                                                                        |\n| timestampField | `string`  | An optional reference to the field that contains the timestamp that the period refers to.                                                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Latency Object\n\nLatency refers to the maximum amount of time from the source to its destination.\n\nExamples are the maximum duration it takes after an order has been recorded in the ecommerce shop until it is available in the orders table in the data analytics platform. This includes the waiting times until the next batch run is started and the processing time of the pipeline.\n\n| Field                   | Type     | Description                                                                                                                                                                              |\n|-------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the latency service level.                                                                                                                                 |\n| threshold               | `string` | An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| sourceTimestampField    | `string` | An optional reference to the field that contains the timestamp when the data was provided at the source.                                                                                 |\n| processedTimestampField | `string` | An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.                             |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Freshness Object\n\nFreshness refers to the maximum age of the youngest entry.\n\n| Field                   | Type     | Description                                                                                                                                      |\n|-------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the freshness service level.                                                                                       |\n| threshold               | `string` | An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| timestampField          | `string` | An optional reference to the field that contains the timestamp that the threshold refers to.                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Frequency Object\n\nFrequency describes how often data is updated.\n\n| Field       | Type     | Description                                                                                               |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the frequency service level.                                                |\n| type        | `string` | An optional type of data processing. Typical values are `batch`, `micro-batching`, `streaming`, `manual`. |\n| interval    | `string` | Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.                             |\n| cron        | `string` | Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Support Object\n\nSupport describes the times when support will be available for contact.\n\n| Field        | Type     | Description                                                                                                                                                                                                                                 |\n|--------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description  | `string` | An optional string describing the support service level.                                                                                                                                                                                    |\n| time         | `string` | An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.                                                                                                                 |\n| responseTime | `string` | An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with. |\n\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Backup Object\n\nBackup specifies details about data backup procedures.\n\n| Field         | Type     | Description                                                                                                                                                                                                                                                                                                        |\n|---------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description   | `string` | An optional string describing the backup service level.                                                                                                                                                                                                                                                            |\n| interval      | `string` | An optional interval that defines how often data will be backed up, e.g., `daily`.                                                                                                                                                                                                                                 |\n| cron          | `string` | An optional cron expression when data will be backed up, e.g., `0 0 * * *`.                                                                                                                                                                                                                                        |\n| recoveryTime  | `string` | An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).                                                                                                                                      |\n| recoveryPoint | `string` | An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours). |\n\n\n\n### Quality Object\n\nThe quality object contains quality attributes and checks.\n\n| Field         | Type                                                                                                                                                                                                           | Description                                                                                                                    |\n|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------|\n| type          | `string`                                                                                                                                                                                                       | REQUIRED. The type of the schema.<br> Typical values are: `SodaCL`, `montecarlo`, `great-expectations`, `custom`               |\n| specification | [SodaCL Quality Object](#sodacl-quality-object) \\|<br> [Monte Carlo Schema Object](#monte-carlo-quality-object) \\|<br> [Great Expectations Quality Object](#great-expectations-quality-object) \\|<br> `string` | REQUIRED. The specification of the quality attributes. The quality specification can be encoded as a string or as inline YAML. |\n\n\n#### SodaCL Quality Object\n\nQuality attributes in [Soda Checks Language](https://docs.soda.io/soda-cl/soda-cl-overview.html).\n\nThe `specification` represents the content of a `checks.yml` file.\n\nExample (inline):\n\n```yaml\nquality:\n  type: SodaCL   # data quality check format: SodaCL, montecarlo, dbt-tests, custom\n  specification: # expressed as string or inline yaml or via \"$ref: checks.yaml\"\n    checks for orders:\n      - row_count > 0\n      - duplicate_count(order_id) = 0\n    checks for line_items:\n      - row_count > 0\n```\n\nExample (string):\n\n```yaml\nquality:\n  type: SodaCL\n  specification: |-\n    checks for search_queries:\n      - freshness(search_timestamp) < 1d\n      - row_count > 100000\n      - missing_count(search_query) = 0\n```\n\n#### Monte Carlo Quality Object\n\nQuality attributes defined as Monte Carlos [Monitors as Code](https://docs.getmontecarlo.com/docs/monitors-as-code).\n\nThe `specification` represents the content of a `montecarlo.yml` file.\n\nExample (string):\n\n```yaml\nquality:\n  type: montecarlo\n  specification: |-\n    montecarlo:\n      field_health:\n        - table: project:dataset.table_name\n          timestamp_field: created\n      dimension_tracking:\n        - table: project:dataset.table_name\n          timestamp_field: created\n          field: order_status\n```\n\n#### Great Expectations Quality Object\n\nQuality attributes defined as Great Expectations [Expectations](https://greatexpectations.io/expectations/).\n\nThe `specification` represents a list of expectations on a specific model.\n\nExample (string):\n\n```yaml\nquality:\n  type: great-expectations\n  specification:\n    orders: |-\n      [\n          {\n              \"expectation_type\": \"expect_table_row_count_to_be_between\",\n              \"kwargs\": {\n                  \"min_value\": 10\n              },\n              \"meta\": {\n      \n              }\n          }\n      ]\n```\n\n### Config Object\n\nThe config field can be used to set additional metadata that may be used by tools, e.g. to define a namespace for code generation, specify physical data types, toggle tests, etc.\n\nA config field can be added with any name. The value can be null, a primitive, an array or an object.\n\nFor developer experience, a list of well-known field names is maintained here, as these fields are used in the Data Contract CLI:\n\n\n| Field           | Type     | Description                                                                                                    |\n|-----------------|----------|----------------------------------------------------------------------------------------------------------------|\n| avroNamespace   | `string` | (Only on model level) The namespace to use when importing and exporting the data model from / to Apache Avro.  |\n| avroType        | `string` | (Only on field level) Specify the field type to use when exporting the data model to Apache Avro.              |\n| avroLogicalType | `string` | (Only on field level) Specify the logical field type to use when  exporting the data model to Apache Avro.     |\n| bigqueryType    | `string` | (Only on field level) Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)` |\n| snowflakeType   | `string` | (Only on field level) Specify the physical column type that is used in a Snowflake table, e.g, `TIMESTAMP_LTZ` |\n| redshiftType    | `string` | (Only on field level) Specify the physical column type that is used in a Redshift table, e.g, `SMALLINT`       |\n| sqlserverType   | `string` | (Only on field level) Specify the physical column type that is used in a Snowflake table, e.g, `DATETIME2`     |\n| databricksType  | `string` | (Only on field level) Specify the physical column type that is used in a Databricks table                      |\n| glueType        | `string` | (Only on field level) Specify the physical column type that is used in a AWS Glue Data Catalog table           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\nExample:\n\n```\nmodels:\n  orders:\n    config:\n      avroNamespace: \"my.namespace\"\n    fields:\n      my_field_1:\n        description: Example for AVRO with Timestamp (millisecond precision)\n        type: timestamp\n        config:\n          avroType: long\n          avroLogicalType: timestamp-millis\n          snowflakeType: timestamp_tz\n```\n\n\n### Data Types\n\nThe following data types are supported for model fields and definitions:\n\n- Unicode character sequence: `string`, `text`, `varchar`\n- Any numeric type, either integers or floating point numbers: `number`, `decimal`, `numeric`\n- 32-bit signed integer: `int`, `integer`\n- 64-bit signed integer: `long`, `bigint`\n- Single precision (32-bit) IEEE 754 floating-point number: `float`\n- Double precision (64-bit) IEEE 754 floating-point number: `double`\n- Binary value: `boolean`\n- Timestamp with timezone: `timestamp`, `timestamp_tz`\n- Timestamp with no timezone: `timestamp_ntz`\n- Date with no time information: `date`\n- Array: `array`\n- Map: `map` (may not be supported by some server types)\n- Sequence of 8-bit unsigned bytes: `bytes`\n- Complex type: `object`, `record`, `struct`\n- No value: `null`\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom field can be added with any name. The value can be null, a primitive, an array or an object.\n\n\nTooling\n---\n- [Data Contract CLI](https://github.com/datacontract/datacontract-cli) is an open-source CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Contract Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data contracts. It includes a data contract catalog, a Web-Editor, and a request and approval workflow to automate access to data products for a full enterprise data marketplace.\n- [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.\n- [Data Contract Editor](https://editor.datacontract.com) is an open-source editor for Data Contracts, including a live html preview.\n\nCode Completion\n---\nThe [JSON Schema](https://datacontract.com/datacontract.schema.json) of the current data contract specification is registered in [Schema Store](https://www.schemastore.org/), which brings code completion and syntax checks for all major IDEs.\nIntelliJ comes with a built-in YAML plugin which will show you autocompletions.\nFor VS Code we recommend to install the [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) plugin.\nNo additional configuration is required.\n\nAutocompletion is then enabled for files following these patterns:\n\n```\ndatacontract.yaml\ndatacontract.yml\n*-datacontract.yaml\n*-datacontract.yml\n*.datacontract.yaml\n*.datacontract.yml\ndatacontract-*.yaml\ndatacontract-*.yml\n**/datacontract/*.yml\n**/datacontract/*.yaml\n**/datacontracts/*.yml\n**/datacontracts/*.yaml\n```\n\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>"
  },
  {
    "path": "versions/0.9.3/datacontract.init.yaml",
    "content": "dataContractSpecification: 0.9.3\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### examples\n\n#examples:\n#  - type: csv\n#    model: my_model\n#    data: |-\n#      id,timestamp,amount\n#      \"1001\",\"2023-09-09T08:30:00Z\",2500\n#      \"1002\",\"2023-09-08T15:45:00Z\",1800\n\n### servicelevels\n\n#servicelevels:\n#  availability:\n#    description: The server is available during support hours\n#    percentage: 99.9%\n#  retention:\n#    description: Data is retained for one year because!\n#    period: P1Y\n#    unlimited: false\n#  latency:\n#    description: Data is available within 25 hours after the order was placed\n#    threshold: 25h\n#    sourceTimestampField: orders.order_timestamp\n#    processedTimestampField: orders.processed_timestamp\n#  freshness:\n#    description: The age of the youngest row in a table.\n#    threshold: 25h\n#    timestampField: orders.order_timestamp\n#  frequency:\n#    description: Data is delivered once a day\n#    type: batch # or streaming\n#    interval: daily # for batch, either or cron\n#    cron: 0 0 * * * # for batch, either or interval\n#  support:\n#    description: The data is available during typical business hours at headquarters\n#    time: 9am to 5pm in EST on business days\n#    responseTime: 1h\n#  backup:\n#    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n#    interval: weekly\n#    cron: 0 0 * * 0\n#    recoveryTime: 24 hours\n#    recoveryPoint: 1 week\n\n### quality\n\n#quality:\n#  type: SodaCL\n#  specification:\n#    checks for my_model: |-\n#      - duplicate_count(id) = 0"
  },
  {
    "path": "versions/0.9.3/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"0.9.3\",\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"The status of the data contract. Can be proposed, in development, active, retired.\",\n          \"x-extensible-enum\": [\n            \"proposed\",\n            \"in development\",\n            \"active\",\n            \"deprecated\",\n            \"retired\"\n          ]\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\",\n          \"additionalProperties\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the servers.\"\n        },\n        \"environment\": {\n          \"type\": \"string\",\n          \"description\": \"The environment in which the servers are running. Examples: prod, sit, stg.\"\n        }\n      },\n      \"additionalProperties\": {\n        \"oneOf\": [\n          {\n            \"type\": \"object\",\n            \"title\": \"BigQueryServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"bigquery\",\n                  \"BigQuery\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"dataset\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"dataset\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"S3Server\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"s3\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"An optional string describing the server. Must be in the form of a URL.\",\n                \"examples\": [\n                  \"s3://datacontract-example-orders-latest/data/{model}/*.json\"\n                ]\n              },\n              \"endpointUrl\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"The server endpoint for S3-compatible servers.\",\n                \"examples\": [\"https://minio.example.com\"]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"parquet\",\n                  \"delta\",\n                  \"json\",\n                  \"csv\"\n                ],\n                \"description\": \"File format.\"\n              },\n              \"delimiter\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"new_line\",\n                  \"array\"\n                ],\n                \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"GcsServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"gcs\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"The GS/GCS url to the data.\",\n                \"examples\": [\n                  \"gs://example-storage/data/*/*.json\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"parquet\",\n                  \"delta\",\n                  \"json\",\n                  \"csv\"\n                ],\n                \"description\": \"File format.\"\n              },\n              \"delimiter\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"new_line\",\n                  \"array\"\n                ],\n                \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"SftpServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"sftp\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"An optional string describing the server. Must be in the form of a sftp URL.\",\n                \"examples\": [\n                  \"sftp://123.123.12.123/{model}/*.json\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"parquet\",\n                  \"delta\",\n                  \"json\",\n                  \"csv\"\n                ],\n                \"description\": \"File format.\"\n              },\n              \"delimiter\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"new_line\",\n                  \"array\"\n                ],\n                \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"location\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"RedshiftServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"redshift\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the host name.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"clusterIdentifier\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the cluster's identifier.\",\n                \"examples\": [\n                  \"redshift-prod-eu\",\n                  \"analytics-cluster\"\n                ]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"An optional string describing the cluster's port.\",\n                \"examples\": [\n                  5439\n                ]\n              },\n              \"endpoint\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the cluster's endpoint.\",\n                \"examples\": [\n                  \"analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"AzureServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"azure\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"Fully qualified path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs.\",\n                \"examples\": [\n                  \"az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet\",\n                  \"abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"parquet\",\n                  \"delta\",\n                  \"json\",\n                  \"csv\"\n                ],\n                \"description\": \"File format.\"\n              },\n              \"delimiter\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"new_line\",\n                  \"array\"\n                ],\n                \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"location\",\n              \"format\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"SqlserverServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"sqlserver\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The host to the database server\",\n                \"examples\": [\n                  \"localhost\"\n                ]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"The port to the database server.\",\n                \"default\": 1433,\n                \"examples\": [\n                  1433\n                ]\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the database.\",\n                \"examples\": [\n                  \"database\"\n                ]\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the schema in the database.\",\n                \"examples\": [\n                  \"dbo\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"SnowflakeServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"snowflake\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"An optional string describing the server.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"DatabricksServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"databricks\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The Databricks host\",\n                \"examples\": [\n                  \"dbc-abcdefgh-1234.cloud.databricks.com\"\n                ]\n              },\n              \"catalog\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the Hive or Unity catalog\"\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The schema name in the catalog\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"catalog\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"DataframeServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"dataframe\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"GlueServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"glue\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"account\": {\n                \"type\": \"string\",\n                \"description\": \"The AWS Glue account\",\n                \"examples\": [\n                  \"1234-5678-9012\"\n                ]\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"The AWS Glue database name\",\n                \"examples\": [\n                  \"my_database\"\n                ]\n              },\n              \"location\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"The AWS S3 path. Must be in the form of a URL.\",\n                \"examples\": [\n                  \"s3://datacontract-example-orders-latest/data/{model}\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the files\",\n                \"examples\": [\n                  \"parquet\",\n                  \"csv\",\n                  \"json\",\n                  \"delta\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"account\",\n              \"database\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"PostgresServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"postgres\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The host to the database server\",\n                \"examples\": [\n                  \"localhost\"\n                ]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"The port to the database server.\"\n              },\n              \"database\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the database.\",\n                \"examples\": [\n                  \"postgres\"\n                ]\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the schema in the database.\",\n                \"examples\": [\n                  \"public\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"port\",\n              \"database\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"OracleServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"oracle\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The host to the oracle server\",\n                \"examples\": [\n                  \"localhost\"\n                ]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"The port to the oracle server.\",\n                \"examples\": [\n                  1523\n                ]\n              },\n              \"serviceName\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the service.\",\n                \"examples\": [\n                  \"service\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"port\",\n              \"serviceName\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"KafkaServer\",\n            \"description\": \"Kafka Server\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"kafka\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The bootstrap server of the kafka cluster.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"The topic name.\"\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the message. Examples: json, avro, protobuf. Default: json.\",\n                \"default\": \"json\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"topic\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"PubSubServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"pubsub\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"project\": {\n                \"type\": \"string\",\n                \"description\": \"The GCP project name.\"\n              },\n              \"topic\": {\n                \"type\": \"string\",\n                \"description\": \"The topic name.\"\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"project\",\n              \"topic\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"KinesisDataStreamsServer\",\n            \"description\": \"Kinesis Data Streams Server\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"kinesis\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"stream\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the Kinesis data stream.\"\n              },\n              \"region\": {\n                \"type\": \"string\",\n                \"description\": \"AWS region.\",\n                \"examples\": [\n                  \"eu-west-1\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the record\",\n                \"examples\": [\n                  \"json\",\n                  \"avro\",\n                  \"protobuf\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"stream\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"TrinoServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"const\": \"trino\",\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"host\": {\n                \"type\": \"string\",\n                \"description\": \"The host to the database server\",\n                \"examples\": [\n                  \"localhost\"\n                ]\n              },\n              \"port\": {\n                \"type\": \"integer\",\n                \"description\": \"The port to the database server.\"\n              },\n              \"catalog\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the catalog.\",\n                \"examples\": [\n                  \"hive\"\n                ]\n              },\n              \"schema\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the schema in the database.\",\n                \"examples\": [\n                  \"my_schema\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"host\",\n              \"port\",\n              \"catalog\",\n              \"schema\"\n            ]\n          },\n          {\n            \"type\": \"object\",\n            \"title\": \"LocalServer\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"local\"\n                ],\n                \"description\": \"The type of the data product technology that implements the data contract.\"\n              },\n              \"path\": {\n                \"type\": \"string\",\n                \"description\": \"The relative or absolute path to the data file(s).\",\n                \"examples\": [\n                  \"./folder/data.parquet\",\n                  \"./folder/*.parquet\"\n                ]\n              },\n              \"format\": {\n                \"type\": \"string\",\n                \"description\": \"The format of the file(s)\",\n                \"examples\": [\n                  \"json\",\n                  \"parquet\",\n                  \"delta\",\n                  \"csv\"\n                ]\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"type\",\n              \"path\",\n              \"format\"\n            ]\n          }\n        ]\n      },\n      \"description\": \"Information about the servers.\"\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string providing a human readable name for the model. Especially useful if the model name is cryptic or contains abbreviations.\",\n            \"examples\": [\"Purchase Orders\", \"Air Shipments\"]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"title\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.\"\n                },\n                \"type\": {\n                  \"$ref\": \"#/$defs/FieldType\"\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"fields\": {\n                  \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                  }\n                },\n                \"items\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"keys\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"values\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"references\": {\n                  \"type\": \"string\",\n                  \"description\": \"The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.\",\n                  \"examples\": [\n                    \"orders.order_id\",\n                    \"model.nested_field.field\"\n                  ]\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\",\n                  \"examples\": [\n                    \"email\",\n                    \"uri\",\n                    \"uuid\"\n                  ]\n                },\n                \"precision\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    38\n                  ],\n                  \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n                },\n                \"scale\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    0\n                  ],\n                  \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\",\n                  \"examples\": [\n                    \"^[a-zA-Z0-9_-]+$\"\n                  ]\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"links\": {\n                  \"type\": \"object\",\n                  \"description\": \"Links to external resources.\",\n                  \"minProperties\": 1,\n                  \"propertyNames\": {\n                    \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n                  },\n                  \"additionalProperties\": {\n                    \"type\": \"string\",\n                    \"title\": \"Link\",\n                    \"description\": \"A URL to an external resource.\",\n                    \"format\": \"uri\",\n                    \"examples\": [\n                      \"https://example.com\"\n                    ]\n                  }\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"config\": {\n                  \"type\": \"object\",\n                  \"description\": \"Additional metadata for field configuration.\",\n                  \"additionalProperties\": {\n                    \"type\": [\n                      \"string\",\n                      \"number\",\n                      \"boolean\",\n                      \"object\",\n                      \"array\",\n                      \"null\"\n                    ]\n                  },\n                  \"properties\": {\n                    \"avroType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"avroLogicalType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the logical field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"bigqueryType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)`.\"\n                    },\n                    \"snowflakeType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Snowflake table, e.g., `TIMESTAMP_LTZ`.\"\n                    },\n                    \"redshiftType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Redshift table, e.g., `SMALLINT`.\"\n                    },\n                    \"sqlserverType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a SQL Server table, e.g., `DATETIME2`.\"\n                    },\n                    \"databricksType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Databricks Unity Catalog table.\"\n                    },\n                    \"glueType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in an AWS Glue Data Catalog table.\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Additional metadata for model configuration.\",\n            \"additionalProperties\": {\n              \"type\": [\n                \"string\",\n                \"number\",\n                \"boolean\",\n                \"object\",\n                \"array\",\n                \"null\"\n\n\n              ]\n            },\n            \"properties\": {\n              \"avroNamespace\": {\n                \"type\": \"string\",\n                \"description\": \"The namespace to use when importing and exporting the data model from / to Apache Avro.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"$ref\": \"#/$defs/FieldType\"\n          },\n          \"fields\": {\n            \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n            }\n          },\n          \"items\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"keys\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"values\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"minLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"precision\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              38\n            ],\n            \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n          },\n          \"scale\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              0\n            ],\n            \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"minimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMinimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"maximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMaximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          },\n          \"links\": {\n            \"type\": \"object\",\n            \"description\": \"Links to external resources.\",\n            \"minProperties\": 1,\n            \"propertyNames\": {\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"additionalProperties\": {\n              \"type\": \"string\",\n              \"title\": \"Link\",\n              \"description\": \"A URL to an external resource.\",\n              \"format\": \"uri\",\n              \"examples\": [\n                \"https://example.com\"\n              ]\n            }\n          }\n        },\n        \"required\": [\n          \"name\",\n          \"type\"\n        ]\n      }\n    },\n    \"schema\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"title\": \"SchemaType\",\n          \"enum\": [\n            \"dbt\",\n            \"bigquery\",\n            \"json-schema\",\n            \"sql-ddl\",\n            \"avro\",\n            \"protobuf\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the schema. Typical values are dbt, bigquery, json-schema, sql-ddl, avro, protobuf, custom.\"\n        },\n        \"specification\": {\n          \"oneOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the schema as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the schema as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The schema of the data contract describes the syntax and semantics of provided data sets. It supports different schema types.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"type\": {\n            \"type\": \"string\",\n            \"title\": \"ExampleType\",\n            \"enum\": [\n              \"csv\",\n              \"json\",\n              \"yaml\",\n              \"custom\"\n            ],\n            \"description\": \"The type of the example data. Well-known types are csv, json, yaml, custom.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string describing the example.\"\n          },\n          \"model\": {\n            \"type\": \"string\",\n            \"description\": \"The reference to the model in the schema, e.g., a table name.\"\n          },\n          \"data\": {\n            \"oneOf\": [\n              {\n                \"type\": \"string\",\n                \"description\": \"Example data for this model.\"\n              },\n              {\n                \"type\": \"array\",\n                \"description\": \"Example data for this model in a structured format. Use this for type json or yaml.\"\n              }\n            ]\n          }\n        },\n        \"required\": [\n          \"type\",\n          \"data\"\n        ]\n      },\n      \"description\": \"The Examples Object is an array of Example Objects.\"\n    },\n    \"servicelevels\": {\n      \"type\": \"object\",\n      \"description\": \"Specifies the service level agreements for the provided data, including availability, data retention policies, latency requirements, data freshness, update frequency, support availability, and backup policies.\",\n      \"properties\": {\n        \"availability\": {\n          \"type\": \"object\",\n          \"description\": \"Availability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the availability service level.\",\n              \"example\": \"The server is available during support hours\"\n            },\n            \"percentage\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the guaranteed uptime in percent (e.g., `99.9%`)\",\n              \"pattern\": \"^\\\\d+(\\\\.\\\\d+)?%$\",\n              \"example\": \"99.9%\"\n            }\n          }\n        },\n        \"retention\": {\n          \"type\": \"object\",\n          \"description\": \"Retention covers the period how long data will be available.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the retention service level.\",\n              \"example\": \"Data is retained for one year.\"\n            },\n            \"period\": {\n              \"type\": \"string\",\n              \"description\": \"An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).\",\n              \"example\": \"P1Y\"\n            },\n            \"unlimited\": {\n              \"type\": \"boolean\",\n              \"description\": \"An optional indicator that data is kept forever.\",\n              \"example\": false\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the period refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"latency\": {\n          \"type\": \"object\",\n          \"description\": \"Latency refers to the maximum amount of time from the source to its destination.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the latency service level.\",\n              \"example\": \"Data is available within 25 hours after the order was placed.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"sourceTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp when the data was provided at the source.\",\n              \"example\": \"orders.order_timestamp\"\n            },\n            \"processedTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.\",\n              \"example\": \"orders.processed_timestamp\"\n            }\n          }\n        },\n        \"freshness\": {\n          \"type\": \"object\",\n          \"description\": \"The maximum age of the youngest row in a table.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the freshness service level.\",\n              \"example\": \"The age of the youngest row in a table is within 25 hours.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g., `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the threshold refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"frequency\": {\n          \"type\": \"object\",\n          \"description\": \"Frequency describes how often data is updated.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the frequency service level.\",\n              \"example\": \"Data is delivered once a day.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"batch\",\n                \"micro-batching\",\n                \"streaming\",\n                \"manual\"\n              ],\n              \"description\": \"The method of data processing.\",\n              \"example\": \"batch\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.\",\n              \"example\": \"daily\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * *\"\n            }\n          }\n        },\n        \"support\": {\n          \"type\": \"object\",\n          \"description\": \"Support describes the times when support will be available for contact.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the support service level.\",\n              \"example\": \"The data is available during typical business hours at headquarters.\"\n            },\n            \"time\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.\",\n              \"example\": \"9am to 5pm in EST on business days\"\n            },\n            \"responseTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with.\",\n              \"example\": \"24 hours\"\n            }\n          }\n        },\n        \"backup\": {\n          \"type\": \"object\",\n          \"description\": \"Backup specifies details about data backup procedures.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the backup service level.\",\n              \"example\": \"Data is backed up once a week, every Sunday at 0:00 UTC.\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"An optional interval that defines how often data will be backed up, e.g., `daily`.\",\n              \"example\": \"weekly\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"An optional cron expression when data will be backed up, e.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * 0\"\n            },\n            \"recoveryTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).\",\n              \"example\": \"24 hours\"\n            },\n            \"recoveryPoint\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours).\",\n              \"example\": \"1 week\"\n            }\n          }\n        }\n      }\n    },\n    \"quality\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"title\": \"QualityType\",\n          \"enum\": [\n            \"SodaCL\",\n            \"montecarlo\",\n            \"great-expectations\",\n            \"custom\"\n          ],\n          \"description\": \"The type of the quality check. Typical values are SodaCL, montecarlo, great-expectations, custom.\"\n        },\n        \"specification\": {\n          \"oneOf\": [\n            {\n              \"type\": \"string\",\n              \"description\": \"The specification of the quality attributes as a string.\"\n            },\n            {\n              \"type\": \"object\",\n              \"description\": \"The specification of the quality attributes as an object.\"\n            }\n          ]\n        }\n      },\n      \"required\": [\n        \"type\",\n        \"specification\"\n      ],\n      \"description\": \"The quality object contains quality attributes and checks.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"description\": \"Tags to facilitate searching and filtering.\",\n        \"examples\": [\n          \"databricks\",\n          \"pii\",\n          \"sensitive\"\n        ]\n      },\n      \"description\": \"Tags to facilitate searching and filtering.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ],\n  \"$defs\": {\n    \"FieldType\": {\n      \"type\": \"string\",\n      \"title\": \"FieldType\",\n      \"description\": \"The logical data type of the field.\",\n      \"enum\": [\n        \"number\",\n        \"decimal\",\n        \"numeric\",\n        \"int\",\n        \"integer\",\n        \"long\",\n        \"bigint\",\n        \"float\",\n        \"double\",\n        \"string\",\n        \"text\",\n        \"varchar\",\n        \"boolean\",\n        \"timestamp\",\n        \"timestamp_tz\",\n        \"timestamp_ntz\",\n        \"date\",\n        \"array\",\n        \"map\",\n        \"object\",\n        \"record\",\n        \"struct\",\n        \"bytes\",\n        \"null\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "versions/0.9.3/definition.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n  \"properties\": {\n    \"domain\": {\n      \"type\": \"string\",\n      \"description\": \"The domain in which this definition is valid.\",\n      \"default\": \"global\"\n    },\n    \"name\": {\n      \"type\": \"string\",\n      \"description\": \"The technical name of this definition.\"\n    },\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"The business name of this definition.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Clear and concise explanations related to the domain.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"description\": \"The logical data type.\"\n    },\n    \"minLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n    },\n    \"maxLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n    },\n    \"format\": {\n      \"type\": \"string\",\n      \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n    },\n    \"precision\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        38\n      ],\n      \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n    },\n    \"scale\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        0\n      ],\n      \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n    },\n    \"pattern\": {\n      \"type\": \"string\",\n      \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n    },\n    \"example\": {\n      \"type\": \"string\",\n      \"description\": \"An example value.\"\n    },\n    \"pii\": {\n      \"type\": \"boolean\",\n      \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n    },\n    \"classification\": {\n      \"type\": \"string\",\n      \"description\": \"The data class defining the sensitivity level for this field.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Custom metadata to provide additional context.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"name\",\n    \"type\"\n  ]\n}"
  },
  {
    "path": "versions/1.1.0/README.md",
    "content": "# Data Contract Specification\n\n<a href=\"https://github.com/datacontract/datacontract-specification\">\n    <img alt=\"Stars\" src=\"https://img.shields.io/github/stars/datacontract/datacontract-specification\" /></a>\n<a href=\"https://datacontract.com/slack\" rel=\"nofollow\"><img src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" alt=\"Slack Status\" data-canonical-src=\"https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&amp;style=social\" style=\"max-width: 100%;\"></a>\n\n![datacontract.png](images/datacontract.png)\n\nData contracts bring data providers and data consumers together.\n\nA _data contract_ is a document that defines the structure, format, semantics, quality, and terms of use for exchanging data between a data provider and their consumers.\nThink of an API, but for data.\nA data contract is implemented by a data product or other data technologies, even legacy data warehouses.\nData contracts can also be used for the input port to specify the expectations of data dependencies and verify given guarantees.\n\nThe _data contract specification_ defines a YAML format to describe attributes of provided data sets.\nIt is data platform neutral and can be used with any data platform, such as AWS S3, Google BigQuery, Azure, Databricks, and Snowflake.\nThe data contract specification is an open initiative to define a common data contract format.\nIt follows [OpenAPI](https://www.openapis.org/) and [AsyncAPI](https://www.asyncapi.com/) conventions.\n\nData contracts come into play when data is exchanged between different teams or organizational units, such as in a [data mesh architecture](https://www.datamesh-architecture.com/).\nFirst, and foremost, data contracts are a communication tool to express a common understanding of how data should be structured and interpreted.\nThey make semantic and quality expectations explicit.\nThey are often created collaboratively in [workshops](./workshop.md) together with data providers and data consumers.\nLater in development and production, they also serve as the basis for code generation, testing, schema validations, quality checks, monitoring, access control, and computational governance policies.\n\nThe specification comes along with the [Data Contract CLI](https://github.com/datacontract/datacontract-cli), an open-source tool to develop, validate, and enforce data contracts.\n\n> _Note: The term \"data contract\" refers to a specification that is usually owned by the data provider and thus does not align with a \"contract\" in a legal sense as a mutual agreement between two parties.\n> The term \"contract\" may be somewhat misleading, but it is how it is used by the industry.\n> The mutual agreement between one data provider and one data consumer is the \"data usage agreement\" that refers to a data contract.\n> Data usage agreements have a defined lifecycle, start/end date, and help the data provider to track who accesses their data and for which purposes._\n\nVersion\n---\n\n1.1.0([Changelog](CHANGELOG.md))\n\nExample\n---\n\nView in [Data Contract Catalog](https://datacontract.com/examples/index.html)\n\n```yaml\ndataContractSpecification: 1.1.0\nid: urn:datacontract:checkout:orders-latest\ninfo:\n  title: Orders Latest\n  version: 2.0.0\n  description: |\n    Successful customer orders in the webshop.\n    All orders since 2020-01-01.\n    Orders with their line items are in their current state (no history included).\n  owner: Checkout Team\n  status: active\n  contact:\n    name: John Doe (Data Product Owner)\n    url: https://teams.microsoft.com/l/channel/example/checkout\nservers:\n  production:\n    type: s3\n    environment: prod\n    location: s3://datacontract-example-orders-latest/v2/{model}/*.json\n    format: json\n    delimiter: new_line\n    description: \"One folder per model. One file per day.\"\n    roles:\n      - name: analyst_us\n        description: Access to the data for US region\n      - name: analyst_cn\n        description: Access to the data for China region\nterms:\n  usage: |\n    Data can be used for reports, analytics and machine learning use cases.\n    Order may be linked and joined by other tables\n  limitations: |\n    Not suitable for real-time use cases.\n    Data may not be used to identify individual customers.\n    Max data processing per day: 10 TiB\n  policies:\n    - name: privacy-policy\n      url: https://example.com/privacy-policy\n    - name: license\n      description: External data is licensed under agreement 1234.\n      url: https://example.com/license/1234\n  billing: 5000 USD per month\n  noticePeriod: P3M\nmodels:\n  orders:\n    description: One record per order. Includes cancelled and deleted orders.\n    type: table\n    fields:\n      order_id:\n        $ref: '#/definitions/order_id'\n        required: true\n        unique: true\n        primaryKey: true\n      order_timestamp:\n        description: The business timestamp in UTC when the order was successfully registered in the source system and the payment was successful.\n        type: timestamp\n        required: true\n        examples:\n          - \"2024-09-09T08:30:00Z\"\n        tags: [\"business-timestamp\"]\n      order_total:\n        description: Total amount the smallest monetary unit (e.g., cents).\n        type: long\n        required: true\n        examples:\n          - 9999\n        quality:\n          - type: sql\n            description: 95% of all order total values are expected to be between 10 and 499 EUR.\n            query: |\n              SELECT quantile_cont(order_total, 0.95) AS percentile_95\n              FROM orders\n            mustBeBetween: [1000, 49900]\n      customer_id:\n        description: Unique identifier for the customer.\n        type: text\n        minLength: 10\n        maxLength: 20\n      customer_email_address:\n        description: The email address, as entered by the customer.\n        type: text\n        format: email\n        required: true\n        pii: true\n        classification: sensitive\n        quality:\n          - type: text\n            description: The email address is not verified and may be invalid.\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: email_address\n      processed_timestamp:\n        description: The timestamp when the record was processed by the data platform.\n        type: timestamp\n        required: true\n        config:\n          jsonType: string\n          jsonFormat: date-time\n    quality:\n      - type: sql\n        description: The maximum duration between two orders should be less that 3600 seconds\n        query: |\n          SELECT MAX(duration) AS max_duration \n          FROM (\n            SELECT EXTRACT(EPOCH FROM (order_timestamp - LAG(order_timestamp) OVER (ORDER BY order_timestamp))) AS duration \n            FROM orders\n          )\n        mustBeLessThan: 3600\n      - type: sql\n        description: Row Count\n        query: |\n          SELECT count(*) as row_count\n          FROM orders\n        mustBeGreaterThan: 5\n    examples:\n      - |\n        order_id,order_timestamp,order_total,customer_id,customer_email_address,processed_timestamp\n        \"1001\",\"2030-09-09T08:30:00Z\",2500,\"1000000001\",\"mary.taylor82@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1002\",\"2030-09-08T15:45:00Z\",1800,\"1000000002\",\"michael.miller83@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1003\",\"2030-09-07T12:15:00Z\",3200,\"1000000003\",\"michael.smith5@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1004\",\"2030-09-06T19:20:00Z\",1500,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1005\",\"2030-09-05T10:10:00Z\",4200,\"1000000004\",\"elizabeth.moore80@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1006\",\"2030-09-04T14:55:00Z\",2800,\"1000000005\",\"john.davis28@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1007\",\"2030-09-03T21:05:00Z\",1900,\"1000000006\",\"linda.brown67@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1008\",\"2030-09-02T17:40:00Z\",3600,\"1000000007\",\"patricia.smith40@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1009\",\"2030-09-01T09:25:00Z\",3100,\"1000000008\",\"linda.wilson43@example.com\",\"2030-09-09T08:31:00Z\"\n        \"1010\",\"2030-08-31T22:50:00Z\",2700,\"1000000009\",\"mary.smith98@example.com\",\"2030-09-09T08:31:00Z\"\n  line_items:\n    description: A single article that is part of an order.\n    type: table\n    fields:\n      line_item_id:\n        type: text\n        description: Primary key of the lines_item_id table\n        required: true\n      order_id:\n        $ref: '#/definitions/order_id'\n        references: orders.order_id\n      sku:\n        description: The purchased article number\n        $ref: '#/definitions/sku'\n    primaryKey: [\"order_id\", \"line_item_id\"]\n    examples:\n      - |\n        line_item_id,order_id,sku\n        \"LI-1\",\"1001\",\"5901234123457\"\n        \"LI-2\",\"1001\",\"4001234567890\"\n        \"LI-3\",\"1002\",\"5901234123457\"\n        \"LI-4\",\"1002\",\"2001234567893\"\n        \"LI-5\",\"1003\",\"4001234567890\"\n        \"LI-6\",\"1003\",\"5001234567892\"\n        \"LI-7\",\"1004\",\"5901234123457\"\n        \"LI-8\",\"1005\",\"2001234567893\"\n        \"LI-9\",\"1005\",\"5001234567892\"\n        \"LI-10\",\"1005\",\"6001234567891\"\ndefinitions:\n  order_id:\n    title: Order ID\n    type: text\n    format: uuid\n    description: An internal ID that identifies an order in the online shop.\n    examples:\n      - 243c25e5-a081-43a9-aeab-6d5d5b6cb5e2\n    pii: true\n    classification: restricted\n    tags:\n      - orders\n  sku:\n    title: Stock Keeping Unit\n    type: text\n    pattern: ^[A-Za-z0-9]{8,14}$\n    examples:\n      - \"96385074\"\n    description: |\n      A Stock Keeping Unit (SKU) is an internal unique identifier for an article.\n      It is typically associated with an article's barcode, such as the EAN/GTIN.\n    links:\n      wikipedia: https://en.wikipedia.org/wiki/Stock_keeping_unit\n    tags:\n      - inventory\nservicelevels:\n  availability:\n    description: The server is available during support hours\n    percentage: 99.9%\n  retention:\n    description: Data is retained for one year\n    period: P1Y\n    unlimited: false\n  latency:\n    description: Data is available within 25 hours after the order was placed\n    threshold: 25h\n    sourceTimestampField: orders.order_timestamp\n    processedTimestampField: orders.processed_timestamp\n  freshness:\n    description: The age of the youngest row in a table.\n    threshold: 25h\n    timestampField: orders.order_timestamp\n  frequency:\n    description: Data is delivered once a day\n    type: batch # or streaming\n    interval: daily # for batch, either or cron\n    cron: 0 0 * * * # for batch, either or interval\n  support:\n    description: The data is available during typical business hours at headquarters\n    time: 9am to 5pm in EST on business days\n    responseTime: 1h\n  backup:\n    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n    interval: weekly\n    cron: 0 0 * * 0\n    recoveryTime: 24 hours\n    recoveryPoint: 1 week\ntags:\n  - checkout\n  - orders\n  - s3\nlinks:\n  datacontractCli: https://cli.datacontract.com\n```\n\nData Contract CLI\n---\n\nThe [Data Contract CLI](https://cli.datacontract.com) is a command line tool and Python library to lint, test, import and export data contracts.\n\nHere is short example how to verify that your actual dataset matches the data contract:\n\n```bash\npip3 install \"datacontract-cli[all]\"\ndatacontract test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nor, if you prefer Docker:\n```bash\ndocker run datacontract/cli test https://datacontract.com/examples/orders-latest/datacontract.yaml\n```\n\nThe Data Contract contains all required information to verify data:\n\n- The _servers_ block has the connection details to the actual data set.\n- The _models_ define the syntax, formats, and constraints.\n- The _quality_ defined further quality checks.\n\nThe Data Contract CLI chooses the appropriate engine, formulates test cases, connects to the server, and executes the tests, based on the server type.\n\nMore information and configuration options on [cli.datacontract.com](https://cli.datacontract.com).\n\n\nSpecification\n---\n\n![The eight major categories in the data contract specification](images/categories.png)\n\n- [Data Contract Object](#data-contract-object)\n- [Info Object](#info-object)\n- [Contact Object](#contact-object)\n- [Server Object](#server-object)\n- [Terms Object](#terms-object)\n- [Model Object](#model-object)\n- [Field Object](#field-object)\n- [Definition Object](#definition-object)\n- [Service Level Object](#service-levels-object)\n- [Quality Object](#quality-object)\n- [Lineage Object](#lineage-object)\n- [Data Types](#data-types)\n- [Specification Extensions](#specification-extensions)\n\n\n[JSON Schema](https://github.com/datacontract/datacontract-specification/blob/main/datacontract.schema.json) of the Data Contract Specification.\n\n### Data Contract Object\n\nThis is the root document.\n\nIt is _RECOMMENDED_ that the root document be named: `datacontract.yaml`.\n\n| Field                     | Type                                                   | Description                                                                                                          |\n|---------------------------|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|\n| dataContractSpecification | `string`                                               | REQUIRED. Specifies the Data Contract Specification being used.                                                      |\n| id                        | `string`                                               | REQUIRED. An organization-wide unique technical identifier, such as a UUID, URN, slug, string, or number             |\n| info                      | [Info Object](#info-object)                            | REQUIRED. Specifies the metadata of the data contract. May be used by tooling.                                       |\n| servers                   | Map[`string`, [Server Object](#server-object)]         | Specifies the servers of the data contract.                                                                          |\n| terms                     | [Terms Object](#terms-object)                          | Specifies the terms and conditions of the data contract.                                                             |\n| models                    | Map[`string`, [Model Object](#model-object)]           | Specifies the logical data model.                                                                                    |\n| definitions               | Map[`string`, [Definition Object](#definition-object)] | Specifies definitions.                                                                                               |\n| servicelevels             | [Service Levels Object](#service-levels-object)        | Specifies the service level of the provided data                                                                     |\n| links                     | Map[`string`, `string`]                                | Additional external documentation links.                                                                             |\n| tags                      | Array of `string`                                      | Custom metadata to provide additional context.                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n\n### Info Object\n\nMetadata and life cycle information about the data contract.\n\n\n| Field       | Type                              | Description                                                                                                                                                      |\n|-------------|-----------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| title       | `string`                          | REQUIRED. The title of the data contract.                                                                                                                        |\n| version     | `string`                          | REQUIRED. The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version). |\n| status      | `string`                          | The status of the data contract. Can be `proposed`, `in development`, `active`, `deprecated`, `retired`.                                                         |\n| description | `string`                          | A description of the data contract.                                                                                                                              |\n| owner       | `string`                          | The owner or team responsible for managing the data contract and providing the data.                                                                             |\n| contact     | [Contact Object](#contact-object) | Contact information for the data contract.                                                                                                                       |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Contact Object\n\nContact information for the data contract.\n\n| Field | Type     | Description                                                                                           |\n|-------|----------|-------------------------------------------------------------------------------------------------------|\n| name  | `string` | The identifying name of the contact person/organization.                                              |\n| url   | `string` | The URL pointing to the contact information. This _MUST_ be in the form of a URL.                     |\n| email | `string` | The email address of the contact person/organization. This _MUST_ be in the form of an email address. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n### Server Object\n\nThe fields are dependent on the defined type.\n\n| Field       | Type                                               | Description                                                                                                                                                                                                                                                                           |\n|-------------|----------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`                                           | REQUIRED. The type of the data product technology that implements the data contract. Well-known server types are: `bigquery`, `s3`, `glue`, `redshift`, `azure`, `sqlserver`, `snowflake`, `databricks`, `postgres`, `oracle`, `kafka`, `pubsub`, `sftp`, `kinesis`, `trino`, `local` |\n| description | `string`                                           | An optional string describing the server.                                                                                                                                                                                                                                             |\n| environment | `string`                                           | An optional string describing the environment, e.g., prod, sit, stg.                                                                                                                                                                                                                  |\n| roles       | Array of [Server Role Object](#server-role-object) | An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.                                                                                                   |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### BigQuery Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `bigquery`            |\n| project | `string` | The GCP project name. |\n| dataset | `string` |                       |\n\n#### S3 Server Object\n\n| Field       | Type     | Description                                                                                                             |\n|-------------|----------|-------------------------------------------------------------------------------------------------------------------------|\n| type        | `string` | `s3`                                                                                                                    |\n| location    | `string` | S3 URL, starting with `s3://`                                                                                           |\n| endpointUrl | `string` | The server endpoint for S3-compatible servers, such as MioIO or Google Cloud Storage, e.g., `https://minio.example.com` |\n| format      | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                              |\n| delimiter   | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`        |\n\nExample (AWS S3):\n\n```yaml\nservers:\n  production:\n    type: s3\n    location: s3://acme-orders-prod/orders/\n    format: json\n    delimiter: new_line\n```\n\nExample (MinIO):\n\n```yaml\nservers:\n  minio:\n    type: s3\n    endpointUrl: http://localhost:9000\n    location: s3://my-bucket/path/\n    format: delta\n```\n\nExample (Google Cloud Storage):\n\n```yaml\nservers:\n  gcs:\n    type: s3\n    endpointUrl: https://storage.googleapis.com\n    location: s3://my-bucket/path/*/*/*/*/*.parquet\n    format: parquet\n```\n\n\n#### Redshift Server Object\n\n| Field             | Type     | Description                                                                                                         |\n|-------------------|----------|---------------------------------------------------------------------------------------------------------------------|\n| type              | `string` | `redshift`                                                                                                          |\n| account           | `string` |                                                                                                                     |\n| database          | `string` |                                                                                                                     |\n| schema            | `string` |                                                                                                                     |\n| clusterIdentifier | `string` | Identifier of the cluster. <br /> Example: `analytics-cluster`                                                      |\n| host              | `string` | Host of the cluster. <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com`                   |\n| port              | `number` | Port of the cluster. <br /> Example: `5439`                                                                         |\n| endpoint          | `string` | Endpoint of the cluster <br /> Example: `analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics` |\n\nExample, specifying an endpoint:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    endpoint: analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\n```\n\nExample, specifying the cluster identifier:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    clusterIdentifier: analytics-cluster\n```\n\nExample, specifying the cluster host:\n\n```yaml\nservers:\n  analytics:\n    type: redshift\n    account: '123456789012'\n    database: analytics\n    schema: analytics\n    host: analytics-cluster.example.eu-west-1.redshift.amazonaws.com\n    port: 5439\n```\n\n#### Azure Server Object\n\n| Field          | Type     | Description                                                                                                                                                                                                                                                                                                                                  |\n|----------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type           | `string` | `azure`                                                                                                                                                                                                                                                                                                                                      |\n| storageAccount | `string` | The storage account name that contains the files                                                                                                                                                                                                                                                                                             |\n| location       | `string` | Path to Azure Blob Storage or Azure Data Lake Storage (ADLS) in the storage account, supports globs. Starting with `az://` or `abfss`<br> Recommended pattern is `abfss://<container_name>/<path>`, Examples: `az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet` or `abfss://my_container_name/path/*.parquet` |\n| format         | `string` | Format of files, such as `parquet`, `json`, `csv`                                                                                                                                                                                                                                                                                            |\n| delimiter      | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array`                                                                                                                                                                                                                             |\n\n\n#### SQL-Server Server Object\n\n| Field    | Type      | Description                                                              |\n|----------|-----------|--------------------------------------------------------------------------|\n| type     | `string`  | `sqlserver`                                                              |\n| host     | `string`  | The host to the database server                                          |\n| port     | `integer` | The port to the database server, default: `1433`                         |\n| database | `string`  | The name of the database, e.g., `database`.                              |\n| schema   | `string`  | The name of the schema in the database, e.g., `dbo`.                     |\n| driver   | `string`  | The name of the supported driver, e.g., `ODBC Driver 18 for SQL Server`. |\n\n\n#### Snowflake Server Object\n\n| Field    | Type     | Description |\n|----------|----------|-------------|\n| type     | `string` | `snowflake` |\n| account  | `string` |             |\n| database | `string` |             |\n| schema   | `string` |             |\n\n#### Databricks Server Object\n\n| Field   | Type     | Description                                                         |\n|---------|----------|---------------------------------------------------------------------|\n| type    | `string` | `databricks`                                                        |\n| host    | `string` | The Databricks host, e.g., `dbc-abcdefgh-1234.cloud.databricks.com` |\n| catalog | `string` | The name of the Hive or Unity catalog                               |\n| schema  | `string` | The schema name in the catalog                                      |\n\n#### Postgres Server Object\n\n| Field    | Type      | Description                                             |\n|----------|-----------|---------------------------------------------------------|\n| type     | `string`  | `postgres`                                              |\n| host     | `string`  | The host to the database server                         |\n| port     | `integer` | The port to the database server                         |\n| database | `string`  | The name of the database, e.g., `postgres`.             |\n| schema   | `string`  | The name of the schema in the database, e.g., `public`. |\n\n#### Oracle Server Object\n\n| Field       | Type      | Description                     |\n|-------------|-----------|---------------------------------|\n| type        | `string`  | `oracle`                        |\n| host        | `string`  | The host to the oracle server   |\n| port        | `integer` | The port to the oracle server   |\n| serviceName | `string`  | The name of the service         |\n\n#### Kafka Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kafka`                                                                   |\n| host   | `string` | The bootstrap server of the kafka cluster.                                |\n| topic  | `string` | The topic name.                                                           |\n| format | `string` | The format of the message. Examples: json, avro, protobuf. Default: json. |\n\n#### Pub/Sub Server Object\n\n| Field   | Type     | Description           |\n|---------|----------|-----------------------|\n| type    | `string` | `pubsub`              |\n| project | `string` | The GCP project name. |\n| topic   | `string` | The topic name.       |\n\n#### sftp Server Object\n\n| Field     | Type     | Description                                                                                                      |\n|-----------|----------|------------------------------------------------------------------------------------------------------------------|\n| type      | `string` | `sftp`                                                                                                           |\n| location  | `string` | S3 URL, starting with `sftp://`                                                                                  |\n| format    | `string` | Format of files, such as `parquet`, `delta`, `json`, `csv`                                                       |\n| delimiter | `string` | (Only for format = `json`), how multiple json documents are delimited within one file, e.g., `new_line`, `array` |\n\n#### AWS Kinesis Data Streams Server Object\n\n| Field  | Type     | Description                                                               |\n|--------|----------|---------------------------------------------------------------------------|\n| type   | `string` | `kinesis`                                                                 |\n| stream | `string` | The name of the Kinesis data stream.                                      |\n| region | `string` | AWS region, e.g., `eu-west-1`.                                            |\n| format | `string` | The format of the records. Examples: json, avro, protobuf.                |\n\n#### Trino Server Object\n\n| Field    | Type      | Description                                               |\n|----------|-----------|-----------------------------------------------------------|\n| type     | `string`  | `trino`                                                   |\n| host     | `string`  | The Trino host                                            |\n| port     | `integer` | The Trino port                                            | \n| catalog  | `string`  | The name of the catalog, e.g., `my_catalog`.              |\n| schema   | `string`  | The name of the schema in the catalog, e.g., `my_schema`. |\n\n#### Local Server Object\n\n| Field  | Type     | Description                                                                         |\n|--------|----------|-------------------------------------------------------------------------------------|\n| type   | `string` | `local`                                                                             |\n| path   | `string` | The relative or absolute path to the data file(s), such as `./folder/data.parquet`. |\n| format | `string` | The format of the file(s), such as `parquet`, `delta`, `csv`, or `json`.            |\n\n#### Server Role Object\n\n| Field       | Type     | Description                                                  |\n|-------------|----------|--------------------------------------------------------------|\n| name        | `string` | Name of the role                                             |\n| description | `string` | A description of the role and what access the role provides. |\n\n### Terms Object\n\nThe terms and conditions of the data contract.\n\n| Field        | Type                                     | Description                                                                                                                                                                 |\n|--------------|------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| usage        | `string`                                 | The usage describes the way the data is expected to be used. Can contain business and technical information.                                                                |\n| limitations  | `string`                                 | The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.                               |\n| policies     | Array of [Policy Object](#policy-object) | A list of policies, licenses, standards, that are applicable for this data contract and that must be acknowledged by data consumers.                                        |\n| billing      | `string`                                 | The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.                                        |\n| noticePeriod | `string`                                 | The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., `P3M` for a period of three months. |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Policy Object\n\n| Field       | Type     | Description                       |\n|-------------|----------|-----------------------------------|\n| name        | `string` | Name of the policy.               |\n| description | `string` | A description of the policy.      |\n| url         | `string` | An URL that refers to the policy. |\n\n\n### Model Object\n\nThe Model Object describes the structure and semantics of a data model, such as tables, views, or structured files.\n\nThe name of the data model (table name) is defined by the key that refers to this Model Object.\n\n| Field       | Type                                         | Description                                                                                                                          |\n|-------------|----------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`                                     | The type of the model. Examples: `table`, `view`, `object`. Default: `table`.                                                        |\n| description | `string`                                     | An optional string describing the data model.                                                                                        |\n| title       | `string`                                     | An optional string for the title of the data model. Especially useful if the name of the model is cryptic or contains abbreviations. |\n| fields      | Map[`string`, [Field Object](#field-object)] | The fields (e.g. columns) of the data model.                                                                                         |\n| primaryKey  | Array of `string`                            | If the primary key is a compound key, list the field names that constitute the primary key. Alternative to field-level `primaryKey`. |\n| quality     | Array of [Quality Object](#quality-object)   | Specifies the quality attributes on model level.                                                                                     |\n| examples    | Array of `Any`                               | Specifies example data sets for the model.                                                                                           |\n| config      | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                             |\n\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Field Object\n\nThe Field Objects describes one field (column, property, nested field) of a data model.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description      | `string`                                     | An optional string describing the semantic of the data in this field.                                                                                                                                                                                                                                                                                                                                                        |\n| type             | [Data Type](#data-types)                     | The logical data type of the field.                                                                                                                                                                                                                                                                                                                                                                                          |\n| title            | `string`                                     | An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.                                                                                                                                                                                                                                                                                  |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| required         | `boolean`                                    | An indication, if this field must contain a value and may not be null. Default: `false`                                                                                                                                                                                                                                                                                                                                      |\n| primaryKey       | `boolean`                                    | If this field is a primary key. Default: `false`                                                                                                                                                                                                                                                                                                                                                                             |\n| references       | `string`                                     | The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.                                                                                                                                                                                                                                                     |\n| unique           | `boolean`                                    | An indication, if the value must be unique within the model. Default: `false`                                                                                                                                                                                                                                                                                                                                                |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| ~~example~~      | `string`                                     | DEPRECATED, use examples. An example value.                                                                                                                                                                                                                                                                                                                                                                                  |\n| examples         | Array of Any                                 | A list of example values.                                                                                                                                                                                                                                                                                                                                                                                                    |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               | \n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme. Examples may be: `sensitive`, `restricted`, `internal`, `public`.                                                                                                                                                                                                                                       |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`,`string`]                       | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| $ref             | `string`                                     | A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.                                                                                                                                                                                                                                                                                            |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n| quality          | Array of [Quality Object](#quality-object)   | Specifies the quality attributes on field level.                                                                                                                                                                                                                                                                                                                                                                             |\n| lineage          | [Lineage Object](#lineage-object)            | Provides information where the data comes from.                                                                                                                                                                                                                                                                                                                                                                              |\n| config           | [Config Object](#config-object)              | Any additional key-value pairs that might be useful for further tooling.                                                                                                                                                                                                                                                                                                                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n### Definition Object\n\nThe Definition Object includes a clear and concise explanations of syntax, semantic, and classification of a business object in a given domain.\nIt serves as a reference for a common understanding of terminology, ensure consistent usage and to identify join-able fields.\nModels fields can refer to definitions using the `$ref` field to link to existing definitions and avoid duplicate documentations.\n\n| Field            | Type                                         | Description                                                                                                                                                                                                                                                                                                                                                                                                                  |\n|------------------|----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type             | [Data Type](#data-types)                     | REQUIRED. The logical data type                                                                                                                                                                                                                                                                                                                                                                                              |\n| title            | `string`                                     | The business name of this definition.                                                                                                                                                                                                                                                                                                                                                                                        |\n| description      | `string`                                     | Clear and concise explanations related to the domain                                                                                                                                                                                                                                                                                                                                                                         |\n| enum             | array of `string`                            | A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.                                                                                                                                                                                                                                                                                                                   |\n| format           | `string`                                     | `email`: A value must be complaint to [RFC 5321, section 4.1.2](https://www.rfc-editor.org/info/rfc5321).<br>`uri`: A value must be complaint to [RFC 3986](https://www.rfc-editor.org/info/rfc3986).<br>`uuid`: A value must be complaint to [RFC 4122](https://www.rfc-editor.org/info/rfc4122). Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`). |\n| precision        | `number`                                     | The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.                                                                                                                                                                                                                                                                                                                                    |\n| scale            | `number`                                     | The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.                                                                                                                                                                                                                                                                                                                             |\n| minLength        | `number`                                     | A value must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                         |\n| maxLength        | `number`                                     | A value must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                                                                                            |\n| pattern          | `string`                                     | A value must be valid according to the [ECMA-262](https://262.ecma-international.org/5.1/) regular expression dialect. Only evaluated if the value is not null. Only applies to unicode character sequences types (`string`, `text`, `varchar`).                                                                                                                                                                             |\n| minimum          | `number`                                     | A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                              |\n| exclusiveMinimum | `number`                                     | A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                            |\n| maximum          | `number`                                     | A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                 |\n| exclusiveMaximum | `number`                                     | A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.                                                                                                                                                                                                                                                                                               |\n| examples         | Array of Any                                 | A list of example values.                                                                                                                                                                                                                                                                                                                                                                                                    |\n| pii              | `boolean`                                    | An indication, if this field contains Personal Identifiable Information (PII).                                                                                                                                                                                                                                                                                                                                               |\n| classification   | `string`                                     | The data class defining the sensitivity level for this field, according to the organization's classification scheme.                                                                                                                                                                                                                                                                                                         |\n| tags             | Array of `string`                            | Custom metadata to provide additional context.                                                                                                                                                                                                                                                                                                                                                                               |\n| links            | Map[`string`, `string`]                      | Additional external documentation links.                                                                                                                                                                                                                                                                                                                                                                                     |\n| fields           | Map[`string`, [Field Object](#field-object)] | The nested fields (e.g. columns) of the object, record, or struct. Use only when type is `object`, `record`, or `struct`.                                                                                                                                                                                                                                                                                                    |\n| items            | [Field Object](#field-object)                | The type of the elements in the array. Use only when type is `array`.                                                                                                                                                                                                                                                                                                                                                        |\n| keys             | [Field Object](#field-object)                | Describes the key structure of a map. Defaults to `type: string` if a map is defined as type. Not all server types support different key types. Use only when type is `map`.                                                                                                                                                                                                                                                 |\n| values           | [Field Object](#field-object)                | Describes the value structure of a map. Use only when type is `map`.                                                                                                                                                                                                                                                                                                                                                         |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n\n### Service Levels Object\n\nA service level is defined as an agreed-upon, measurable level of performance for provided the data.\nData Contract Specification defines well-known service levels.\nThis list can be extended with custom service levels.\n\nOne can either describe each service level informally using the `description` field, or make use of the predefined fields for automation support, e.g., via the [Data Contract CLI](https://cli.datacontract.com).\n\n| Field        | Type                                          | Description                                                             |\n|--------------|-----------------------------------------------|-------------------------------------------------------------------------|\n| availability | [Availability Object](#availability-object)   | The promised uptime of the system that provides the data                |\n| retention    | [Retention Object](#retention-object)         | The period how long data will be available.                             |\n| latency      | [Latency Object](#latency-object)             | The maximum amount of time from the source to its destination. |\n| freshness    | [Freshness Object](#freshness-object)         | The maximum age of the youngest entry.                                  |\n| frequency    | [Frequency Object](#frequency-object)         | The update frequency.                                                   |\n| support      | [Support Object](#support-object)             | The times when support is provided.                                     |\n| backup       | [Backup Object](#backup-object)               | The details about data backup procedures.                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Availability Object\n\nAvailability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\n\n| Field       | Type     | Description                                                                    |\n|-------------|----------|--------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the availability service level.                  |\n| percentage  | `string` | An optional string describing the guaranteed uptime in percent (e.g., `99.9%`) |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Retention Object\n\nRetention covers the period how long data will be available.\n\n| Field          | Type      | Description                                                                                                                                             |\n|----------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description    | `string`  | An optional string describing the retention service level.                                                                                              |\n| period         | `string`  | An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).  |\n| unlimited      | `boolean` | An optional indicator that data is kept forever.                                                                                                        |\n| timestampField | `string`  | An optional reference to the field that contains the timestamp that the period refers to.                                                               |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Latency Object\n\nLatency refers to the maximum amount of time from the source to its destination.\n\nExamples are the maximum duration it takes after an order has been recorded in the ecommerce shop until it is available in the orders table in the data analytics platform. This includes the waiting times until the next batch run is started and the processing time of the pipeline.\n\n| Field                   | Type     | Description                                                                                                                                                                              |\n|-------------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the latency service level.                                                                                                                                 |\n| threshold               | `string` | An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| sourceTimestampField    | `string` | An optional reference to the field that contains the timestamp when the data was provided at the source.                                                                                 |\n| processedTimestampField | `string` | An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.                             |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Freshness Object\n\nFreshness refers to the maximum age of the youngest entry.\n\n| Field                   | Type     | Description                                                                                                                                      |\n|-------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------|\n| description             | `string` | An optional string describing the freshness service level.                                                                                       |\n| threshold               | `string` | An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`). |\n| timestampField          | `string` | An optional reference to the field that contains the timestamp that the threshold refers to.                                                     |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n#### Frequency Object\n\nFrequency describes how often data is updated.\n\n| Field       | Type     | Description                                                                                               |\n|-------------|----------|-----------------------------------------------------------------------------------------------------------|\n| description | `string` | An optional string describing the frequency service level.                                                |\n| type        | `string` | An optional type of data processing. Typical values are `batch`, `micro-batching`, `streaming`, `manual`. |\n| interval    | `string` | Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.                             |\n| cron        | `string` | Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Support Object\n\nSupport describes the times when support will be available for contact.\n\n| Field        | Type     | Description                                                                                                                                                                                                                                 |\n|--------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description  | `string` | An optional string describing the support service level.                                                                                                                                                                                    |\n| time         | `string` | An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.                                                                                                                 |\n| responseTime | `string` | An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with. |\n\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\n\n#### Backup Object\n\nBackup specifies details about data backup procedures.\n\n| Field         | Type     | Description                                                                                                                                                                                                                                                                                                        |\n|---------------|----------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| description   | `string` | An optional string describing the backup service level.                                                                                                                                                                                                                                                            |\n| interval      | `string` | An optional interval that defines how often data will be backed up, e.g., `daily`.                                                                                                                                                                                                                                 |\n| cron          | `string` | An optional cron expression when data will be backed up, e.g., `0 0 * * *`.                                                                                                                                                                                                                                        |\n| recoveryTime  | `string` | An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).                                                                                                                                      |\n| recoveryPoint | `string` | An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours). |\n\n\n\n### Quality Object\n\nThe quality object defines quality attributes.\n\nQuality attributes are checks that can be applied to the data to ensure its quality.\nData can be verified by executing these checks through a data quality engine.\n\nQuality attributes can be:\n- A text in natural language that describes the quality of the data.\n- An individual SQL query that returns a single value that can be compared.\n- Engine-specific types: Pre-defined quality checks, as defined by data quality libraries. Currently, the engines `soda` and `great-expectations` are supported.\n\nA quality object can be specified on field level and on model level.\nThe top-level quality object is deprecated.\n\n#### Description Text\n\nA description in natural language that defines the expected quality of the data.\nThis is useful to express requirements or expectation when discussing the data contract with stakeholders.\nLater in the development process, these might be translated into an executable check (such as `sql`).\nIt can also be used as a prompt to check the data with an AI engine.\n\n| Field       | Type     | Description                                                        |\n|-------------|----------|--------------------------------------------------------------------|\n| type        | `string` | `text`                                                   |\n| description | `string` | A plain text describing the quality attribute in natural language. |\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    fields:\n      account_iban:\n        quality:\n          - type: text\n            description: Must be a valid IBAN. Must not be empty.\n```\n\n#### SQL\n\nAn individual SQL query that returns a single number that can be compared with a threshold. The SQL query must be in the SQL dialect of the provided server.\n\n> __Note:__ Establish a secure development process and use read-only connections, as the misuse of SQL queries can lead to SQL injection attacks.\n\n\n| Field                      | Type                  | Description                                                                                                                                                |\n|----------------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type                       | `string`              | `sql`                                                                                                                                                      |\n| description                | `string`              | A plain text describing the quality of the data.                                                                                                           |\n| query                      | `string`              | A SQL query that returns a single number to compare with the threshold.                                                                                    |\n| dialect                    | `string`              | The SQL dialect that is used for the query. Should be compatible to the server type. Examples: `postgres`, `spark`, `bigquery`, `snowflake`, `duckdb`, ... |\n| mustBe                     | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustNotBe                  | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeGreaterThan          | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeGreaterThanOrEqualTo | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeLessThan             | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeLessThanOrEqualTo    | `integer`             | The threshold to check the return value of the query                                                                                                       |\n| mustBeBetween              | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.                                                                            |\n| mustNotBeBetween           | array of two integers | The threshold to check the return value of the query. Boundaries are inclusive.                                                                            |\n\nIn the query the following placeholders can be used:\n\n| Placeholder | Description                                                                            |\n|-------------|----------------------------------------------------------------------------------------|\n| `{model}`  | The name of the model that is checked.                                                 |\n| `{table}`  | Alias for `{model}`.                                                                  |\n| `{field}`  | The name of the field that is checked (only if the quality is defined on field-level). |\n| `{column}` | Alias for `{field}`.                                                                  |\n\nExample:\n\n```yaml\nmodels:\n  orders:\n    quality:\n      - type: sql\n        description: The maximum duration between two orders must be less that 3600 seconds\n        query: |\n          SELECT MAX(duration) AS max_duration \n          FROM (\n            SELECT EXTRACT(EPOCH FROM (order_timestamp - LAG(order_timestamp) OVER (ORDER BY order_timestamp))) AS duration \n            FROM {model}\n          )\n        mustBeLessThan: 3600\n```\n\nSQL queries allow powerful checks for custom business logic.\nA SQL query should run not longer than 10 minutes.\n\n#### Custom\n\nYou can define custom quality attributes that are specific to a data quality engine.\n\n#### Custom (Engine: Soda)\n\nSoda has a number of predefined quality [checks](https://docs.soda.io/soda/data-contracts-checks.html) that can be referenced as quality attributes.\n\nSoda checks can be applied on model and field level.\n\n> Note: Soda Data contract check reference is experimental and may change in the future. Currently only supported by Postgres, Snowflake, and Spark (Databricks)\n\n| Field         | Type     | Description                                                                                                                 |\n|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------|\n| type          | `string` | `custom`                                                                                                                    |\n| description   | `string` | Optional. A plain text describing the quality attribute in natural language.                                                |\n| engine        | `string` | `soda`                                                                                                                      |\n| implementation | `object` | A check type as defined in the [Data contract check reference](https://docs.soda.io/soda/data-contracts-checks.html)        |\n\n\nSee the [Data contract check reference](https://docs.soda.io/soda/data-contracts-checks.html) for all possible types and configuration values.\n\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    fields:\n      order_id:\n        type: string\n        quality:\n          - type: custom\n            description: This is a check on field level\n            engine: soda\n            implementation:\n              type: no_duplicate_values\n      carrier:\n        type: string\n      shipment_numer:\n        type: string\n    quality:\n      - type: custom\n        description: This is a check on model level\n        engine: soda\n        implementation:\n          type: duplicate_percent\n          columns:\n            - carrier\n            - shipment_numer\n          must_be_less_than: 1.0\n      - type: custom\n        description: This is a check on model level\n        engine: soda\n        implementation:\n          type: row_count\n          must_be_greater_than: 500000\n```\n\n#### Custom (Engine: Great Expectations)\n\nQuality attributes defined as Great Expectations [Expectation](https://greatexpectations.io/expectations/).\n\nExpectations are applied on model level.\n\n| Field         | Type     | Description                                                                                         |\n|---------------|----------|-----------------------------------------------------------------------------------------------------|\n| description   | `string` | Optional. A plain text describing the quality attribute in natural language.                        |\n| engine        | `string` | `great-expectations`                                                                                |\n| implementation | `object` | An expectation type as listed in [Expectation](https://greatexpectations.io/expectations/) as YAML. |\n\nExample:\n\n```yaml\nmodels:\n  my_table:\n    quality:\n      - type: custom\n        engine: great-expectations\n        implementation:\n          expectation_type: expect_table_row_count_to_be_between\n          kwargs:\n            min_value: 10000\n            max_value: 50000\n          meta:\n            notes: \"This expectation is crucial to avoid processing datasets that are too small or too large.\"\n      - type: custom\n        engine: great-expectations\n        description: \"Check that passenger_count values are between 1 and 6.\"\n        implementation:\n          expectation_type: expect_column_values_to_be_between\n          kwargs:\n            column: passenger_count\n            max_value: 6\n            min_value: 1\n            mostly: 1.0\n            strict_max: false\n            strict_min: false\n          meta:\n            tags:\n              - business-critical\n              - range_check\n```\n\n\n### Lineage Object\n\nField level lineage provides optional fine-grained information where the data comes from and how it was transformed.\n\nThe lineage object is based on the OpenLinage [Column Level Lineage Dataset Facet](https://openlineage.io/docs/spec/facets/dataset-facets/column_lineage_facet) to describe the input fields.\n\n\n\n| Field       | Type                                              | Description                                                                                                                                                                              |\n|-------------|---------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| inputFields | Array of [InputField Object](#inputfield-object) | The input fields refer to specific fields, columns, or data points from source systems or other data contracts that feed into a particular transformation, calculation, or final result. |\n\n\n#### InputField Object\n\n| Field           | Type                                                     | Description                                                                                                                                                                                                                                                                   |\n|-----------------|----------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| namespace       | `string`                                                 | The input dataset namespace, such as the name of the source system or the domain of another data contract. Examples: `com.example.crm`, `checkout`, snowflake://{account name}. [More on namespace](https://openlineage.io/blog/whats-in-a-namespace/#namespaces-in-the-spec) |\n| name            | `string`                                                 | The input dataset name, such as a reference to a data contract, a fully qualified table name, a Kafka topic.                                                                                                                                                                  |\n| field           | `string`                                                 | The input field name, such as the field in an upstream data contract, a table column or a JSON Path.                                                                                                                                                                          |\n| transformations | Array of [Transformation Object](#transformation-object) | Optional. This describes how the input field data was used to generate the final result.                                                                                                                                                                                      |\n\n#### Transformation Object\n\n| Field       | Type      | Description                                                                                                                                                                                                                                                    |\n|-------------|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| type        | `string`  | Indicates how direct is the relationship e.g. in query. Allows values are: `DIRECT` and `INDIRECT`.                                                                                                                                                            |\n| subtype     | `string`  | Optional. Contains more specific information about the transformation.<br>Allowed values for type `DIRECT`: `IDENTITY`, `TRANSFORMATION`, `AGGREGATION`.<br>Allowed values for type `INDIRECT`: `JOIN`, `GROUP_BY`, `FILTER`, `SORT`, `WINDOW`, `CONDITIONAL`. |\n| description | `string`  | Optional. A string representation of the transformation applied.                                                                                                                                                                                               |\n| masking     | `boolean` | Optional. Boolean value indicating if the input value was obfuscated during the transformation.                                                                                                                                                                |\n\n\nExample:\n\n```yaml\nmodels:\n  orders:\n    fields:\n      order_id:\n        type: string\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: order_id\n              transformations:\n                - type: DIRECT\n                  subtype: IDENTITY\n                  description: The order ID from the checkout order\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: order_timestamp\n              transformations:\n                - type: INDIRECT\n                  subtype: SORT\n      customer_email_address_hash:\n        type: string\n        lineage:\n          inputFields:\n            - namespace: com.example.service.checkout\n              name: checkout_db.orders\n              field: email_address\n              transformations:\n                - type: DIRECT\n                  subtype: Transformation\n                  description: The email address from the checkout order, hashed with SHA-256\n                  masking: true\n\n```\n\n\n\n### Config Object\n\nThe config field can be used to set additional metadata that may be used by tools, e.g. to define a namespace for code generation, specify physical data types, toggle tests, etc.\n\nA config field can be added with any name. The value can be null, a primitive, an array or an object.\n\nFor developer experience, a list of well-known field names is maintained here, as these fields are used in the Data Contract CLI:\n\n\n| Field           | Type     | Description                                                                                                    |\n|-----------------|----------|----------------------------------------------------------------------------------------------------------------|\n| avroNamespace   | `string` | (Only on model level) The namespace to use when importing and exporting the data model from / to Apache Avro.  |\n| avroType        | `string` | (Only on field level) Specify the field type to use when exporting the data model to Apache Avro.              |\n| avroLogicalType | `string` | (Only on field level) Specify the logical field type to use when  exporting the data model to Apache Avro.     |\n| bigqueryType    | `string` | (Only on field level) Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)` |\n| snowflakeType   | `string` | (Only on field level) Specify the physical column type that is used in a Snowflake table, e.g, `TIMESTAMP_LTZ` |\n| redshiftType    | `string` | (Only on field level) Specify the physical column type that is used in a Redshift table, e.g, `SMALLINT`       |\n| sqlserverType   | `string` | (Only on field level) Specify the physical column type that is used in a SQL Server table, e.g, `DATETIME2`     |\n| databricksType  | `string` | (Only on field level) Specify the physical column type that is used in a Databricks table                      |\n| glueType        | `string` | (Only on field level) Specify the physical column type that is used in a AWS Glue Data Catalog table           |\n\nThis object _MAY_ be extended with [Specification Extensions](#specification-extensions).\n\nExample:\n\n```\nmodels:\n  orders:\n    config:\n      avroNamespace: \"my.namespace\"\n    fields:\n      my_field_1:\n        description: Example for AVRO with Timestamp (millisecond precision)\n        type: timestamp\n        config:\n          avroType: long\n          avroLogicalType: timestamp-millis\n          snowflakeType: timestamp_tz\n```\n\n\n### Data Types\n\nThe following data types are supported for model fields and definitions:\n\n- Unicode character sequence: `string`, `text`, `varchar`\n- Any numeric type, either integers or floating point numbers: `number`, `decimal`, `numeric`\n- 32-bit signed integer: `int`, `integer`\n- 64-bit signed integer: `long`, `bigint`\n- Single precision (32-bit) IEEE 754 floating-point number: `float`\n- Double precision (64-bit) IEEE 754 floating-point number: `double`\n- Binary value: `boolean`\n- Timestamp with timezone: `timestamp`, `timestamp_tz`\n- Timestamp with no timezone: `timestamp_ntz`\n- Date with no time information: `date`\n- Array: `array`\n- Map: `map` (may not be supported by some server types)\n- Sequence of 8-bit unsigned bytes: `bytes`\n- Complex type: `object`, `record`, `struct`\n- No value: `null`\n\n### Specification Extensions\n\nWhile the Data Contract Specification tries to accommodate most use cases, additional data can be added to extend the specification at certain points.\n\nA custom field can be added with any name. The value can be null, a primitive, an array or an object.\n\n\nTooling\n---\n- [Data Contract CLI](https://github.com/datacontract/datacontract-cli) is an open-source CLI tool to help you create, develop, and maintain your data contracts.\n- [Data Contract Manager](https://www.datamesh-manager.com/) is a commercial tool to manage data contracts. It includes a data contract catalog, a Web-Editor, and a request and approval workflow to automate access to data products for a full enterprise data marketplace.\n- [Data Contract GPT](https://gpt.datacontract.com) is a custom GPT that can help you write data contracts.\n- [Data Contract Editor](https://editor.datacontract.com) is an open-source editor for Data Contracts, including a live html preview.\n\nCode Completion\n---\nThe [JSON Schema](https://datacontract.com/datacontract.schema.json) of the current data contract specification is registered in [Schema Store](https://www.schemastore.org/), which brings code completion and syntax checks for all major IDEs.\nIntelliJ comes with a built-in YAML plugin which will show you autocompletions.\nFor VS Code we recommend to install the [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) plugin.\nNo additional configuration is required.\n\nAutocompletion is then enabled for files following these patterns:\n\n```\ndatacontract.yaml\ndatacontract.yml\n*-datacontract.yaml\n*-datacontract.yml\n*.datacontract.yaml\n*.datacontract.yml\ndatacontract-*.yaml\ndatacontract-*.yml\n**/datacontract/*.yml\n**/datacontract/*.yaml\n**/datacontracts/*.yml\n**/datacontracts/*.yaml\n```\n\n\nAuthors\n---\nThe Data Contract Specification was originally created by [Jochen Christ](https://www.linkedin.com/in/jochenchrist/) and [Dr. Simon Harrer](https://www.linkedin.com/in/simonharrer/), and is currently maintained by them.\n\n\nContributing\n---\nContributions are welcome! Please open an issue or a pull request.\n\nLicense\n---\n[MIT License](LICENSE)\n\n\n<a href=\"https://github.com/datacontract/datacontract-specification/\" class=\"github-corner\" aria-label=\"View source on GitHub\"><svg width=\"80\" height=\"80\" viewBox=\"0 0 250 250\" style=\"fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;\" aria-hidden=\"true\"><path d=\"M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z\"></path><path d=\"M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2\" fill=\"currentColor\" style=\"transform-origin: 130px 106px;\" class=\"octo-arm\"></path><path d=\"M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z\" fill=\"currentColor\" class=\"octo-body\"></path></svg></a><style>.github-corner:hover .octo-arm{animation:octocat-wave 560ms ease-in-out}@keyframes octocat-wave{0%,100%{transform:rotate(0)}20%,60%{transform:rotate(-25deg)}40%,80%{transform:rotate(10deg)}}@media (max-width:500px){.github-corner:hover .octo-arm{animation:none}.github-corner .octo-arm{animation:octocat-wave 560ms ease-in-out}}</style>"
  },
  {
    "path": "versions/1.1.0/datacontract.init.yaml",
    "content": "dataContractSpecification: 1.1.0\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### servicelevels\n\n#servicelevels:\n#  availability:\n#    description: The server is available during support hours\n#    percentage: 99.9%\n#  retention:\n#    description: Data is retained for one year because!\n#    period: P1Y\n#    unlimited: false\n#  latency:\n#    description: Data is available within 25 hours after the order was placed\n#    threshold: 25h\n#    sourceTimestampField: orders.order_timestamp\n#    processedTimestampField: orders.processed_timestamp\n#  freshness:\n#    description: The age of the youngest row in a table.\n#    threshold: 25h\n#    timestampField: orders.order_timestamp\n#  frequency:\n#    description: Data is delivered once a day\n#    type: batch # or streaming\n#    interval: daily # for batch, either or cron\n#    cron: 0 0 * * * # for batch, either or interval\n#  support:\n#    description: The data is available during typical business hours at headquarters\n#    time: 9am to 5pm in EST on business days\n#    responseTime: 1h\n#  backup:\n#    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n#    interval: weekly\n#    cron: 0 0 * * 0\n#    recoveryTime: 24 hours\n#    recoveryPoint: 1 week"
  },
  {
    "path": "versions/1.1.0/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"1.1.0\",\n        \"0.9.3\",\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"The status of the data contract. Can be proposed, in development, active, retired.\",\n          \"examples\": [\n            \"proposed\",\n            \"in development\",\n            \"active\",\n            \"deprecated\",\n            \"retired\"\n          ]\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\",\n          \"additionalProperties\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"description\": \"Information about the servers.\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/BaseServer\",\n        \"allOf\": [\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"bigquery\"\n                }\n              }\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/BigQueryServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"s3\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/S3Server\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sftp\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SftpServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"redshift\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/RedshiftServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"azure\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/AzureServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sqlserver\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SqlserverServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"snowflake\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SnowflakeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"databricks\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DatabricksServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"dataframe\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DataframeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"glue\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/GlueServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"oracle\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/OracleServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kafka\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KafkaServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"pubsub\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PubSubServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kinesis\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KinesisDataStreamsServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"trino\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/TrinoServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"local\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/LocalServer\"\n            }\n          }\n        ]\n      }\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"policies\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"description\": \"The type of the policy.\",\n                \"examples\": [\n                  \"privacy\",\n                  \"security\",\n                  \"retention\",\n                  \"compliance\"\n                ]\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the policy.\"\n              },\n              \"url\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"A URL to the policy document.\"\n              }\n            },\n            \"additionalProperties\": true\n          },\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string providing a human readable name for the model. Especially useful if the model name is cryptic or contains abbreviations.\",\n            \"examples\": [\n              \"Purchase Orders\",\n              \"Air Shipments\"\n            ]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"title\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.\"\n                },\n                \"type\": {\n                  \"$ref\": \"#/$defs/FieldType\"\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"fields\": {\n                  \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                  }\n                },\n                \"items\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"keys\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"values\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"deprecationMessage\": \"Use the primaryKey field instead.\"\n                },\n                \"primaryKey\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"references\": {\n                  \"type\": \"string\",\n                  \"description\": \"The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.\",\n                  \"examples\": [\n                    \"orders.order_id\",\n                    \"model.nested_field.field\"\n                  ]\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\",\n                  \"examples\": [\n                    \"email\",\n                    \"uri\",\n                    \"uuid\"\n                  ]\n                },\n                \"precision\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    38\n                  ],\n                  \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n                },\n                \"scale\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    0\n                  ],\n                  \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\",\n                  \"examples\": [\n                    \"^[a-zA-Z0-9_-]+$\"\n                  ]\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\",\n                  \"deprecationMessage\": \"Use the examples field instead.\"\n                },\n                \"examples\": {\n                  \"type\": \"array\",\n                  \"description\": \"A examples value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"links\": {\n                  \"type\": \"object\",\n                  \"description\": \"Links to external resources.\",\n                  \"minProperties\": 1,\n                  \"propertyNames\": {\n                    \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n                  },\n                  \"additionalProperties\": {\n                    \"type\": \"string\",\n                    \"title\": \"Link\",\n                    \"description\": \"A URL to an external resource.\",\n                    \"format\": \"uri\",\n                    \"examples\": [\n                      \"https://example.com\"\n                    ]\n                  }\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"quality\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/$defs/Quality\"\n                  }\n                },\n                \"lineage\": {\n                  \"$ref\": \"#/$defs/Lineage\"\n                },\n                \"config\": {\n                  \"type\": \"object\",\n                  \"description\": \"Additional metadata for field configuration.\",\n                  \"additionalProperties\": {\n                    \"type\": [\n                      \"string\",\n                      \"number\",\n                      \"boolean\",\n                      \"object\",\n                      \"array\",\n                      \"null\"\n                    ]\n                  },\n                  \"properties\": {\n                    \"avroType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"avroLogicalType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the logical field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"bigqueryType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)`.\"\n                    },\n                    \"snowflakeType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Snowflake table, e.g., `TIMESTAMP_LTZ`.\"\n                    },\n                    \"redshiftType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Redshift table, e.g., `SMALLINT`.\"\n                    },\n                    \"sqlserverType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a SQL Server table, e.g., `DATETIME2`.\"\n                    },\n                    \"databricksType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Databricks Unity Catalog table.\"\n                    },\n                    \"glueType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in an AWS Glue Data Catalog table.\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"primaryKey\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"The compound primary key of the model.\"\n          },\n          \"quality\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/$defs/Quality\"\n            }\n          },\n          \"examples\": {\n            \"type\": \"array\"\n          },\n          \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Additional metadata for model configuration.\",\n            \"additionalProperties\": {\n              \"type\": [\n                \"string\",\n                \"number\",\n                \"boolean\",\n                \"object\",\n                \"array\",\n                \"null\"\n              ]\n            },\n            \"properties\": {\n              \"avroNamespace\": {\n                \"type\": \"string\",\n                \"description\": \"The namespace to use when importing and exporting the data model from / to Apache Avro.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9/_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the domain into the ID using slashes.\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the name into the ID using slashes.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"$ref\": \"#/$defs/FieldType\"\n          },\n          \"fields\": {\n            \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n            }\n          },\n          \"items\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"keys\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"values\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"minLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"precision\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              38\n            ],\n            \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n          },\n          \"scale\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              0\n            ],\n            \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"minimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMinimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"maximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMaximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\",\n            \"deprecationMessage\": \"Use the examples field instead.\"\n          },\n          \"examples\": {\n            \"type\": \"array\",\n            \"description\": \"Example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          },\n          \"links\": {\n            \"type\": \"object\",\n            \"description\": \"Links to external resources.\",\n            \"minProperties\": 1,\n            \"propertyNames\": {\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"additionalProperties\": {\n              \"type\": \"string\",\n              \"title\": \"Link\",\n              \"description\": \"A URL to an external resource.\",\n              \"format\": \"uri\",\n              \"examples\": [\n                \"https://example.com\"\n              ]\n            }\n          }\n        },\n        \"required\": [\n          \"type\"\n        ]\n      }\n    },\n    \"servicelevels\": {\n      \"type\": \"object\",\n      \"description\": \"Specifies the service level agreements for the provided data, including availability, data retention policies, latency requirements, data freshness, update frequency, support availability, and backup policies.\",\n      \"properties\": {\n        \"availability\": {\n          \"type\": \"object\",\n          \"description\": \"Availability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the availability service level.\",\n              \"example\": \"The server is available during support hours\"\n            },\n            \"percentage\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the guaranteed uptime in percent (e.g., `99.9%`)\",\n              \"pattern\": \"^\\\\d+(\\\\.\\\\d+)?%$\",\n              \"example\": \"99.9%\"\n            }\n          }\n        },\n        \"retention\": {\n          \"type\": \"object\",\n          \"description\": \"Retention covers the period how long data will be available.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the retention service level.\",\n              \"example\": \"Data is retained for one year.\"\n            },\n            \"period\": {\n              \"type\": \"string\",\n              \"description\": \"An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).\",\n              \"example\": \"P1Y\"\n            },\n            \"unlimited\": {\n              \"type\": \"boolean\",\n              \"description\": \"An optional indicator that data is kept forever.\",\n              \"example\": false\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the period refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"latency\": {\n          \"type\": \"object\",\n          \"description\": \"Latency refers to the maximum amount of time from the source to its destination.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the latency service level.\",\n              \"example\": \"Data is available within 25 hours after the order was placed.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"sourceTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp when the data was provided at the source.\",\n              \"example\": \"orders.order_timestamp\"\n            },\n            \"processedTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.\",\n              \"example\": \"orders.processed_timestamp\"\n            }\n          }\n        },\n        \"freshness\": {\n          \"type\": \"object\",\n          \"description\": \"The maximum age of the youngest row in a table.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the freshness service level.\",\n              \"example\": \"The age of the youngest row in a table is within 25 hours.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g., `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the threshold refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"frequency\": {\n          \"type\": \"object\",\n          \"description\": \"Frequency describes how often data is updated.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the frequency service level.\",\n              \"example\": \"Data is delivered once a day.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"batch\",\n                \"micro-batching\",\n                \"streaming\",\n                \"manual\"\n              ],\n              \"description\": \"The method of data processing.\",\n              \"example\": \"batch\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.\",\n              \"example\": \"daily\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * *\"\n            }\n          }\n        },\n        \"support\": {\n          \"type\": \"object\",\n          \"description\": \"Support describes the times when support will be available for contact.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the support service level.\",\n              \"example\": \"The data is available during typical business hours at headquarters.\"\n            },\n            \"time\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.\",\n              \"example\": \"9am to 5pm in EST on business days\"\n            },\n            \"responseTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with.\",\n              \"example\": \"24 hours\"\n            }\n          }\n        },\n        \"backup\": {\n          \"type\": \"object\",\n          \"description\": \"Backup specifies details about data backup procedures.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the backup service level.\",\n              \"example\": \"Data is backed up once a week, every Sunday at 0:00 UTC.\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"An optional interval that defines how often data will be backed up, e.g., `daily`.\",\n              \"example\": \"weekly\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"An optional cron expression when data will be backed up, e.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * 0\"\n            },\n            \"recoveryTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).\",\n              \"example\": \"24 hours\"\n            },\n            \"recoveryPoint\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours).\",\n              \"example\": \"1 week\"\n            }\n          }\n        }\n      }\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"description\": \"Tags to facilitate searching and filtering.\",\n        \"examples\": [\n          \"databricks\",\n          \"pii\",\n          \"sensitive\"\n        ]\n      },\n      \"description\": \"Tags to facilitate searching and filtering.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ],\n  \"$defs\": {\n    \"FieldType\": {\n      \"type\": \"string\",\n      \"title\": \"FieldType\",\n      \"description\": \"The logical data type of the field.\",\n      \"enum\": [\n        \"number\",\n        \"decimal\",\n        \"numeric\",\n        \"int\",\n        \"integer\",\n        \"long\",\n        \"bigint\",\n        \"float\",\n        \"double\",\n        \"string\",\n        \"text\",\n        \"varchar\",\n        \"boolean\",\n        \"timestamp\",\n        \"timestamp_tz\",\n        \"timestamp_ntz\",\n        \"date\",\n        \"array\",\n        \"map\",\n        \"object\",\n        \"record\",\n        \"struct\",\n        \"bytes\",\n        \"null\"\n      ]\n    },\n    \"BaseServer\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the servers.\"\n        },\n        \"environment\": {\n          \"type\": \"string\",\n          \"description\": \"The environment in which the servers are running. Examples: prod, sit, stg.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of the data product technology that implements the data contract.\",\n          \"enum\": [\n            \"bigquery\",\n            \"BigQuery\",\n            \"s3\",\n            \"sftp\",\n            \"redshift\",\n            \"azure\",\n            \"sqlserver\",\n            \"snowflake\",\n            \"databricks\",\n            \"dataframe\",\n            \"glue\",\n            \"postgres\",\n            \"oracle\",\n            \"kafka\",\n            \"pubsub\",\n            \"kinesis\",\n            \"trino\",\n            \"local\"\n          ]\n        },\n        \"roles\": {\n          \"description\": \" An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the role.\"\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the role and what access the role provides.\"\n              }\n            },\n            \"required\": [\n              \"name\"\n            ]\n          }\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"BigQueryServer\": {\n      \"type\": \"object\",\n      \"title\": \"BigQueryServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"dataset\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP dataset name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"dataset\"\n      ]\n    },\n    \"S3Server\": {\n      \"type\": \"object\",\n      \"title\": \"S3Server\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"S3 URL, starting with `s3://`\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}/*.json\"\n          ]\n        },\n        \"endpointUrl\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The server endpoint for S3-compatible servers.\",\n          \"examples\": [\n            \"https://minio.example.com\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"SftpServer\": {\n      \"type\": \"object\",\n      \"title\": \"SftpServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"pattern\": \"^sftp://.*\",\n          \"description\": \"SFTP URL, starting with `sftp://`\",\n          \"examples\": [\n            \"sftp://123.123.12.123/{model}/*.json\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"RedshiftServer\": {\n      \"type\": \"object\",\n      \"title\": \"RedshiftServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the host name.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"clusterIdentifier\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's identifier.\",\n          \"examples\": [\n            \"redshift-prod-eu\",\n            \"analytics-cluster\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"An optional string describing the cluster's port.\",\n          \"examples\": [\n            5439\n          ]\n        },\n        \"endpoint\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's endpoint.\",\n          \"examples\": [\n            \"analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\"\n          ]\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"AzureServer\": {\n      \"type\": \"object\",\n      \"title\": \"AzureServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"Path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs. Recommended pattern is 'abfss://<container_name>/<path>'\",\n          \"examples\": [\n            \"abfss://my_container_name/path\",\n            \"abfss://my_container_name/path/*.json\",\n            \"az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet\",\n            \"abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\",\n        \"format\"\n      ]\n    },\n    \"SqlserverServer\": {\n      \"type\": \"object\",\n      \"title\": \"SqlserverServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\",\n          \"default\": 1433,\n          \"examples\": [\n            1433\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"database\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"dbo\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"SnowflakeServer\": {\n      \"type\": \"object\",\n      \"title\": \"SnowflakeServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"DatabricksServer\": {\n      \"type\": \"object\",\n      \"title\": \"DatabricksServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Databricks host\",\n          \"examples\": [\n            \"dbc-abcdefgh-1234.cloud.databricks.com\"\n          ]\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Hive or Unity catalog\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema name in the catalog\"\n        }\n      },\n      \"required\": [\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"DataframeServer\": {\n      \"type\": \"object\",\n      \"title\": \"DataframeServer\",\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"GlueServer\": {\n      \"type\": \"object\",\n      \"title\": \"GlueServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue account\",\n          \"examples\": [\n            \"1234-5678-9012\"\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue database name\",\n          \"examples\": [\n            \"my_database\"\n          ]\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The AWS S3 path. Must be in the form of a URL.\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the files\",\n          \"examples\": [\n            \"parquet\",\n            \"csv\",\n            \"json\",\n            \"delta\"\n          ]\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\"\n      ]\n    },\n    \"PostgresServer\": {\n      \"type\": \"object\",\n      \"title\": \"PostgresServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"public\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"OracleServer\": {\n      \"type\": \"object\",\n      \"title\": \"OracleServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the oracle server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the oracle server.\",\n          \"examples\": [\n            1523\n          ]\n        },\n        \"serviceName\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the service.\",\n          \"examples\": [\n            \"service\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"serviceName\"\n      ]\n    },\n    \"KafkaServer\": {\n      \"type\": \"object\",\n      \"title\": \"KafkaServer\",\n      \"description\": \"Kafka Server\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The bootstrap server of the kafka cluster.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the message. Examples: json, avro, protobuf.\",\n          \"default\": \"json\"\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"topic\"\n      ]\n    },\n    \"PubSubServer\": {\n      \"type\": \"object\",\n      \"title\": \"PubSubServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"topic\"\n      ]\n    },\n    \"KinesisDataStreamsServer\": {\n      \"type\": \"object\",\n      \"title\": \"KinesisDataStreamsServer\",\n      \"description\": \"Kinesis Data Streams Server\",\n      \"properties\": {\n        \"stream\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Kinesis data stream.\"\n        },\n        \"region\": {\n          \"type\": \"string\",\n          \"description\": \"AWS region.\",\n          \"examples\": [\n            \"eu-west-1\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the record\",\n          \"examples\": [\n            \"json\",\n            \"avro\",\n            \"protobuf\"\n          ]\n        }\n      },\n      \"required\": [\n        \"stream\"\n      ]\n    },\n    \"TrinoServer\": {\n      \"type\": \"object\",\n      \"title\": \"TrinoServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Trino host URL.\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The Trino port.\"\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the catalog.\",\n          \"examples\": [\n            \"hive\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"my_schema\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"LocalServer\": {\n      \"type\": \"object\",\n      \"title\": \"LocalServer\",\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"The relative or absolute path to the data file(s).\",\n          \"examples\": [\n            \"./folder/data.parquet\",\n            \"./folder/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the file(s)\",\n          \"examples\": [\n            \"json\",\n            \"parquet\",\n            \"delta\",\n            \"csv\"\n          ]\n        }\n      },\n      \"required\": [\n        \"path\",\n        \"format\"\n      ]\n    },\n    \"Quality\": {\n      \"allOf\": [\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The type of quality check\",\n              \"enum\": [\n                \"text\",\n                \"library\",\n                \"sql\",\n                \"custom\"\n              ]\n            },\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"A plain text describing the quality attribute in natural language.\"\n            }\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"text\"\n              }\n            }\n          },\n          \"then\": {\n            \"required\": [\n              \"description\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"sql\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"query\": {\n                \"type\": \"string\",\n                \"description\": \"A SQL query that returns a single number to compare with the threshold.\"\n              },\n              \"dialect\": {\n                \"type\": \"string\",\n                \"description\": \"The SQL dialect that is used for the query. Should be compatible to the server.type.\",\n                \"examples\": [\n                  \"athena\",\n                  \"bigquery\",\n                  \"redshift\",\n                  \"snowflake\",\n                  \"trino\",\n                  \"postgres\",\n                  \"oracle\"\n                ]\n              },\n              \"mustBe\": {\n                \"type\": \"number\"\n              },\n              \"mustNotBe\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThanOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeLessThanOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              }\n            },\n            \"required\": [\n              \"query\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"library\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"rule\": {\n                \"type\": \"string\",\n                \"description\": \"Define a data quality check based on the predefined rules as per ODCS.\",\n                \"examples\": [\"duplicateCount\", \"validValues\", \"rowCount\"]\n              },\n              \"mustBe\": {\n                \"description\": \"Must be equal to the value to be valid. When using numbers, it is equivalent to '='.\"\n              },\n              \"mustNotBe\": {\n                \"description\": \"Must not be equal to the value to be valid. When using numbers, it is equivalent to '!='.\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than the value to be valid. It is equivalent to '>'.\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than or equal to the value to be valid. It is equivalent to '>='.\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than the value to be valid. It is equivalent to '<'.\"\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than or equal to the value to be valid. It is equivalent to '<='.\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must not be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              }\n            },\n            \"required\": [\n              \"rule\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"custom\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A plain text describing the quality attribute in natural language.\"\n              },\n              \"engine\": {\n                \"type\": \"string\",\n                \"examples\": [\n                  \"soda\",\n                  \"great-expectations\"\n                ],\n                \"description\": \"The engine used for custom quality checks.\"\n              },\n              \"implementation\": {\n                \"type\": [\n                  \"object\",\n                  \"array\",\n                  \"string\"\n                ],\n                \"description\": \"Engine-specific quality checks and expectations.\"\n              }\n            },\n            \"required\": [\n              \"engine\"\n            ]\n          }\n        }\n      ]\n    },\n    \"Lineage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"inputFields\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"namespace\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset namespace\"\n              },\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset name\"\n              },\n              \"field\": {\n                \"type\": \"string\",\n                \"description\": \"The input field\"\n              },\n              \"transformations\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"type\": {\n                      \"description\": \"The type of the transformation. Allowed values are: DIRECT, INDIRECT\",\n                      \"type\": \"string\"\n                    },\n                    \"subtype\": {\n                      \"type\": \"string\",\n                      \"description\": \"The subtype of the transformation\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"a string representation of the transformation applied\"\n                    },\n                    \"masking\": {\n                      \"type\": \"boolean\",\n                      \"description\": \"is transformation masking the data or not\"\n                    }\n                  },\n                  \"required\": [\n                    \"type\"\n                  ],\n                  \"additionalProperties\": true\n                }\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"namespace\",\n              \"name\",\n              \"field\"\n            ]\n          }\n        },\n        \"transformationDescription\": {\n          \"type\": \"string\",\n          \"description\": \"a string representation of the transformation applied\",\n          \"deprecated\": true\n        },\n        \"transformationType\": {\n          \"type\": \"string\",\n          \"description\": \"IDENTITY|MASKED reflects a clearly defined behavior. IDENTITY: exact same as input; MASKED: no original data available (like a hash of PII for example)\",\n          \"deprecated\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"inputFields\"\n      ]\n    }\n  }\n}"
  },
  {
    "path": "versions/1.1.0/definition.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"A unique identifier for this definition. Encode the domain into the ID, separated by slashes.\",\n      \"examples\": [\n        \"checkout/order_id\"\n      ]\n    },\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"The business name of this definition.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Clear and concise explanations related to the domain.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"description\": \"The logical data type.\"\n    },\n    \"minLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n    },\n    \"maxLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n    },\n    \"format\": {\n      \"type\": \"string\",\n      \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n    },\n    \"precision\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        38\n      ],\n      \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n    },\n    \"scale\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        0\n      ],\n      \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n    },\n    \"pattern\": {\n      \"type\": \"string\",\n      \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n    },\n    \"example\": {\n      \"type\": \"string\",\n      \"description\": \"An example value for this field.\",\n      \"deprecationMessage\": \"Use the examples field instead.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"description\": \"A examples value for this field.\"\n    },\n    \"pii\": {\n      \"type\": \"boolean\",\n      \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n    },\n    \"classification\": {\n      \"type\": \"string\",\n      \"description\": \"The data class defining the sensitivity level for this field.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Custom metadata to provide additional context.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"type\"\n  ]\n}\n"
  },
  {
    "path": "versions/1.2.0/datacontract.init.yaml",
    "content": "dataContractSpecification: 1.2.0\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### servicelevels\n\n#servicelevels:\n#  availability:\n#    description: The server is available during support hours\n#    percentage: 99.9%\n#  retention:\n#    description: Data is retained for one year because!\n#    period: P1Y\n#    unlimited: false\n#  latency:\n#    description: Data is available within 25 hours after the order was placed\n#    threshold: 25h\n#    sourceTimestampField: orders.order_timestamp\n#    processedTimestampField: orders.processed_timestamp\n#  freshness:\n#    description: The age of the youngest row in a table.\n#    threshold: 25h\n#    timestampField: orders.order_timestamp\n#  frequency:\n#    description: Data is delivered once a day\n#    type: batch # or streaming\n#    interval: daily # for batch, either or cron\n#    cron: 0 0 * * * # for batch, either or interval\n#  support:\n#    description: The data is available during typical business hours at headquarters\n#    time: 9am to 5pm in EST on business days\n#    responseTime: 1h\n#  backup:\n#    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n#    interval: weekly\n#    cron: 0 0 * * 0\n#    recoveryTime: 24 hours\n#    recoveryPoint: 1 week\n"
  },
  {
    "path": "versions/1.2.0/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"1.2.0\",\n        \"1.1.0\",\n        \"0.9.3\",\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"The status of the data contract. Can be proposed, in development, active, retired.\",\n          \"examples\": [\n            \"proposed\",\n            \"in development\",\n            \"active\",\n            \"deprecated\",\n            \"retired\"\n          ]\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\",\n          \"additionalProperties\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"description\": \"Information about the servers.\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/BaseServer\",\n        \"allOf\": [\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"bigquery\"\n                }\n              }\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/BigQueryServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"s3\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/S3Server\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sftp\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SftpServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"redshift\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/RedshiftServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"azure\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/AzureServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sqlserver\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SqlserverServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"snowflake\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SnowflakeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"databricks\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DatabricksServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"dataframe\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DataframeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"glue\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/GlueServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"oracle\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/OracleServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kafka\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KafkaServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"pubsub\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PubSubServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kinesis\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KinesisDataStreamsServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"trino\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/TrinoServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"clickhouse\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/ClickhouseServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"local\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/LocalServer\"\n            }\n          }\n        ]\n      }\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"policies\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"description\": \"The type of the policy.\",\n                \"examples\": [\n                  \"privacy\",\n                  \"security\",\n                  \"retention\",\n                  \"compliance\"\n                ]\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the policy.\"\n              },\n              \"url\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"A URL to the policy document.\"\n              }\n            },\n            \"additionalProperties\": true\n          },\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string providing a human readable name for the model. Especially useful if the model name is cryptic or contains abbreviations.\",\n            \"examples\": [\n              \"Purchase Orders\",\n              \"Air Shipments\"\n            ]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"title\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.\"\n                },\n                \"type\": {\n                  \"$ref\": \"#/$defs/FieldType\"\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"fields\": {\n                  \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                  }\n                },\n                \"items\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"keys\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"values\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"deprecationMessage\": \"Use the primaryKey field instead.\"\n                },\n                \"primaryKey\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"references\": {\n                  \"type\": \"string\",\n                  \"description\": \"The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.\",\n                  \"examples\": [\n                    \"orders.order_id\",\n                    \"model.nested_field.field\"\n                  ]\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\",\n                  \"examples\": [\n                    \"email\",\n                    \"uri\",\n                    \"uuid\"\n                  ]\n                },\n                \"precision\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    38\n                  ],\n                  \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n                },\n                \"scale\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    0\n                  ],\n                  \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\",\n                  \"examples\": [\n                    \"^[a-zA-Z0-9_-]+$\"\n                  ]\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\",\n                  \"deprecationMessage\": \"Use the examples field instead.\"\n                },\n                \"examples\": {\n                  \"type\": \"array\",\n                  \"description\": \"A examples value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"links\": {\n                  \"type\": \"object\",\n                  \"description\": \"Links to external resources.\",\n                  \"minProperties\": 1,\n                  \"propertyNames\": {\n                    \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n                  },\n                  \"additionalProperties\": {\n                    \"type\": \"string\",\n                    \"title\": \"Link\",\n                    \"description\": \"A URL to an external resource.\",\n                    \"format\": \"uri\",\n                    \"examples\": [\n                      \"https://example.com\"\n                    ]\n                  }\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"quality\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/$defs/Quality\"\n                  }\n                },\n                \"lineage\": {\n                  \"$ref\": \"#/$defs/Lineage\"\n                },\n                \"config\": {\n                  \"type\": \"object\",\n                  \"description\": \"Additional metadata for field configuration.\",\n                  \"additionalProperties\": {\n                    \"type\": [\n                      \"string\",\n                      \"number\",\n                      \"boolean\",\n                      \"object\",\n                      \"array\",\n                      \"null\"\n                    ]\n                  },\n                  \"properties\": {\n                    \"avroType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"avroLogicalType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the logical field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"bigqueryType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)`.\"\n                    },\n                    \"snowflakeType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Snowflake table, e.g., `TIMESTAMP_LTZ`.\"\n                    },\n                    \"redshiftType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Redshift table, e.g., `SMALLINT`.\"\n                    },\n                    \"sqlserverType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a SQL Server table, e.g., `DATETIME2`.\"\n                    },\n                    \"databricksType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Databricks Unity Catalog table.\"\n                    },\n                    \"glueType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in an AWS Glue Data Catalog table.\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"primaryKey\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"The compound primary key of the model.\"\n          },\n          \"quality\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/$defs/Quality\"\n            }\n          },\n          \"examples\": {\n            \"type\": \"array\"\n          },\n          \"additionalFields\": {\n            \"type\": \"boolean\",\n            \"description\": \" Specify, if the model can have additional fields that are not defined in the contract.                            \",\n            \"default\": false\n          },\n          \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Additional metadata for model configuration.\",\n            \"additionalProperties\": {\n              \"type\": [\n                \"string\",\n                \"number\",\n                \"boolean\",\n                \"object\",\n                \"array\",\n                \"null\"\n              ]\n            },\n            \"properties\": {\n              \"avroNamespace\": {\n                \"type\": \"string\",\n                \"description\": \"The namespace to use when importing and exporting the data model from / to Apache Avro.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9/_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the domain into the ID using slashes.\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the name into the ID using slashes.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"$ref\": \"#/$defs/FieldType\"\n          },\n          \"fields\": {\n            \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n            }\n          },\n          \"items\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"keys\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"values\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"minLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"precision\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              38\n            ],\n            \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n          },\n          \"scale\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              0\n            ],\n            \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"minimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMinimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"maximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMaximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\",\n            \"deprecationMessage\": \"Use the examples field instead.\"\n          },\n          \"examples\": {\n            \"type\": \"array\",\n            \"description\": \"Example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          },\n          \"links\": {\n            \"type\": \"object\",\n            \"description\": \"Links to external resources.\",\n            \"minProperties\": 1,\n            \"propertyNames\": {\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"additionalProperties\": {\n              \"type\": \"string\",\n              \"title\": \"Link\",\n              \"description\": \"A URL to an external resource.\",\n              \"format\": \"uri\",\n              \"examples\": [\n                \"https://example.com\"\n              ]\n            }\n          }\n        },\n        \"required\": [\n          \"type\"\n        ]\n      }\n    },\n    \"servicelevels\": {\n      \"type\": \"object\",\n      \"description\": \"Specifies the service level agreements for the provided data, including availability, data retention policies, latency requirements, data freshness, update frequency, support availability, and backup policies.\",\n      \"properties\": {\n        \"availability\": {\n          \"type\": \"object\",\n          \"description\": \"Availability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the availability service level.\",\n              \"example\": \"The server is available during support hours\"\n            },\n            \"percentage\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the guaranteed uptime in percent (e.g., `99.9%`)\",\n              \"pattern\": \"^\\\\d+(\\\\.\\\\d+)?%$\",\n              \"example\": \"99.9%\"\n            }\n          }\n        },\n        \"retention\": {\n          \"type\": \"object\",\n          \"description\": \"Retention covers the period how long data will be available.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the retention service level.\",\n              \"example\": \"Data is retained for one year.\"\n            },\n            \"period\": {\n              \"type\": \"string\",\n              \"description\": \"An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).\",\n              \"example\": \"P1Y\"\n            },\n            \"unlimited\": {\n              \"type\": \"boolean\",\n              \"description\": \"An optional indicator that data is kept forever.\",\n              \"example\": false\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the period refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"latency\": {\n          \"type\": \"object\",\n          \"description\": \"Latency refers to the maximum amount of time from the source to its destination.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the latency service level.\",\n              \"example\": \"Data is available within 25 hours after the order was placed.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"sourceTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp when the data was provided at the source.\",\n              \"example\": \"orders.order_timestamp\"\n            },\n            \"processedTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.\",\n              \"example\": \"orders.processed_timestamp\"\n            }\n          }\n        },\n        \"freshness\": {\n          \"type\": \"object\",\n          \"description\": \"The maximum age of the youngest row in a table.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the freshness service level.\",\n              \"example\": \"The age of the youngest row in a table is within 25 hours.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g., `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the threshold refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"frequency\": {\n          \"type\": \"object\",\n          \"description\": \"Frequency describes how often data is updated.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the frequency service level.\",\n              \"example\": \"Data is delivered once a day.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"batch\",\n                \"micro-batching\",\n                \"streaming\",\n                \"manual\"\n              ],\n              \"description\": \"The method of data processing.\",\n              \"example\": \"batch\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.\",\n              \"example\": \"daily\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * *\"\n            }\n          }\n        },\n        \"support\": {\n          \"type\": \"object\",\n          \"description\": \"Support describes the times when support will be available for contact.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the support service level.\",\n              \"example\": \"The data is available during typical business hours at headquarters.\"\n            },\n            \"time\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.\",\n              \"example\": \"9am to 5pm in EST on business days\"\n            },\n            \"responseTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with.\",\n              \"example\": \"24 hours\"\n            }\n          }\n        },\n        \"backup\": {\n          \"type\": \"object\",\n          \"description\": \"Backup specifies details about data backup procedures.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the backup service level.\",\n              \"example\": \"Data is backed up once a week, every Sunday at 0:00 UTC.\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"An optional interval that defines how often data will be backed up, e.g., `daily`.\",\n              \"example\": \"weekly\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"An optional cron expression when data will be backed up, e.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * 0\"\n            },\n            \"recoveryTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).\",\n              \"example\": \"24 hours\"\n            },\n            \"recoveryPoint\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours).\",\n              \"example\": \"1 week\"\n            }\n          }\n        }\n      }\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"description\": \"Tags to facilitate searching and filtering.\",\n        \"examples\": [\n          \"databricks\",\n          \"pii\",\n          \"sensitive\"\n        ]\n      },\n      \"description\": \"Tags to facilitate searching and filtering.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ],\n  \"$defs\": {\n    \"FieldType\": {\n      \"type\": \"string\",\n      \"title\": \"FieldType\",\n      \"description\": \"The logical data type of the field.\",\n      \"enum\": [\n        \"number\",\n        \"decimal\",\n        \"numeric\",\n        \"int\",\n        \"integer\",\n        \"long\",\n        \"bigint\",\n        \"float\",\n        \"double\",\n        \"string\",\n        \"text\",\n        \"varchar\",\n        \"boolean\",\n        \"timestamp\",\n        \"timestamp_tz\",\n        \"timestamp_ntz\",\n        \"date\",\n        \"time\",\n        \"array\",\n        \"map\",\n        \"object\",\n        \"record\",\n        \"struct\",\n        \"bytes\",\n        \"variant\",\n        \"json\",\n        \"null\"\n      ]\n    },\n    \"BaseServer\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the servers.\"\n        },\n        \"environment\": {\n          \"type\": \"string\",\n          \"description\": \"The environment in which the servers are running. Examples: prod, sit, stg.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of the data product technology that implements the data contract.\",\n          \"examples\": [\n            \"azure\",\n            \"bigquery\",\n            \"BigQuery\",\n            \"clickhouse\",\n            \"databricks\",\n            \"dataframe\",\n            \"glue\",\n            \"kafka\",\n            \"kinesis\",\n            \"local\",\n            \"oracle\",\n            \"postgres\",\n            \"pubsub\",\n            \"redshift\",\n            \"sftp\",\n            \"sqlserver\",\n            \"snowflake\",\n            \"s3\",\n            \"trino\"\n          ]\n        },\n        \"roles\": {\n          \"description\": \" An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the role.\"\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the role and what access the role provides.\"\n              }\n            },\n            \"required\": [\n              \"name\"\n            ]\n          }\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"BigQueryServer\": {\n      \"type\": \"object\",\n      \"title\": \"BigQueryServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"dataset\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP dataset name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"dataset\"\n      ]\n    },\n    \"S3Server\": {\n      \"type\": \"object\",\n      \"title\": \"S3Server\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"S3 URL, starting with `s3://`\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}/*.json\"\n          ]\n        },\n        \"endpointUrl\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The server endpoint for S3-compatible servers.\",\n          \"examples\": [\n            \"https://minio.example.com\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"SftpServer\": {\n      \"type\": \"object\",\n      \"title\": \"SftpServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"pattern\": \"^sftp://.*\",\n          \"description\": \"SFTP URL, starting with `sftp://`\",\n          \"examples\": [\n            \"sftp://123.123.12.123/{model}/*.json\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"RedshiftServer\": {\n      \"type\": \"object\",\n      \"title\": \"RedshiftServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the host name.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"clusterIdentifier\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's identifier.\",\n          \"examples\": [\n            \"redshift-prod-eu\",\n            \"analytics-cluster\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"An optional string describing the cluster's port.\",\n          \"examples\": [\n            5439\n          ]\n        },\n        \"endpoint\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's endpoint.\",\n          \"examples\": [\n            \"analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\"\n          ]\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"AzureServer\": {\n      \"type\": \"object\",\n      \"title\": \"AzureServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"Path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs. Recommended pattern is 'abfss://<container_name>/<path>'\",\n          \"examples\": [\n            \"abfss://my_container_name/path\",\n            \"abfss://my_container_name/path/*.json\",\n            \"az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet\",\n            \"abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\",\n        \"format\"\n      ]\n    },\n    \"SqlserverServer\": {\n      \"type\": \"object\",\n      \"title\": \"SqlserverServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\",\n          \"default\": 1433,\n          \"examples\": [\n            1433\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"database\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"dbo\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"SnowflakeServer\": {\n      \"type\": \"object\",\n      \"title\": \"SnowflakeServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"DatabricksServer\": {\n      \"type\": \"object\",\n      \"title\": \"DatabricksServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Databricks host\",\n          \"examples\": [\n            \"dbc-abcdefgh-1234.cloud.databricks.com\"\n          ]\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Hive or Unity catalog\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema name in the catalog\"\n        }\n      },\n      \"required\": [\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"DataframeServer\": {\n      \"type\": \"object\",\n      \"title\": \"DataframeServer\",\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"GlueServer\": {\n      \"type\": \"object\",\n      \"title\": \"GlueServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue account\",\n          \"examples\": [\n            \"1234-5678-9012\"\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue database name\",\n          \"examples\": [\n            \"my_database\"\n          ]\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The AWS S3 path. Must be in the form of a URL.\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the files\",\n          \"examples\": [\n            \"parquet\",\n            \"csv\",\n            \"json\",\n            \"delta\"\n          ]\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\"\n      ]\n    },\n    \"PostgresServer\": {\n      \"type\": \"object\",\n      \"title\": \"PostgresServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"public\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"OracleServer\": {\n      \"type\": \"object\",\n      \"title\": \"OracleServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the oracle server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the oracle server.\",\n          \"examples\": [\n            1523\n          ]\n        },\n        \"serviceName\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the service.\",\n          \"examples\": [\n            \"service\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"serviceName\"\n      ]\n    },\n    \"KafkaServer\": {\n      \"type\": \"object\",\n      \"title\": \"KafkaServer\",\n      \"description\": \"Kafka Server\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The bootstrap server of the kafka cluster.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the message. Examples: json, avro, protobuf.\",\n          \"default\": \"json\"\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"topic\"\n      ]\n    },\n    \"PubSubServer\": {\n      \"type\": \"object\",\n      \"title\": \"PubSubServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"topic\"\n      ]\n    },\n    \"KinesisDataStreamsServer\": {\n      \"type\": \"object\",\n      \"title\": \"KinesisDataStreamsServer\",\n      \"description\": \"Kinesis Data Streams Server\",\n      \"properties\": {\n        \"stream\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Kinesis data stream.\"\n        },\n        \"region\": {\n          \"type\": \"string\",\n          \"description\": \"AWS region.\",\n          \"examples\": [\n            \"eu-west-1\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the record\",\n          \"examples\": [\n            \"json\",\n            \"avro\",\n            \"protobuf\"\n          ]\n        }\n      },\n      \"required\": [\n        \"stream\"\n      ]\n    },\n    \"TrinoServer\": {\n      \"type\": \"object\",\n      \"title\": \"TrinoServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Trino host URL.\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The Trino port.\"\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the catalog.\",\n          \"examples\": [\n            \"hive\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"my_schema\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"ClickhouseServer\": {\n      \"type\": \"object\",\n      \"title\": \"ClickhouseServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\"\n      ]\n    },\n    \"LocalServer\": {\n      \"type\": \"object\",\n      \"title\": \"LocalServer\",\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"The relative or absolute path to the data file(s).\",\n          \"examples\": [\n            \"./folder/data.parquet\",\n            \"./folder/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the file(s)\",\n          \"examples\": [\n            \"json\",\n            \"parquet\",\n            \"delta\",\n            \"csv\"\n          ]\n        }\n      },\n      \"required\": [\n        \"path\",\n        \"format\"\n      ]\n    },\n    \"Quality\": {\n      \"allOf\": [\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The type of quality check\",\n              \"enum\": [\n                \"text\",\n                \"library\",\n                \"sql\",\n                \"custom\"\n              ]\n            },\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"A plain text describing the quality attribute in natural language.\"\n            }\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"text\"\n              }\n            }\n          },\n          \"then\": {\n            \"required\": [\n              \"description\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"sql\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"query\": {\n                \"type\": \"string\",\n                \"description\": \"A SQL query that returns a single number to compare with the threshold.\"\n              },\n              \"dialect\": {\n                \"type\": \"string\",\n                \"description\": \"The SQL dialect that is used for the query. Should be compatible to the server.type.\",\n                \"examples\": [\n                  \"athena\",\n                  \"bigquery\",\n                  \"redshift\",\n                  \"snowflake\",\n                  \"trino\",\n                  \"postgres\",\n                  \"oracle\"\n                ]\n              },\n              \"mustBe\": {\n                \"type\": \"integer\"\n              },\n              \"mustNotBe\": {\n                \"type\": \"integer\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"integer\"\n              },\n              \"mustBeGreaterThanOrEqualTo\": {\n                \"type\": \"integer\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"integer\"\n              },\n              \"mustBeLessThanOrEqualTo\": {\n                \"type\": \"integer\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"integer\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"integer\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              }\n            },\n            \"required\": [\n              \"query\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"library\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"rule\": {\n                \"type\": \"string\",\n                \"description\": \"Define a data quality check based on the predefined rules as per ODCS.\",\n                \"examples\": [\"duplicateCount\", \"validValues\", \"rowCount\"]\n              },\n              \"mustBe\": {\n                \"description\": \"Must be equal to the value to be valid. When using numbers, it is equivalent to '='.\"\n              },\n              \"mustNotBe\": {\n                \"description\": \"Must not be equal to the value to be valid. When using numbers, it is equivalent to '!='.\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than the value to be valid. It is equivalent to '>'.\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than or equal to the value to be valid. It is equivalent to '>='.\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than the value to be valid. It is equivalent to '<'.\"\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than or equal to the value to be valid. It is equivalent to '<='.\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must not be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              }\n            },\n            \"required\": [\n              \"rule\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"custom\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A plain text describing the quality attribute in natural language.\"\n              },\n              \"engine\": {\n                \"type\": \"string\",\n                \"examples\": [\n                  \"soda\",\n                  \"great-expectations\"\n                ],\n                \"description\": \"The engine used for custom quality checks.\"\n              },\n              \"implementation\": {\n                \"type\": [\n                  \"object\",\n                  \"array\",\n                  \"string\"\n                ],\n                \"description\": \"Engine-specific quality checks and expectations.\"\n              }\n            },\n            \"required\": [\n              \"engine\"\n            ]\n          }\n        }\n      ]\n    },\n    \"Lineage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"inputFields\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"namespace\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset namespace\"\n              },\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset name\"\n              },\n              \"field\": {\n                \"type\": \"string\",\n                \"description\": \"The input field\"\n              },\n              \"transformations\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"type\": {\n                      \"description\": \"The type of the transformation. Allowed values are: DIRECT, INDIRECT\",\n                      \"type\": \"string\"\n                    },\n                    \"subtype\": {\n                      \"type\": \"string\",\n                      \"description\": \"The subtype of the transformation\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"a string representation of the transformation applied\"\n                    },\n                    \"masking\": {\n                      \"type\": \"boolean\",\n                      \"description\": \"is transformation masking the data or not\"\n                    }\n                  },\n                  \"required\": [\n                    \"type\"\n                  ],\n                  \"additionalProperties\": true\n                }\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"namespace\",\n              \"name\",\n              \"field\"\n            ]\n          }\n        },\n        \"transformationDescription\": {\n          \"type\": \"string\",\n          \"description\": \"a string representation of the transformation applied\",\n          \"deprecated\": true\n        },\n        \"transformationType\": {\n          \"type\": \"string\",\n          \"description\": \"IDENTITY|MASKED reflects a clearly defined behavior. IDENTITY: exact same as input; MASKED: no original data available (like a hash of PII for example)\",\n          \"deprecated\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"inputFields\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "versions/1.2.0/definition.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"A unique identifier for this definition. Encode the domain into the ID, separated by slashes.\",\n      \"examples\": [\n        \"checkout/order_id\"\n      ]\n    },\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"The business name of this definition.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Clear and concise explanations related to the domain.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"description\": \"The logical data type.\"\n    },\n    \"minLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n    },\n    \"maxLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n    },\n    \"format\": {\n      \"type\": \"string\",\n      \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n    },\n    \"precision\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        38\n      ],\n      \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n    },\n    \"scale\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        0\n      ],\n      \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n    },\n    \"pattern\": {\n      \"type\": \"string\",\n      \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n    },\n    \"example\": {\n      \"type\": \"string\",\n      \"description\": \"An example value for this field.\",\n      \"deprecationMessage\": \"Use the examples field instead.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"description\": \"A examples value for this field.\"\n    },\n    \"pii\": {\n      \"type\": \"boolean\",\n      \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n    },\n    \"classification\": {\n      \"type\": \"string\",\n      \"description\": \"The data class defining the sensitivity level for this field.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Custom metadata to provide additional context.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"type\"\n  ]\n}\n"
  },
  {
    "path": "versions/1.2.1/datacontract.init.yaml",
    "content": "dataContractSpecification: 1.2.0\nid: my-data-contract-id\ninfo:\n  title: My Data Contract\n  version: 0.0.1\n#  description:\n#  owner:\n#  contact:\n#    name:\n#    url:\n#    email:\n\n\n### servers\n\n#servers:\n#  production:\n#    type: s3\n#    location: s3://\n#    format: parquet\n#    delimiter: new_line\n\n### terms\n\n#terms:\n#  usage:\n#  limitations:\n#  billing:\n#  noticePeriod:\n\n\n### models\n\n# models:\n#   my_model:\n#     description:\n#     type:\n#     fields:\n#       my_field:\n#         type:\n#         description:\n\n\n### definitions\n\n# definitions:\n#   my_field:\n#     domain:\n#     name:\n#     title:\n#     type:\n#     description:\n#     example:\n#     pii:\n#     classification:\n\n\n### servicelevels\n\n#servicelevels:\n#  availability:\n#    description: The server is available during support hours\n#    percentage: 99.9%\n#  retention:\n#    description: Data is retained for one year because!\n#    period: P1Y\n#    unlimited: false\n#  latency:\n#    description: Data is available within 25 hours after the order was placed\n#    threshold: 25h\n#    sourceTimestampField: orders.order_timestamp\n#    processedTimestampField: orders.processed_timestamp\n#  freshness:\n#    description: The age of the youngest row in a table.\n#    threshold: 25h\n#    timestampField: orders.order_timestamp\n#  frequency:\n#    description: Data is delivered once a day\n#    type: batch # or streaming\n#    interval: daily # for batch, either or cron\n#    cron: 0 0 * * * # for batch, either or interval\n#  support:\n#    description: The data is available during typical business hours at headquarters\n#    time: 9am to 5pm in EST on business days\n#    responseTime: 1h\n#  backup:\n#    description: Data is backed up once a week, every Sunday at 0:00 UTC.\n#    interval: weekly\n#    cron: 0 0 * * 0\n#    recoveryTime: 24 hours\n#    recoveryPoint: 1 week\n"
  },
  {
    "path": "versions/1.2.1/datacontract.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"title\": \"DataContractSpecification\",\n  \"properties\": {\n    \"dataContractSpecification\": {\n      \"type\": \"string\",\n      \"title\": \"DataContractSpecificationVersion\",\n      \"enum\": [\n        \"1.2.1\",\n        \"1.2.0\",\n        \"1.1.0\",\n        \"0.9.3\",\n        \"0.9.2\",\n        \"0.9.1\",\n        \"0.9.0\"\n      ],\n      \"description\": \"Specifies the Data Contract Specification being used.\"\n    },\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the identifier of the data contract.\"\n    },\n    \"info\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"The title of the data contract.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"The version of the data contract document (which is distinct from the Data Contract Specification version or the Data Product implementation version).\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"The status of the data contract. Can be proposed, in development, active, retired.\",\n          \"examples\": [\n            \"proposed\",\n            \"in development\",\n            \"active\",\n            \"deprecated\",\n            \"retired\"\n          ]\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"A description of the data contract.\"\n        },\n        \"owner\": {\n          \"type\": \"string\",\n          \"description\": \"The owner or team responsible for managing the data contract and providing the data.\"\n        },\n        \"contact\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"name\": {\n              \"type\": \"string\",\n              \"description\": \"The identifying name of the contact person/organization.\"\n            },\n            \"url\": {\n              \"type\": \"string\",\n              \"format\": \"uri\",\n              \"description\": \"The URL pointing to the contact information. This MUST be in the form of a URL.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"format\": \"email\",\n              \"description\": \"The email address of the contact person/organization. This MUST be in the form of an email address.\"\n            }\n          },\n          \"description\": \"Contact information for the data contract.\",\n          \"additionalProperties\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"title\",\n        \"version\"\n      ],\n      \"description\": \"Metadata and life cycle information about the data contract.\"\n    },\n    \"servers\": {\n      \"type\": \"object\",\n      \"description\": \"Information about the servers.\",\n      \"additionalProperties\": {\n        \"$ref\": \"#/$defs/BaseServer\",\n        \"allOf\": [\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"bigquery\"\n                }\n              }\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/BigQueryServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"s3\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/S3Server\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sftp\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SftpServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"redshift\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/RedshiftServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"azure\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/AzureServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"sqlserver\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SqlserverServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"snowflake\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/SnowflakeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"databricks\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DatabricksServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"dataframe\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/DataframeServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"glue\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/GlueServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"postgres\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PostgresServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"oracle\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/OracleServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kafka\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KafkaServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"pubsub\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/PubSubServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"kinesis\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/KinesisDataStreamsServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"trino\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/TrinoServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"clickhouse\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/ClickhouseServer\"\n            }\n          },\n          {\n            \"if\": {\n              \"properties\": {\n                \"type\": {\n                  \"const\": \"local\"\n                }\n              },\n              \"required\": [\n                \"type\"\n              ]\n            },\n            \"then\": {\n              \"$ref\": \"#/$defs/LocalServer\"\n            }\n          }\n        ]\n      }\n    },\n    \"terms\": {\n      \"type\": \"object\",\n      \"description\": \"The terms and conditions of the data contract.\",\n      \"properties\": {\n        \"usage\": {\n          \"type\": \"string\",\n          \"description\": \"The usage describes the way the data is expected to be used. Can contain business and technical information.\"\n        },\n        \"limitations\": {\n          \"type\": \"string\",\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"policies\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"type\": {\n                \"type\": \"string\",\n                \"description\": \"The type of the policy.\",\n                \"examples\": [\n                  \"privacy\",\n                  \"security\",\n                  \"retention\",\n                  \"compliance\"\n                ]\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the policy.\"\n              },\n              \"url\": {\n                \"type\": \"string\",\n                \"format\": \"uri\",\n                \"description\": \"A URL to the policy document.\"\n              }\n            },\n            \"additionalProperties\": true\n          },\n          \"description\": \"The limitations describe the restrictions on how the data can be used, can be technical or restrictions on what the data may not be used for.\"\n        },\n        \"billing\": {\n          \"type\": \"string\",\n          \"description\": \"The billing describes the pricing model for using the data, such as whether it's free, having a monthly fee, or metered pay-per-use.\"\n        },\n        \"noticePeriod\": {\n          \"type\": \"string\",\n          \"description\": \"The period of time that must be given by either party to terminate or modify a data usage agreement. Uses ISO-8601 period format, e.g., 'P3M' for a period of three months.\"\n        }\n      },\n      \"additionalProperties\": true\n    },\n    \"models\": {\n      \"description\": \"Specifies the logical data model. Use the models name (e.g., the table name) as the key.\",\n      \"type\": \"object\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Model\",\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"description\": \"The type of the model. Examples: table, view, object. Default: table.\",\n            \"type\": \"string\",\n            \"title\": \"ModelType\",\n            \"default\": \"table\",\n            \"enum\": [\n              \"table\",\n              \"view\",\n              \"object\"\n            ]\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"An optional string providing a human readable name for the model. Especially useful if the model name is cryptic or contains abbreviations.\",\n            \"examples\": [\n              \"Purchase Orders\",\n              \"Air Shipments\"\n            ]\n          },\n          \"fields\": {\n            \"description\": \"Specifies a field in the data model. Use the field name (e.g., the column name) as the key.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"type\": \"object\",\n              \"title\": \"Field\",\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string describing the semantic of the data in this field.\"\n                },\n                \"title\": {\n                  \"type\": \"string\",\n                  \"description\": \"An optional string providing a human readable name for the field. Especially useful if the field name is cryptic or contains abbreviations.\"\n                },\n                \"type\": {\n                  \"$ref\": \"#/$defs/FieldType\"\n                },\n                \"required\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if this field must contain a value and may not be null.\"\n                },\n                \"fields\": {\n                  \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n                  \"type\": \"object\",\n                  \"additionalProperties\": {\n                    \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                  }\n                },\n                \"items\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"keys\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"values\": {\n                  \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n                },\n                \"primary\": {\n                  \"type\": \"boolean\",\n                  \"deprecationMessage\": \"Use the primaryKey field instead.\"\n                },\n                \"primaryKey\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"If this field is a primary key.\"\n                },\n                \"references\": {\n                  \"type\": \"string\",\n                  \"description\": \"The reference to a field in another model. E.g. use 'orders.order_id' to reference the order_id field of the model orders. Think of defining a foreign key relationship.\",\n                  \"examples\": [\n                    \"orders.order_id\",\n                    \"model.nested_field.field\"\n                  ]\n                },\n                \"unique\": {\n                  \"type\": \"boolean\",\n                  \"default\": false,\n                  \"description\": \"An indication, if the value must be unique within the model.\"\n                },\n                \"enum\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"uniqueItems\": true,\n                  \"description\": \"A value must be equal to one of the elements in this array value. Only evaluated if the value is not null.\"\n                },\n                \"minLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must greater than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"maxLength\": {\n                  \"type\": \"integer\",\n                  \"description\": \"A value must less than, or equal to, the value of this. Only applies to string types.\"\n                },\n                \"format\": {\n                  \"type\": \"string\",\n                  \"description\": \"A specific format the value must comply with (e.g., 'email', 'uri', 'uuid').\",\n                  \"examples\": [\n                    \"email\",\n                    \"uri\",\n                    \"uuid\"\n                  ]\n                },\n                \"precision\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    38\n                  ],\n                  \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n                },\n                \"scale\": {\n                  \"type\": \"number\",\n                  \"examples\": [\n                    0\n                  ],\n                  \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n                },\n                \"pattern\": {\n                  \"type\": \"string\",\n                  \"description\": \"A regular expression the value must match. Only applies to string types.\",\n                  \"examples\": [\n                    \"^[a-zA-Z0-9_-]+$\"\n                  ]\n                },\n                \"minimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMinimum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"maximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"exclusiveMaximum\": {\n                  \"type\": \"number\",\n                  \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n                },\n                \"example\": {\n                  \"type\": \"string\",\n                  \"description\": \"An example value for this field.\",\n                  \"deprecationMessage\": \"Use the examples field instead.\"\n                },\n                \"examples\": {\n                  \"type\": \"array\",\n                  \"description\": \"A examples value for this field.\"\n                },\n                \"pii\": {\n                  \"type\": \"boolean\",\n                  \"description\": \"An indication, if this field contains Personal Identifiable Information (PII).\"\n                },\n                \"classification\": {\n                  \"type\": \"string\",\n                  \"description\": \"The data class defining the sensitivity level for this field, according to the organization's classification scheme.\",\n                  \"examples\": [\n                    \"sensitive\",\n                    \"restricted\",\n                    \"internal\",\n                    \"public\"\n                  ]\n                },\n                \"tags\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"Custom metadata to provide additional context.\"\n                },\n                \"links\": {\n                  \"type\": \"object\",\n                  \"description\": \"Links to external resources.\",\n                  \"minProperties\": 1,\n                  \"propertyNames\": {\n                    \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n                  },\n                  \"additionalProperties\": {\n                    \"type\": \"string\",\n                    \"title\": \"Link\",\n                    \"description\": \"A URL to an external resource.\",\n                    \"format\": \"uri\",\n                    \"examples\": [\n                      \"https://example.com\"\n                    ]\n                  }\n                },\n                \"$ref\": {\n                  \"type\": \"string\",\n                  \"description\": \"A reference URI to a definition in the specification, internally or externally. Properties will be inherited from the definition.\"\n                },\n                \"quality\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"$ref\": \"#/$defs/Quality\"\n                  }\n                },\n                \"lineage\": {\n                  \"$ref\": \"#/$defs/Lineage\"\n                },\n                \"config\": {\n                  \"type\": \"object\",\n                  \"description\": \"Additional metadata for field configuration.\",\n                  \"additionalProperties\": {\n                    \"type\": [\n                      \"string\",\n                      \"number\",\n                      \"boolean\",\n                      \"object\",\n                      \"array\",\n                      \"null\"\n                    ]\n                  },\n                  \"properties\": {\n                    \"avroType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"avroLogicalType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the logical field type to use when exporting the data model to Apache Avro.\"\n                    },\n                    \"bigqueryType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a BigQuery table, e.g., `NUMERIC(5, 2)`.\"\n                    },\n                    \"snowflakeType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Snowflake table, e.g., `TIMESTAMP_LTZ`.\"\n                    },\n                    \"redshiftType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Redshift table, e.g., `SMALLINT`.\"\n                    },\n                    \"sqlserverType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a SQL Server table, e.g., `DATETIME2`.\"\n                    },\n                    \"databricksType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in a Databricks Unity Catalog table.\"\n                    },\n                    \"glueType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Specify the physical column type that is used in an AWS Glue Data Catalog table.\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"primaryKey\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"The compound primary key of the model.\"\n          },\n          \"quality\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/$defs/Quality\"\n            }\n          },\n          \"examples\": {\n            \"type\": \"array\"\n          },\n          \"additionalFields\": {\n            \"type\": \"boolean\",\n            \"description\": \" Specify, if the model can have additional fields that are not defined in the contract.                            \",\n            \"default\": false\n          },\n          \"config\": {\n            \"type\": \"object\",\n            \"description\": \"Additional metadata for model configuration.\",\n            \"additionalProperties\": {\n              \"type\": [\n                \"string\",\n                \"number\",\n                \"boolean\",\n                \"object\",\n                \"array\",\n                \"null\"\n              ]\n            },\n            \"properties\": {\n              \"avroNamespace\": {\n                \"type\": \"string\",\n                \"description\": \"The namespace to use when importing and exporting the data model from / to Apache Avro.\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"definitions\": {\n      \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n      \"type\": \"object\",\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9/_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"object\",\n        \"title\": \"Definition\",\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain in which this definition is valid.\",\n            \"default\": \"global\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the domain into the ID using slashes.\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The technical name of this definition.\",\n            \"deprecationMessage\": \"This field is deprecated. Encode the name into the ID using slashes.\"\n          },\n          \"title\": {\n            \"type\": \"string\",\n            \"description\": \"The business name of this definition.\"\n          },\n          \"description\": {\n            \"type\": \"string\",\n            \"description\": \"Clear and concise explanations related to the domain.\"\n          },\n          \"type\": {\n            \"$ref\": \"#/$defs/FieldType\"\n          },\n          \"fields\": {\n            \"description\": \"The nested fields (e.g. columns) of the object, record, or struct.\",\n            \"type\": \"object\",\n            \"additionalProperties\": {\n              \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n            }\n          },\n          \"items\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"keys\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"values\": {\n            \"$ref\": \"#/properties/models/additionalProperties/properties/fields/additionalProperties\"\n          },\n          \"minLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n          },\n          \"maxLength\": {\n            \"type\": \"integer\",\n            \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n          },\n          \"format\": {\n            \"type\": \"string\",\n            \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n          },\n          \"precision\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              38\n            ],\n            \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n          },\n          \"scale\": {\n            \"type\": \"integer\",\n            \"examples\": [\n              0\n            ],\n            \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n          },\n          \"pattern\": {\n            \"type\": \"string\",\n            \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n          },\n          \"minimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMinimum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must greater than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"maximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than, or equal to, the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"exclusiveMaximum\": {\n            \"type\": \"number\",\n            \"description\": \"A value of a number must less than the value of this. Only evaluated if the value is not null. Only applies to numeric values.\"\n          },\n          \"example\": {\n            \"type\": \"string\",\n            \"description\": \"An example value.\",\n            \"deprecationMessage\": \"Use the examples field instead.\"\n          },\n          \"examples\": {\n            \"type\": \"array\",\n            \"description\": \"Example value.\"\n          },\n          \"pii\": {\n            \"type\": \"boolean\",\n            \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n          },\n          \"classification\": {\n            \"type\": \"string\",\n            \"description\": \"The data class defining the sensitivity level for this field.\"\n          },\n          \"tags\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"description\": \"Custom metadata to provide additional context.\"\n          },\n          \"links\": {\n            \"type\": \"object\",\n            \"description\": \"Links to external resources.\",\n            \"minProperties\": 1,\n            \"propertyNames\": {\n              \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n            },\n            \"additionalProperties\": {\n              \"type\": \"string\",\n              \"title\": \"Link\",\n              \"description\": \"A URL to an external resource.\",\n              \"format\": \"uri\",\n              \"examples\": [\n                \"https://example.com\"\n              ]\n            }\n          }\n        },\n        \"required\": [\n          \"type\"\n        ]\n      }\n    },\n    \"servicelevels\": {\n      \"type\": \"object\",\n      \"description\": \"Specifies the service level agreements for the provided data, including availability, data retention policies, latency requirements, data freshness, update frequency, support availability, and backup policies.\",\n      \"properties\": {\n        \"availability\": {\n          \"type\": \"object\",\n          \"description\": \"Availability refers to the promise or guarantee by the service provider about the uptime of the system that provides the data.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the availability service level.\",\n              \"example\": \"The server is available during support hours\"\n            },\n            \"percentage\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the guaranteed uptime in percent (e.g., `99.9%`)\",\n              \"pattern\": \"^\\\\d+(\\\\.\\\\d+)?%$\",\n              \"example\": \"99.9%\"\n            }\n          }\n        },\n        \"retention\": {\n          \"type\": \"object\",\n          \"description\": \"Retention covers the period how long data will be available.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the retention service level.\",\n              \"example\": \"Data is retained for one year.\"\n            },\n            \"period\": {\n              \"type\": \"string\",\n              \"description\": \"An optional period of time, how long data is available. Supported formats: Simple duration (e.g., `1 year`, `30d`) and ISO 8601 duration (e.g, `P1Y`).\",\n              \"example\": \"P1Y\"\n            },\n            \"unlimited\": {\n              \"type\": \"boolean\",\n              \"description\": \"An optional indicator that data is kept forever.\",\n              \"example\": false\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the period refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"latency\": {\n          \"type\": \"object\",\n          \"description\": \"Latency refers to the maximum amount of time from the source to its destination.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the latency service level.\",\n              \"example\": \"Data is available within 25 hours after the order was placed.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum duration between the source timestamp and the processed timestamp. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g, `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"sourceTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp when the data was provided at the source.\",\n              \"example\": \"orders.order_timestamp\"\n            },\n            \"processedTimestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the processing timestamp, which denotes when the data is made available to consumers of this data contract.\",\n              \"example\": \"orders.processed_timestamp\"\n            }\n          }\n        },\n        \"freshness\": {\n          \"type\": \"object\",\n          \"description\": \"The maximum age of the youngest row in a table.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the freshness service level.\",\n              \"example\": \"The age of the youngest row in a table is within 25 hours.\"\n            },\n            \"threshold\": {\n              \"type\": \"string\",\n              \"description\": \"An optional maximum age of the youngest entry. Supported formats: Simple duration (e.g., `24 hours`, `5s`) and ISO 8601 duration (e.g., `PT24H`).\",\n              \"example\": \"25h\"\n            },\n            \"timestampField\": {\n              \"type\": \"string\",\n              \"description\": \"An optional reference to the field that contains the timestamp that the threshold refers to.\",\n              \"example\": \"orders.order_timestamp\"\n            }\n          }\n        },\n        \"frequency\": {\n          \"type\": \"object\",\n          \"description\": \"Frequency describes how often data is updated.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the frequency service level.\",\n              \"example\": \"Data is delivered once a day.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"batch\",\n                \"micro-batching\",\n                \"streaming\",\n                \"manual\"\n              ],\n              \"description\": \"The method of data processing.\",\n              \"example\": \"batch\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: How often the pipeline is triggered, e.g., `daily`.\",\n              \"example\": \"daily\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"Optional. Only for batch: A cron expression when the pipelines is triggered. E.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * *\"\n            }\n          }\n        },\n        \"support\": {\n          \"type\": \"object\",\n          \"description\": \"Support describes the times when support will be available for contact.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the support service level.\",\n              \"example\": \"The data is available during typical business hours at headquarters.\"\n            },\n            \"time\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the times when support will be available for contact such as `24/7` or `business hours only`.\",\n              \"example\": \"9am to 5pm in EST on business days\"\n            },\n            \"responseTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the time it takes for the support team to acknowledge a request. This does not mean the issue will be resolved immediately, but it assures users that their request has been received and will be dealt with.\",\n              \"example\": \"24 hours\"\n            }\n          }\n        },\n        \"backup\": {\n          \"type\": \"object\",\n          \"description\": \"Backup specifies details about data backup procedures.\",\n          \"properties\": {\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"An optional string describing the backup service level.\",\n              \"example\": \"Data is backed up once a week, every Sunday at 0:00 UTC.\"\n            },\n            \"interval\": {\n              \"type\": \"string\",\n              \"description\": \"An optional interval that defines how often data will be backed up, e.g., `daily`.\",\n              \"example\": \"weekly\"\n            },\n            \"cron\": {\n              \"type\": \"string\",\n              \"description\": \"An optional cron expression when data will be backed up, e.g., `0 0 * * *`.\",\n              \"example\": \"0 0 * * 0\"\n            },\n            \"recoveryTime\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Time Objective (RTO) specifies the maximum amount of time allowed to restore data from a backup after a failure or loss event (e.g., 4 hours, 24 hours).\",\n              \"example\": \"24 hours\"\n            },\n            \"recoveryPoint\": {\n              \"type\": \"string\",\n              \"description\": \"An optional Recovery Point Objective (RPO) defines the maximum acceptable age of files that must be recovered from backup storage for normal operations to resume after a disaster or data loss event. This essentially measures how much data you can afford to lose, measured in time (e.g., 4 hours, 24 hours).\",\n              \"example\": \"1 week\"\n            }\n          }\n        }\n      }\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\",\n        \"description\": \"Tags to facilitate searching and filtering.\",\n        \"examples\": [\n          \"databricks\",\n          \"pii\",\n          \"sensitive\"\n        ]\n      },\n      \"description\": \"Tags to facilitate searching and filtering.\"\n    }\n  },\n  \"required\": [\n    \"dataContractSpecification\",\n    \"id\",\n    \"info\"\n  ],\n  \"$defs\": {\n    \"FieldType\": {\n      \"type\": \"string\",\n      \"title\": \"FieldType\",\n      \"description\": \"The logical data type of the field.\",\n      \"enum\": [\n        \"number\",\n        \"decimal\",\n        \"numeric\",\n        \"int\",\n        \"integer\",\n        \"long\",\n        \"bigint\",\n        \"float\",\n        \"double\",\n        \"string\",\n        \"text\",\n        \"varchar\",\n        \"boolean\",\n        \"timestamp\",\n        \"timestamp_tz\",\n        \"timestamp_ntz\",\n        \"date\",\n        \"time\",\n        \"array\",\n        \"map\",\n        \"object\",\n        \"record\",\n        \"struct\",\n        \"bytes\",\n        \"variant\",\n        \"json\",\n        \"null\"\n      ]\n    },\n    \"BaseServer\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the servers.\"\n        },\n        \"environment\": {\n          \"type\": \"string\",\n          \"description\": \"The environment in which the servers are running. Examples: prod, sit, stg.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of the data product technology that implements the data contract.\",\n          \"examples\": [\n            \"azure\",\n            \"bigquery\",\n            \"BigQuery\",\n            \"clickhouse\",\n            \"databricks\",\n            \"dataframe\",\n            \"glue\",\n            \"kafka\",\n            \"kinesis\",\n            \"local\",\n            \"oracle\",\n            \"postgres\",\n            \"pubsub\",\n            \"redshift\",\n            \"sftp\",\n            \"sqlserver\",\n            \"snowflake\",\n            \"s3\",\n            \"trino\"\n          ]\n        },\n        \"roles\": {\n          \"description\": \" An optional array of roles that are available and can be requested to access the server for role-based access control. E.g. separate roles for different regions or sensitive data.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the role.\"\n              },\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A description of the role and what access the role provides.\"\n              }\n            },\n            \"required\": [\n              \"name\"\n            ]\n          }\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"BigQueryServer\": {\n      \"type\": \"object\",\n      \"title\": \"BigQueryServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"dataset\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP dataset name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"dataset\"\n      ]\n    },\n    \"S3Server\": {\n      \"type\": \"object\",\n      \"title\": \"S3Server\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"S3 URL, starting with `s3://`\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}/*.json\"\n          ]\n        },\n        \"endpointUrl\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The server endpoint for S3-compatible servers.\",\n          \"examples\": [\n            \"https://minio.example.com\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"SftpServer\": {\n      \"type\": \"object\",\n      \"title\": \"SftpServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"pattern\": \"^sftp://.*\",\n          \"description\": \"SFTP URL, starting with `sftp://`\",\n          \"examples\": [\n            \"sftp://123.123.12.123/{model}/*.json\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ]\n    },\n    \"RedshiftServer\": {\n      \"type\": \"object\",\n      \"title\": \"RedshiftServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the host name.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"clusterIdentifier\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's identifier.\",\n          \"examples\": [\n            \"redshift-prod-eu\",\n            \"analytics-cluster\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"An optional string describing the cluster's port.\",\n          \"examples\": [\n            5439\n          ]\n        },\n        \"endpoint\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the cluster's endpoint.\",\n          \"examples\": [\n            \"analytics-cluster.example.eu-west-1.redshift.amazonaws.com:5439/analytics\"\n          ]\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"AzureServer\": {\n      \"type\": \"object\",\n      \"title\": \"AzureServer\",\n      \"properties\": {\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"Path to Azure Blob Storage or Azure Data Lake Storage (ADLS), supports globs. Recommended pattern is 'abfss://<container_name>/<path>'\",\n          \"examples\": [\n            \"abfss://my_container_name/path\",\n            \"abfss://my_container_name/path/*.json\",\n            \"az://my_storage_account_name.blob.core.windows.net/my_container/path/*.parquet\",\n            \"abfss://my_storage_account_name.dfs.core.windows.net/my_container_name/path/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"parquet\",\n            \"delta\",\n            \"json\",\n            \"csv\"\n          ],\n          \"description\": \"File format.\"\n        },\n        \"delimiter\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"new_line\",\n            \"array\"\n          ],\n          \"description\": \"Only for format = json. How multiple json documents are delimited within one file\"\n        }\n      },\n      \"required\": [\n        \"location\",\n        \"format\"\n      ]\n    },\n    \"SqlserverServer\": {\n      \"type\": \"object\",\n      \"title\": \"SqlserverServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\",\n          \"default\": 1433,\n          \"examples\": [\n            1433\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"database\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"dbo\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"SnowflakeServer\": {\n      \"type\": \"object\",\n      \"title\": \"SnowflakeServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"An optional string describing the server.\"\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"DatabricksServer\": {\n      \"type\": \"object\",\n      \"title\": \"DatabricksServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Databricks host\",\n          \"examples\": [\n            \"dbc-abcdefgh-1234.cloud.databricks.com\"\n          ]\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Hive or Unity catalog\"\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema name in the catalog\"\n        }\n      },\n      \"required\": [\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"DataframeServer\": {\n      \"type\": \"object\",\n      \"title\": \"DataframeServer\",\n      \"required\": [\n        \"type\"\n      ]\n    },\n    \"GlueServer\": {\n      \"type\": \"object\",\n      \"title\": \"GlueServer\",\n      \"properties\": {\n        \"account\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue account\",\n          \"examples\": [\n            \"1234-5678-9012\"\n          ]\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The AWS Glue database name\",\n          \"examples\": [\n            \"my_database\"\n          ]\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"format\": \"uri\",\n          \"description\": \"The AWS S3 path. Must be in the form of a URL.\",\n          \"examples\": [\n            \"s3://datacontract-example-orders-latest/data/{model}\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the files\",\n          \"examples\": [\n            \"parquet\",\n            \"csv\",\n            \"json\",\n            \"delta\"\n          ]\n        }\n      },\n      \"required\": [\n        \"account\",\n        \"database\"\n      ]\n    },\n    \"PostgresServer\": {\n      \"type\": \"object\",\n      \"title\": \"PostgresServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"public\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\",\n        \"schema\"\n      ]\n    },\n    \"OracleServer\": {\n      \"type\": \"object\",\n      \"title\": \"OracleServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the oracle server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the oracle server.\",\n          \"examples\": [\n            1523\n          ]\n        },\n        \"serviceName\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the service.\",\n          \"examples\": [\n            \"service\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"serviceName\"\n      ]\n    },\n    \"KafkaServer\": {\n      \"type\": \"object\",\n      \"title\": \"KafkaServer\",\n      \"description\": \"Kafka Server\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The bootstrap server of the kafka cluster.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the message. Examples: json, avro, protobuf.\",\n          \"default\": \"json\"\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"topic\"\n      ]\n    },\n    \"PubSubServer\": {\n      \"type\": \"object\",\n      \"title\": \"PubSubServer\",\n      \"properties\": {\n        \"project\": {\n          \"type\": \"string\",\n          \"description\": \"The GCP project name.\"\n        },\n        \"topic\": {\n          \"type\": \"string\",\n          \"description\": \"The topic name.\"\n        }\n      },\n      \"required\": [\n        \"project\",\n        \"topic\"\n      ]\n    },\n    \"KinesisDataStreamsServer\": {\n      \"type\": \"object\",\n      \"title\": \"KinesisDataStreamsServer\",\n      \"description\": \"Kinesis Data Streams Server\",\n      \"properties\": {\n        \"stream\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the Kinesis data stream.\"\n        },\n        \"region\": {\n          \"type\": \"string\",\n          \"description\": \"AWS region.\",\n          \"examples\": [\n            \"eu-west-1\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the record\",\n          \"examples\": [\n            \"json\",\n            \"avro\",\n            \"protobuf\"\n          ]\n        }\n      },\n      \"required\": [\n        \"stream\"\n      ]\n    },\n    \"TrinoServer\": {\n      \"type\": \"object\",\n      \"title\": \"TrinoServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The Trino host URL.\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The Trino port.\"\n        },\n        \"catalog\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the catalog.\",\n          \"examples\": [\n            \"hive\"\n          ]\n        },\n        \"schema\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the schema in the database.\",\n          \"examples\": [\n            \"my_schema\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"catalog\",\n        \"schema\"\n      ]\n    },\n    \"ClickhouseServer\": {\n      \"type\": \"object\",\n      \"title\": \"ClickhouseServer\",\n      \"properties\": {\n        \"host\": {\n          \"type\": \"string\",\n          \"description\": \"The host to the database server\",\n          \"examples\": [\n            \"localhost\"\n          ]\n        },\n        \"port\": {\n          \"type\": \"integer\",\n          \"description\": \"The port to the database server.\"\n        },\n        \"database\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the database.\",\n          \"examples\": [\n            \"postgres\"\n          ]\n        }\n      },\n      \"required\": [\n        \"host\",\n        \"port\",\n        \"database\"\n      ]\n    },\n    \"LocalServer\": {\n      \"type\": \"object\",\n      \"title\": \"LocalServer\",\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"The relative or absolute path to the data file(s).\",\n          \"examples\": [\n            \"./folder/data.parquet\",\n            \"./folder/*.parquet\"\n          ]\n        },\n        \"format\": {\n          \"type\": \"string\",\n          \"description\": \"The format of the file(s)\",\n          \"examples\": [\n            \"json\",\n            \"parquet\",\n            \"delta\",\n            \"csv\"\n          ]\n        }\n      },\n      \"required\": [\n        \"path\",\n        \"format\"\n      ]\n    },\n    \"Quality\": {\n      \"allOf\": [\n        {\n          \"type\": \"object\",\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The type of quality check\",\n              \"enum\": [\n                \"text\",\n                \"library\",\n                \"sql\",\n                \"custom\"\n              ]\n            },\n            \"description\": {\n              \"type\": \"string\",\n              \"description\": \"A plain text describing the quality attribute in natural language.\"\n            }\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"text\"\n              }\n            }\n          },\n          \"then\": {\n            \"required\": [\n              \"description\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"sql\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"query\": {\n                \"type\": \"string\",\n                \"description\": \"A SQL query that returns a single number to compare with the threshold.\"\n              },\n              \"dialect\": {\n                \"type\": \"string\",\n                \"description\": \"The SQL dialect that is used for the query. Should be compatible to the server.type.\",\n                \"examples\": [\n                  \"athena\",\n                  \"bigquery\",\n                  \"redshift\",\n                  \"snowflake\",\n                  \"trino\",\n                  \"postgres\",\n                  \"oracle\"\n                ]\n              },\n              \"mustBe\": {\n                \"type\": \"number\"\n              },\n              \"mustNotBe\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeGreaterThanOrEqualTo\": {\n                \"type\": \"number\",\n                \"deprecated\": true\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\"\n              },\n              \"mustBeLessThanOrEqualTo\": {\n                \"type\": \"number\",\n                \"deprecated\": true\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"number\"\n                },\n                \"minItems\": 2,\n                \"maxItems\": 2\n              }\n            },\n            \"required\": [\n              \"query\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"library\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"metric\": {\n                \"type\": \"string\",\n                \"description\": \"The DataQualityLibrary metric to use for the quality check.\",\n                \"examples\": [\"nullValues\", \"missingValues\", \"invalidValues\", \"duplicateValues\", \"rowCount\"]\n              },\n              \"rule\": {\n                \"type\": \"string\",\n                \"deprecated\": true,\n                \"description\": \"Deprecated. Use metric instead\"\n              },\n              \"arguments\": {\n                \"type\": \"object\",\n                \"description\": \"Additional metric-specific parameters for the quality check.\",\n                \"additionalProperties\": {\n                  \"type\": [\"string\", \"number\", \"boolean\", \"array\", \"object\"]\n                }\n              },\n              \"mustBe\": {\n                \"description\": \"Must be equal to the value to be valid. When using numbers, it is equivalent to '='.\"\n              },\n              \"mustNotBe\": {\n                \"description\": \"Must not be equal to the value to be valid. When using numbers, it is equivalent to '!='.\"\n              },\n              \"mustBeGreaterThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than the value to be valid. It is equivalent to '>'.\"\n              },\n              \"mustBeGreaterOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be greater than or equal to the value to be valid. It is equivalent to '>='.\"\n              },\n              \"mustBeLessThan\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than the value to be valid. It is equivalent to '<'.\"\n              },\n              \"mustBeLessOrEqualTo\": {\n                \"type\": \"number\",\n                \"description\": \"Must be less than or equal to the value to be valid. It is equivalent to '<='.\"\n              },\n              \"mustBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              },\n              \"mustNotBeBetween\": {\n                \"type\": \"array\",\n                \"description\": \"Must not be between the two numbers to be valid. Smallest number first in the array.\",\n                \"minItems\": 2,\n                \"maxItems\": 2,\n                \"uniqueItems\": true,\n                \"items\": {\n                  \"type\": \"number\"\n                }\n              }\n            },\n            \"required\": [\n              \"metric\"\n            ]\n          }\n        },\n        {\n          \"if\": {\n            \"properties\": {\n              \"type\": {\n                \"const\": \"custom\"\n              }\n            }\n          },\n          \"then\": {\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\",\n                \"description\": \"A plain text describing the quality attribute in natural language.\"\n              },\n              \"engine\": {\n                \"type\": \"string\",\n                \"examples\": [\n                  \"soda\",\n                  \"great-expectations\"\n                ],\n                \"description\": \"The engine used for custom quality checks.\"\n              },\n              \"implementation\": {\n                \"type\": [\n                  \"object\",\n                  \"array\",\n                  \"string\"\n                ],\n                \"description\": \"Engine-specific quality checks and expectations.\"\n              }\n            },\n            \"required\": [\n              \"engine\"\n            ]\n          }\n        }\n      ]\n    },\n    \"Lineage\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"inputFields\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"properties\": {\n              \"namespace\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset namespace\"\n              },\n              \"name\": {\n                \"type\": \"string\",\n                \"description\": \"The input dataset name\"\n              },\n              \"field\": {\n                \"type\": \"string\",\n                \"description\": \"The input field\"\n              },\n              \"transformations\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"type\": {\n                      \"description\": \"The type of the transformation. Allowed values are: DIRECT, INDIRECT\",\n                      \"type\": \"string\"\n                    },\n                    \"subtype\": {\n                      \"type\": \"string\",\n                      \"description\": \"The subtype of the transformation\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"a string representation of the transformation applied\"\n                    },\n                    \"masking\": {\n                      \"type\": \"boolean\",\n                      \"description\": \"is transformation masking the data or not\"\n                    }\n                  },\n                  \"required\": [\n                    \"type\"\n                  ],\n                  \"additionalProperties\": true\n                }\n              }\n            },\n            \"additionalProperties\": true,\n            \"required\": [\n              \"namespace\",\n              \"name\",\n              \"field\"\n            ]\n          }\n        },\n        \"transformationDescription\": {\n          \"type\": \"string\",\n          \"description\": \"a string representation of the transformation applied\",\n          \"deprecated\": true\n        },\n        \"transformationType\": {\n          \"type\": \"string\",\n          \"description\": \"IDENTITY|MASKED reflects a clearly defined behavior. IDENTITY: exact same as input; MASKED: no original data available (like a hash of PII for example)\",\n          \"deprecated\": true\n        }\n      },\n      \"additionalProperties\": true,\n      \"required\": [\n        \"inputFields\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "versions/1.2.1/definition.schema.json",
    "content": "{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"type\": \"object\",\n  \"description\": \"Clear and concise explanations of syntax, semantic, and classification of business objects in a given domain.\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"description\": \"A unique identifier for this definition. Encode the domain into the ID, separated by slashes.\",\n      \"examples\": [\n        \"checkout/order_id\"\n      ]\n    },\n    \"title\": {\n      \"type\": \"string\",\n      \"description\": \"The business name of this definition.\"\n    },\n    \"description\": {\n      \"type\": \"string\",\n      \"description\": \"Clear and concise explanations related to the domain.\"\n    },\n    \"type\": {\n      \"type\": \"string\",\n      \"description\": \"The logical data type.\"\n    },\n    \"minLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be greater than or equal to this value. Applies only to string types.\"\n    },\n    \"maxLength\": {\n      \"type\": \"integer\",\n      \"description\": \"A value must be less than or equal to this value. Applies only to string types.\"\n    },\n    \"format\": {\n      \"type\": \"string\",\n      \"description\": \"Specific format requirements for the value (e.g., 'email', 'uri', 'uuid').\"\n    },\n    \"precision\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        38\n      ],\n      \"description\": \"The maximum number of digits in a number. Only applies to numeric values. Defaults to 38.\"\n    },\n    \"scale\": {\n      \"type\": \"integer\",\n      \"examples\": [\n        0\n      ],\n      \"description\": \"The maximum number of decimal places in a number. Only applies to numeric values. Defaults to 0.\"\n    },\n    \"pattern\": {\n      \"type\": \"string\",\n      \"description\": \"A regular expression pattern the value must match. Applies only to string types.\"\n    },\n    \"example\": {\n      \"type\": \"string\",\n      \"description\": \"An example value for this field.\",\n      \"deprecationMessage\": \"Use the examples field instead.\"\n    },\n    \"examples\": {\n      \"type\": \"array\",\n      \"description\": \"A examples value for this field.\"\n    },\n    \"pii\": {\n      \"type\": \"boolean\",\n      \"description\": \"Indicates if the field contains Personal Identifiable Information (PII).\"\n    },\n    \"classification\": {\n      \"type\": \"string\",\n      \"description\": \"The data class defining the sensitivity level for this field.\"\n    },\n    \"tags\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"description\": \"Custom metadata to provide additional context.\"\n    },\n    \"links\": {\n      \"type\": \"object\",\n      \"description\": \"Links to external resources.\",\n      \"minProperties\": 1,\n      \"propertyNames\": {\n        \"pattern\": \"^[a-zA-Z0-9_-]+$\"\n      },\n      \"additionalProperties\": {\n        \"type\": \"string\",\n        \"title\": \"Link\",\n        \"description\": \"A URL to an external resource.\",\n        \"format\": \"uri\",\n        \"examples\": [\n          \"https://example.com\"\n        ]\n      }\n    }\n  },\n  \"required\": [\n    \"type\"\n  ]\n}\n"
  },
  {
    "path": "workshop.md",
    "content": "# Data Contract Workshop\n\nBring data producers and consumers together to define data contracts in a facilitated workshop.\n\n## Goal\n\nA defined and agreed upon data contract between data producers and consumers.\n\n## Participants\n\n- Facilitator\n  - Neutral moderator and typist\n  - Should know the used data contract formal ([Data Contract Specification](https://datacontract.com) or [ODCS](https://bitol-io.github.io/open-data-contract-standard/latest/)) and its tools well\n  - Get the [authors of the Data Contract Specification](https://datacontract.com/#authors) as facilitators for your workshop.\n- Data producer\n  - Product Owner\n  - Software Engineers\n- Data consumers\n  - Product Owner\n  - Data Engineers / Scientist / Analyst\n\nRecommendation: keep the group small (not more than 5 people)\n\n## Settings\n\n- Show data contract the whole workshop on the screen (projector, screenshare, ...)\n- Facilitator is the typist\n- Facilitator is moderator\n- Data Producer and Data Consumers discuss and give commands to the facilitator\n\n## Guidelines for the Data Contract Specification\n\n### Recommended Order of Completion (Data Contract Specification)\n\n1. Info (get the context)\n2. Examples (example-driven facilitation)\n3. Model (you will spend most of your time here)\n   - Use the [Data Contract CLI](https://cli.datacontract.com) to test the model against the previously created examples:\\\\\n    `datacontract test --examples datacontract.yaml`\n4. Quality\n5. Terms\n6. Servers (if already applicable)\n   - Start with a \"local\" server with actual, real data you downloaded\n   - Use the [Data Contract CLI](https://cli.datacontract.com) to test the model against the actual data on a specific server:\\\\\n    `datacontract test datacontract.yaml`\n   - Switch to the actual remote server, if applicable\n\n### Tooling (Data Contract Specification)\n\n- Open the [starter template](https://datacontract.com/datacontract.init.yaml) in the [Data Contract Editor](https://editor.datacontract.com) and get going. If you lack an experienced facilitator, ignore any validation errors and warnings within the editor.\n- Use the [Data Contract Editor](https://editor.datacontract.com) to share the results of the workshop afterward with the participants and other stakeholders.\n- Use the [Data Contract CLI](https://cli.datacontract.com) to validate the data contract after the workshop.\n- Use the [Data Mesh Manager](https://www.datamesh-manager.com) to publish the data contract and have it in a central place\n\n## Guidelines for ODCS\n\nWe recommend to use the [Excel template](https://github.com/datacontract/open-data-contract-standard-excel-template) for workshops as it is easier to work with in such a setting as it comes with a nice visualization.\n\n### Recommended Order of Completion (ODCS)\n\n1. Fundamentals (get the context)\n   - **[Fill in the fundamentals](https://bitol-io.github.io/open-data-contract-standard/latest/#fundamentals)** consisting of id, name, version, status, and description.\n2. Schema (you will spend most of your time here)\n   - **[Fill in the schemas](https://bitol-io.github.io/open-data-contract-standard/latest/#schema)** (tables) and their properties (columns) along with their name and logicalType as a start in the schema part. \n   - After that, add information like `description`, `classification`, ...\n   - Use tags or customProperties add additional metadata where there is no direct support by ODCS\n3. Quality\n   - **[Add quality checks](https://bitol-io.github.io/open-data-contract-standard/latest/#data-quality)** at the schema or the property level. Start with quality checks of type text first to capture the requirements.\n   - OPTIONAL Conver the text-based requirements into automated sql-based quality checks\n4. SLAs\n   - **[Add SLAs](https://bitol-io.github.io/open-data-contract-standard/latest/#service-level-agreement-sla)** that the data provider guarantees towards all data consumers.\n5. Team & Support\n   - **[Add the team members](https://bitol-io.github.io/open-data-contract-standard/latest/#team)** so that the data consumer knows who is part of the team that owns the data protected by the data contracts.\n   - **[Add a support channel](https://bitol-io.github.io/open-data-contract-standard/latest/#support-and-communication-channels)** so (potential) data consumers know how to get support and reach the data owners.\n6. Servers (if already applicable)\n   - **[Add the server information](https://bitol-io.github.io/open-data-contract-standard/latest/#infrastructure-and-servers)** on where the data is available\n   - Use the [Data Contract CLI](https://cli.datacontract.com) to test the schema against the actual data on a specific server:\\\\\n    `datacontract test datacontract.yaml`\n\n### Tooling (ODCS)\n\n- Use the [Excel template](https://github.com/datacontract/open-data-contract-standard-excel-template) for the workshop\n- Use the [Data Contract CLI](https://cli.datacontract.com) to validate the data contract after the workshop.\n- Use the [Data Mesh Manager](https://www.datamesh-manager.com) to publish the data contract and have it in a central place\n\n## Related\n\n- This data contract workshop could be a followup to a data product design workshop using the [Data Product Canvas](https://www.datamesh-architecture.com/data-product-canvas), making the offered contract at the output port of the designed data product more concrete.\n"
  }
]