From 9c9691ff272d1e85e631b4187e70ee76b537ea34 Mon Sep 17 00:00:00 2001 From: Axel Lehmann Date: Mon, 28 Sep 2020 13:31:47 +0200 Subject: [PATCH] Add project-gantry --- content/post/project-gantry.md | 426 ++++++++++++++++++ .../project_gantry/broccoli-deployment.png | Bin 0 -> 36028 bytes .../independent-pipelines-matrix.png | Bin 0 -> 5501 bytes .../project_gantry/independent-pipelines.png | Bin 0 -> 9150 bytes static/img/project_gantry/lehmann.png | Bin 0 -> 1516 bytes static/img/project_gantry/qlever-e2e.png | Bin 0 -> 14743 bytes .../project_gantry/qlever-inplace-rebuild.png | Bin 0 -> 30703 bytes 7 files changed, 426 insertions(+) create mode 100644 content/post/project-gantry.md create mode 100644 static/img/project_gantry/broccoli-deployment.png create mode 100644 static/img/project_gantry/independent-pipelines-matrix.png create mode 100644 static/img/project_gantry/independent-pipelines.png create mode 100644 static/img/project_gantry/lehmann.png create mode 100644 static/img/project_gantry/qlever-e2e.png create mode 100644 static/img/project_gantry/qlever-inplace-rebuild.png diff --git a/content/post/project-gantry.md b/content/post/project-gantry.md new file mode 100644 index 0000000..1ab1a42 --- /dev/null +++ b/content/post/project-gantry.md @@ -0,0 +1,426 @@ +--- +title: "Gantry" +date: 2020-09-26T20:00:00+02:00 +author: "Axel Lehmann" +authorAvatar: "img/project_gantry/lehmann.png" +tags: [gantry, wharfer, docker, docker-compose] +categories: [project] +image: "img/project_gantry/independent-pipelines-matrix.png" +draft: false +--- +Gantry allows [`docker-compose`](https://docs.docker.com/compose/)-like deployments with [`wharfer`](https://github.com/ad-freiburg/wharfer). +`wharfer` is a replacement for the `docker` executable used and maintained by the Chair of Algorithms and Data Structures. +Additionally, `gantry` allows executing containers in a sequential order. +Within this sequential order, `gantry` tries to execute as many containers in parallel as possible. +This minimizes overall execution time but keeps results deterministic. + + + +# Content +1. [Introduction](#introduction) +1. [Features](#features) + 1. [docker-compose compatibility](#docker-compose-compatibility) + 1. [Pipelines](#pipelines) + 1. [gantry.env.yml](gantry-env-yml) + 1. [Preprocessor](#preprocessor) + 1. [DOT graph](#dot-graph) +1. [Implementation](#implementation) + 1. [Environment calculation](#environment-calculation) + 1. [Pipeline generation](#pipeline-generation) + 1. [Pipeline execution](#pipeline-execution) +1. [Source code, executables, and more](#source-code-executables-and-more) + +# Introduction + +[`wharfer`](https://github.com/ad-freiburg/wharfer) is a drop-in replacement for the virtualization software Docker with additional security features. +To allow [`docker-compose`](https://docs.docker.com/compose/)-like deployments for wharfer we developed [`gantry`](https://github.com/ad-freiburg/gantry). + +Docker deployments consist of multiple interacting containers, e.g. a database backend and a website frontend. +docker-compose starts all these containers and their dependencies at the same time. +gantry provides the same basic functionality while providing access to the security features of wharfer. +Besides this basic docker-compose compatibility, gantry introduces the concept of *blocking dependencies*. +A blocking dependency must finish execution before the dependent container starts. +This allows the creation of *data pipelines*. +The order of execution inside a pipeline is defined by these dependencies: if \\(B\\) requires \\(A\\), gantry only starts \\(B\\) after \\(A\\) has exited. + +To achieve the same order of execution with docker-compose multiple solutions exists: + +1. Combine \\(A\\) and \\(B\\) in a single container +1. Mount a shared volume between the containers and let \\(B\\) listen for file changes by \\(A\\). +1. Synchronize \\(A\\) and \\(B\\) by using network-based solutions. + +All of these solutions require additional synchronization (shared volume (2) or port (3)) or loss of separation (combining \\(A\\) and \\(B\\) inside a single container). +In particular, (1) greatly reduces composability as \\(A\\) and \\(B\\) are now a single container \\(AB\\). +To use \\(B\\) with \\(C\\) instead of \\(A\\), \\(B\\) must be duplocated in a new container \\(CB\\). + +# Features + +The `docker-compose` compatibility provided by `gantry` and *Pipelines* are the main features of `gantry`. +Additional features not available in `docker-compose` are provided: + +* additional global and per-container configuration through `gantry.env.yml` +* a preprocessor for `gantry.yml` (which are extended `docker-compose.yml` files) +* `gantry dot` to dump *deployments* and *pipelines* as dot-files. + +## `docker-compose` compatibility +In general, a deployment consists of multiple containers which interact and are managed together. +`docker-compose` starts *all* requested containers and their dependencies at the same time. +Deployments are used to manage multiple parts of a system e.g. a database and the frontend of a website. +Most containers in a deployment provide at least one service to other containers e.g. a database storing contents of a website. +Therefore, *containers* are referred to as *services* inside the `docker-compose.yml`. +`gantry` uses the [services](https://docs.docker.com/compose/compose-file/#service-configuration-reference) keyword and is compatible with basic `docker-compose.yml` files in both [version 2](https://docs.docker.com/compose/compose-file/compose-file-v2/), and [version 3](https://docs.docker.com/compose/compose-file/). + +A WordPress blog can be setup as shown in the [docker-compose example](hhttps://github.com/ad-freiburg/gantry/tree/master/examples/docker-compose) which uses the following `docker-compose.yml`: + +``` +version: '3.3' + +services: + db: + image: mysql:5.7 + volumes: + - ./data:/var/lib/mysql + restart: always + environment: + MYSQL_ROOT_PASSWORD: somewordpress + MYSQL_DATABASE: wordpress + MYSQL_USER: wordpress + MYSQL_PASSWORD: wordpress + + wordpress: + depends_on: + - db + image: wordpress:latest + ports: + - "8000:80" + restart: always + environment: + - WORDPRESS_DB_HOST=db:3306 + - WORDPRESS_DB_USER=wordpress + - WORDPRESS_DB_PASSWORD=wordpress +``` + +`gantry` is not only able to use existing images, but can also be used to create new images using the [build](https://docs.docker.com/compose/compose-file/#build) keyword. +To allow for multiple container definitions multiple additional keywords are supported. +[context](https://docs.docker.com/compose/compose-file/#context) allows to build different directories. +[dockerfile](https://docs.docker.com/compose/compose-file/#dockerfile) allows to build Dockerfiles with different names. +[args](https://docs.docker.com/compose/compose-file/#args) can be used to provide build-time arguments which can be used inside Dockerfiles. + +### Supported `docker-compose` keywords + +In this section every keyword is linked to the official documentation for docker-compose. Everything should work as described there, exceptions are explicitly stated besides the keyword. + +* [`build`](https://docs.docker.com/compose/compose-file/#build) + * [`context`](https://docs.docker.com/compose/compose-file/#context) + * [`dockerfile`](https://docs.docker.com/compose/compose-file/#dockerfile) + * [`args`](https://docs.docker.com/compose/compose-file/#args) +* [`command`](https://docs.docker.com/compose/compose-file/#command) +* [`depends_on`](https://docs.docker.com/compose/compose-file/#depends_on) +* [`entrypoint`](https://docs.docker.com/compose/compose-file/#entrypoint) +* [`image`](https://docs.docker.com/compose/compose-file/#image) +* [`ports`](https://docs.docker.com/compose/compose-file/#ports), only the short syntax is supported: + +``` + ports: + - "8000:80" +``` + +* [`restart`](https://docs.docker.com/compose/compose-file/#restart) +* [`volumes`](https://docs.docker.com/compose/compose-file/#volumes), only the short syntax is supported: + +``` + volumes: + - ./data:/var/lib/mysql +``` + +### Supported `docker-compose` commands + +* `build`
+ Builds all images +* `down`
+ Stop and remove containers, and networks created by `up` +* `kill`
+ Force stop containers +* `list`
+ Lists all defined services and steps +* `logs`
+ View output from containers. +* `rm`
+ Removes stopped containers +* `pull`
+ Pulls images for services/steps defined in a Compose file, but does not + start the containers. + +### Deployment + +`gantry` can be used for `docker-compose`-like deployments of different scales. +Small deployments like the WordPress example in the introduction can be managed as well as deployments consisting of multiple *services*. +The [Broccoli](http://broccoli.cs.uni-freiburg.de/demos/BroccoliFreebase/), [Yago](http://broccoli.cs.uni-freiburg.de/BroccoliYago/), and [Freebase Easy](http://freebase-easy.cs.uni-freiburg.de/browse/) demos are all powered by a single `docker-compose.yml` and `gantry`. + +![Broccoli Deployment](/img/project_gantry/broccoli-deployment.png) + +The *proxy service* exposes the relevant ports to the host, all other services remain in the separate network without the need to expose ports on their own. +This keeps the backends from being exposed to the world and other deployments, as each deployment creates its own network. +This network isolation is a basic feature of `docker-compose`. +More complex networking, e.g. [multiple networks](https://docs.docker.com/compose/networking/#specify-custom-networks) in one deployment, is currently not supported by `gantry`. + +## Pipelines + +The biggest addition is the introduction of *blocking dependencies*. +A blocking dependency specifies for a given container which other containers have to finish before the execution of the given container starts. +Such a sequence of multiple containers creates a *pipeline* where data moves through them in a predefined order. +Inside the *pipeline* data is manipulated container after container i.e. step by step. + +`gantry` introduces the `steps` keyword which is used on the same hierarchy level as the `services` keyword inside `docker-compose.yml` files. +Each step is required to exit before its dependents are started, thus a sequential execution order is guaranteed. +To explicitly mark this sequential nature, the `after` keyword is used in *steps* instead of the `depends_on` as in *services*. +Both lists are merged when calculating the dependencies for each *step* or *service*. + +These new keywords stop `docker-compose` from executing a `docker-compose.yml`. +This breaking behavior ensures that sequential pipelines are not run in the non-sequential manner `docker-compose` would use. +To better mark a file using these keywords the name `gantry.yml` is used. + +A pipeline can make use of both *services* and *steps*. +As an example, the end-to-end tests of [QLever](https://github.com/ad-freiburg/QLever), a *Super-Efficient SPARQL Search Engine* developed by the Chair of Algorithms and Data Structures, can be run using a [`gantry.yml`](https://github.com/ad-freiburg/gantry/tree/master/examples/qlever_e2e). + +![QLever End-to-End Test Pipeline](/img/project_gantry/qlever-e2e.png) + +Boxes represent `gantry` *steps* while the oval *qlever* represents a `docker-compose` *service*. +The *wait_for_qlever* step shows the problem which `gantry` tries to solve for sequential *steps*. +*qlever* is the backend service needed by *run_queries* and therefore, must be kept alive. +If *run_queries* would be executed at the same time it would always fail as the backend is not available immediately. +The *wait_for_qlever* step encapsulates the polling for the backend and provides a reusable way to wait for a QLever instance. +This is the only instance of explicit waiting required in the whole pipeline by using `gantry`. Using `docker-compose` explicit waiting would be necessary in each step. + +As services started by `docker-compose` remain running, the option to handle the life cycle of services is introduced inside an additional `gantry.env.yml` file. + +### Parallelization + +`gantry` tries to execute as many *steps* and *services* in parallel as possible. + +![independent pipelines](/img/project_gantry/independent-pipelines.png) + +Both pipelines *a* and *b* will execute their steps *0*, *1*, and *2* in order, but neither will *a1* wait for *b0* nor *b2* for *a1*. + +The execution order is determined by topological sorting of the dependency graph. +Cycle detection is used to avoid unsatisfiable execution orders. +If a cycle is detected the execution is aborted. +This is required as it is not clear which step should be executed first. +Each *step* requests to be executed after another *step* and following the cyclical dependencies after itself. +\\(y\\) is dependant on \\(x\\) will be denoted as \\( x \rightarrow y\\). +Given $$ a \rightarrow b, b \rightarrow a$$ it is impossible to know if execution should start with either \\(a\\) or \\(b\\) as well as whether \\(a\\) or \\(b\\) should ignore the other to be able to start execution. + +The need to ignore a dependency arises from the transitivity of preconditions. + +\begin{align} +a \rightarrow b, b \rightarrow a +& \Rightarrow a \rightarrow b \rightarrow a, b \rightarrow a \rightarrow b \newline +& \Rightarrow a \rightarrow a, b \rightarrow b +\end{align} + +Since \\(a\\) requires that \\(b\\) finishes successfully in order for it to be executed, and \\(b\\) requires the same from \\(a\\), \\(a\\) can only be executed after \\(a\\) finished successfully, the same holds for \\(b\\). +This implies that no step can be started before it finishes. + +## gantry.env.yml + +The `gantry.env.yml` file allows global configuration as well as meta-configuration of each defined *step* or *service*. + +### Supported keywords + +* `projectname`
+ Overrides the calculated project name based on the folder containing the executed `gantry.yml`/`docker-compose.yml` file +* `substitutions`
+ Key-Value mapping of values to expand variables (`${VAR}`). + Can be accessed and altered by the preprocessor. + Setting them in the calling environment can be used to replace the initially defined values as well providing them with `-e` flag, e.g. `-e FOO=bar`. +* `tempdir`, `string`, default: `/tmp`
+ All temporary directories created using the preprocessor will use this as base. +* `tempdir_no_autoclean`, `bool`, default: `false`
+ If set to `true` temporary directories created by the preprocessor will not be deleted by `gantry` and can be examined. +* `services` and `steps`
+ List of meta-data for *services* and *steps*, follows the same structure as in `gantry.yml`/`docker-compose.yml`. + +#### Supported keywords in *services* and *steps* + +* `keep_alive`, default: `yes`
+ Possible values are `yes`, `no`, and `replace`. `replace` and `yes` keep *services* running until the pipeline is run again. + `yes` stops the *service* as soon as the pipeline execution starts. + `replace` waits until the *service* is explicitly started. + `no` stops the *service* as the pipeline finishes execution. +* `ignore`, `bool`, default: `false`
+ If a *step* or *service* is marked as ignored, it will not be considered during planning or execution. + It is also removed from any `depends_on` or `after` lists.
+ Using the `-i` command-line flag steps can be marked as ignored too. + ([Example](https://github.com/ad-freiburg/gantry/tree/master/examples/partial_execution), [Example](https://github.com/ad-freiburg/gantry/tree/master/examples/selective_run)) +* `ignore_failure`, `bool`, default `false`
+ The execution of a pipeline is stopped as soon as a *step* exits with a non-zero exit code. + Setting `ignore_failure: true` allows the pipeline to continue even if the *step* or *service* exits with a non-zero exit code. + ([Example](https://github.com/ad-freiburg/gantry/tree/master/examples/diamond_ignore_failure)) +* `exit_code_override`, `int`, default `0`
+ If set to a non-zero value the exit code on failure will be replaced with the specified value. + Non-zero exit codes propagate through gantry and will be returned to the calling shell. + This can be used with scripts handling the exit code of `gantry` itself. + ([Example](https://github.com/ad-freiburg/gantry/tree/master/examples/diamond_exit_code)) +* `stdout`, `stderr` + * `handler`, `string`, default: ``
+ Allows to redirect the `stdout` or `stderr` of the *service* or *step*. + The default prints to `stdout`/`stderr`. + `file` will redirect the output into the `path`. + `both` redirects and prints the output. + `discard` prints nothing. + * `path`, `string`, default:
+ Optional for default handler and `discard`, required for `both` and `file` + +#### Possible usage of `keep_alive` + +The `keep_alive` flag allows replacing running services with minimal downtime. +Combining the following pipeline and `gantry.env.yml` enables the construction of a new search index for QLever and running basic tests on it, using the *new* service. + +![QLever in-place rebuild.](/img/project_gantry/qlever-inplace-rebuild.png) + +``` +services: + current: + keep_alive: "replace" + new: + keep_alive: "no" +``` + +This keeps the *current* service running until the tests on *new* have finished successfully and the index has been moved to its destination to be used by *current*. +Only then *current* is stopped and immediately restarted with the new search index. +The final *test_current* warms the cache of the *current* instance, at the end of the pipeline the *new* instance will be shut down. + +## Preprocessor + +As mentioned in previous sections, gantry includes a preprocessor handling *variable expansion* (`${X}`), *preprocessor statements* (`#!`), and *comments* (`#`). +If an error occurs during preprocessing no *steps* or *services* will be started. + +All preprocessor statements are lines prefixed by `#!`. +Whitespaces in front of `#!` are ignored as well as directly after `#!`. +This ensures that the following lines are processed by the preprocessor: +``` +#! SET_IF_EMPTY ${A} X + #! SET_IF_EMPTY ${B} Y +#!SET_IF_EMTPY ${C} Z +``` + +The preprocessor can be applied to a single file, printing the resulting file to `stdout` using `gantry preprocessor apply `. + +### Preprocessor statements +The list of currently implemented preprocessor statements can be viewed using `gantry preprocessor statements`. +At the time of writing this post the following statements are implemented: + +* `CHECK_IF_DIR_EXISTS ${X}`, `check_if_dir_exists ${X}`
+ Aborts the execution if `X` does not hold the path of a valid directory. +* `SET_IF_EMTPTY ${X} Y`,`set_if_empty ${X} Y`
+ Sets variable `X` to `Y` iff `X` is empty or undefined. +* `TEMP_DIR_IF_EMPTY ${X}`,`temp_dir_if_empty ${X}`, `mktemp ${X}`
+ If `X` is empty a temporary directory is created and the path stored in `X`. + This uses the `tempdir` `gantry.env.yml` setting to determine the base and will be automatically deleted unless `tempdir_no_autoclean` is set to `true`. + +## DOT graph + +Using `gantry dot` the steps and services defined in the `docker-compose.yml`/`gantry.yml` will be stored as a directed graph in the `DOT` format. +The resulting `gantry.dot` file can be translated into images using the `dot` command-line tool from [Graphviz](https://graphviz.org/). +These images allow to see the explicit execution order as well as seeing how ignoring steps will influence the order and amount of executed *steps* and *services*. + +All graph-images in the [examples](https://github.com/ad-freiburg/gantry/tree/master/examples) and this blog entry are created using both `dot` and `gantry dot`. + +The direction of the arrows follows the order of execution, but can be reversed to point to dependencies using `--arrow-to-precondition`. + +# Implementation + +The execution of most (sub)commands can be divided into three parts: + +1. Environment calculation +1. Pipeline generation +1. Pipeline execution + +Some commands like `gantry dot` either skip or replace the *Pipeline execution* with own logic. + +## Environment calculation + +The environment for executing *steps* and *services* can be modified through different mechanisms. + +Using `gantry.env.yml` defaults can be set, e.g. marking a *step* as ignored. +Substitutions defined in the file will be merged and replaced by the calling environment. +Additional command-line arguments are evaluated, which can change the environment (`-e`), mark additional steps as ignored (`-i`) and explicitly select subtrees (through explicitly naming containers to execute). + +The execution is aborted if a *step* or *service* with conflicting values for *selected* to run and being *ignored* is encountered. + +## Pipeline generation + +To illustrate the pipeline generation a simple example with *two* independent pipelines will be used. + +``` +steps: + a: + ... + b: + ... + c: + ... + after: a, b + x: + ... + y: + ... + after: x + z: + ... + after: y +``` + +The dependencies can be written as follows, where \\( \rightarrow \\) denotes the flow of execution. + +$$ a \rightarrow c, b \rightarrow c $$ +$$ x \rightarrow y, y \rightarrow z $$ + +The cycle detection and topological order are determined using a single run of a slightly modified implementation of [Tarjan's strongly connected components algorithm](https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm). +As soon as a missing dependency is encountered the execution of Tarjan's algorithm is aborted and no dependency graph is generated. + +If all dependencies are present, the graph is returned as a list of strong components. +These strong components are either a *single vertex* or a *cycle*. +If a *cycle* is found the execution stops listing all vertices contained in the *cycle*. +This cycle-detection simply checks that each strong component only consists of a *single vertex*. +The result must not be unique as the order of *a* and *b* does not change anything for the dependency graph, thus the following results are equal: + +$$ (\\\{a\\\}, \\\{b\\\}, \\\{c\\\}, \\\{x\\\}, \\\{y\\\}, \\\{z\\\}) $$ +$$ (\\\{b\\\}, \\\{a\\\}, \\\{c\\\}, \\\{x\\\}, \\\{y\\\}, \\\{z\\\}) $$ + +Starting at the right-most entry the components are then reordered into independent pipelines. +This is possible as the result of Tarjan's algorithm groups connected components into nearby lists. +Connectivity is evaluated by starting at the highest index and adding steps to the pipeline until all dependencies are fulfilled. +As soon as a non-connected vertex is encountered one pipeline is complete and a new pipeline is started. +The execution order inside a pipeline is achieved by prepending each encountered step to the current list of steps. +Thus resulting in one of the following: + +$$ \\\{(a, b, c), (x, y, z)\\\} $$ +$$ \\\{(b, a, c), (x, y, z)\\\} $$ + +The order of the pipelines is not relevant as both \\((a, b, c)\\) and \\((x, y, z)\\) will be executed at the same time. +Only the order inside each pipeline is relevant for the creation of the explicit dependencies. + +## Pipeline execution + +`gantry` is written in [Go](https://golang.org/) and makes heavy use of [Goroutines](https://golang.org/doc/effective_go.html?#goroutines), [WaitGroups](https://golang.org/pkg/sync/#WaitGroup), and [Channels](https://golang.org/doc/effective_go.html?#channels) in the execution of the pipelines. + +A single *WaitGroup* is defined to keep `gantry` alive and running until all steps have finished. +A single *abort* channel is defined, which is used to signal each container to skip execution after an error occurred. +A single *run* channel is defined and added to each step as a additional precondition. +This ensures that the execution is only started after all container and dependencies are explicitly instantiated. + +For each container a channel is defined, which is added to all dependent containers as precondition. + +Each container is then started as a *goroutine* which waits until all *preconditions* are satisfied, if the *abort* channel signals to abort, execution will be skipped. +This ensures that no container can run out-of-order and allows for multiple steps to be executed simultaneously. +After a step finishes it can signals on the *abort* channel, if the underlying container finishes with a non-zero exit-code. +If the step is instructed to ignore the failure through the `ignore_failure` flag, the error is ignored by the other containers. +Finally, the containers own channel is closed, allowing the dependents to progress their dependency checks. + +After all containers are marked as finished, gantry can proceed to clean-up and exit. + +# Source code, executables, and more +The source code, executables, and more examples can be found on [GitHub](https://github.com/ad-freiburg/gantry) and are licensed under the Apache License 2.0. +If you miss a feature or found a bug, feel free to open a pull request. + diff --git a/static/img/project_gantry/broccoli-deployment.png b/static/img/project_gantry/broccoli-deployment.png new file mode 100644 index 0000000000000000000000000000000000000000..b4965424fbd42e2bae11211e696f0539d4b9a7db GIT binary patch literal 36028 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 literal 0 HcmV?d00001 diff --git a/static/img/project_gantry/independent-pipelines-matrix.png b/static/img/project_gantry/independent-pipelines-matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..88f4a8956d774c32f117f973a32debe5763e693c GIT binary patch literal 5501 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 b=-(H}EB;Z?IY-*07Xb8b8tYc+I6nFtyfqI0 literal 0 HcmV?d00001 diff --git a/static/img/project_gantry/independent-pipelines.png b/static/img/project_gantry/independent-pipelines.png new file mode 100644 index 0000000000000000000000000000000000000000..fe45b60ccde11f3b3a6d541d5df5e03cbed1b52f GIT binary patch literal 9150 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 literal 0 HcmV?d00001 diff --git a/static/img/project_gantry/lehmann.png b/static/img/project_gantry/lehmann.png new file mode 100644 index 0000000000000000000000000000000000000000..d4119b78fa56ba3da3384612ca6f4ab9fff8d2a7 GIT binary patch literal 1516 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 literal 0 HcmV?d00001 diff --git a/static/img/project_gantry/qlever-inplace-rebuild.png b/static/img/project_gantry/qlever-inplace-rebuild.png new file mode 100644 index 0000000000000000000000000000000000000000..97be1459b154ec5d431cfe777959416c600b8798 GIT binary patch literal 30703 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