From c8f1cbb79e13ce97b50728dbf146fe25c113eb31 Mon Sep 17 00:00:00 2001 From: Lemmy Date: Sun, 18 Jan 2026 00:25:05 -0500 Subject: [PATCH] Wallpaper: new repeat mode for patterns --- Assets/Translations/de.json | 1 + Assets/Translations/en.json | 1 + Assets/Translations/es.json | 1 + Assets/Translations/fr.json | 1 + Assets/Translations/hu.json | 1 + Assets/Translations/ja.json | 1 + Assets/Translations/ku.json | 1 + Assets/Translations/nl.json | 1 + Assets/Translations/pl.json | 1 + Assets/Translations/pt.json | 1 + Assets/Translations/ru.json | 1 + Assets/Translations/tr.json | 1 + Assets/Translations/uk-UA.json | 1 + Assets/Translations/zh-CN.json | 1 + Assets/Translations/zh-TW.json | 1 + Services/UI/WallpaperService.qml | 5 +++++ Shaders/frag/wp_disc.frag | 26 +++++++++++++++++++------- Shaders/frag/wp_fade.frag | 26 +++++++++++++++++++------- Shaders/frag/wp_stripes.frag | 26 +++++++++++++++++++------- Shaders/frag/wp_wipe.frag | 26 +++++++++++++++++++------- Shaders/qsb/wp_disc.frag.qsb | Bin 5816 -> 6135 bytes Shaders/qsb/wp_fade.frag.qsb | Bin 4744 -> 5047 bytes Shaders/qsb/wp_stripes.frag.qsb | Bin 8441 -> 8774 bytes Shaders/qsb/wp_wipe.frag.qsb | Bin 5821 -> 6153 bytes 24 files changed, 96 insertions(+), 28 deletions(-) diff --git a/Assets/Translations/de.json b/Assets/Translations/de.json index a260abe79..de616d3d3 100644 --- a/Assets/Translations/de.json +++ b/Assets/Translations/de.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Zuschneiden (Füllen)", "fit": "Einpassen (Beibehalten)", + "repeat": "Wiederholen (Kachel)", "stretch": "Strecken" }, "no-match": "Keine Übereinstimmung gefunden.", diff --git a/Assets/Translations/en.json b/Assets/Translations/en.json index 170e19428..3ec109b0d 100644 --- a/Assets/Translations/en.json +++ b/Assets/Translations/en.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Crop (Fill)", "fit": "Fit (Contain)", + "repeat": "Repeat (Tile)", "stretch": "Stretch" }, "no-match": "No match found.", diff --git a/Assets/Translations/es.json b/Assets/Translations/es.json index 94b1c34f2..02bdad46e 100644 --- a/Assets/Translations/es.json +++ b/Assets/Translations/es.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Recortar (Rellenar)", "fit": "Ajustar (Contener)", + "repeat": "Repetir (Mosaico)", "stretch": "Estirar" }, "no-match": "No se encontraron coincidencias.", diff --git a/Assets/Translations/fr.json b/Assets/Translations/fr.json index 9a0f76480..841748e77 100644 --- a/Assets/Translations/fr.json +++ b/Assets/Translations/fr.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Recadrer (Remplir)", "fit": "Ajuster (Contenir)", + "repeat": "Répéter (Mosaïque)", "stretch": "Étirer" }, "no-match": "Aucun résultat trouvé.", diff --git a/Assets/Translations/hu.json b/Assets/Translations/hu.json index 1dbac0890..a42ceb5fc 100644 --- a/Assets/Translations/hu.json +++ b/Assets/Translations/hu.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Vágás (Kitöltés)", "fit": "Illesztés (Tartalmazás)", + "repeat": "Ismétlés (Mozaik)", "stretch": "Nyújtás" }, "no-match": "Nincs találat.", diff --git a/Assets/Translations/ja.json b/Assets/Translations/ja.json index f595904dd..a91792eb8 100644 --- a/Assets/Translations/ja.json +++ b/Assets/Translations/ja.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "拡大する", "fit": "画面に合わせる", + "repeat": "繰り返し(タイル)", "stretch": "引き伸ばして表示" }, "no-match": "一致する項目がありません。", diff --git a/Assets/Translations/ku.json b/Assets/Translations/ku.json index ae006c519..035405296 100644 --- a/Assets/Translations/ku.json +++ b/Assets/Translations/ku.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Birîn (Dagirtin)", "fit": "Guncav (Tê de)", + "repeat": "Dubarekirin (Tile)", "stretch": "Dirêjkirin" }, "no-match": "Lihevhatin nehat dîtin.", diff --git a/Assets/Translations/nl.json b/Assets/Translations/nl.json index 9257fa917..699e9e52f 100644 --- a/Assets/Translations/nl.json +++ b/Assets/Translations/nl.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Bijsnijden (vullend)", "fit": "Passend (volledig zichtbaar)", + "repeat": "Herhalen (Tegel)", "stretch": "Uitrekken" }, "no-match": "Geen resultaten gevonden.", diff --git a/Assets/Translations/pl.json b/Assets/Translations/pl.json index bc1b67f34..a4f8b3f58 100644 --- a/Assets/Translations/pl.json +++ b/Assets/Translations/pl.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Przytnij (Wypełnij)", "fit": "Dopasuj (Zmieść)", + "repeat": "Powtórz (Kafel)", "stretch": "Rozciągnij" }, "no-match": "Nie znaleziono dopasowania.", diff --git a/Assets/Translations/pt.json b/Assets/Translations/pt.json index c1df4629c..fc85e5621 100644 --- a/Assets/Translations/pt.json +++ b/Assets/Translations/pt.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Cortar (Preencher)", "fit": "Ajustar (Conter)", + "repeat": "Repetir (Mosaico)", "stretch": "Esticar" }, "no-match": "Nenhuma correspondência encontrada.", diff --git a/Assets/Translations/ru.json b/Assets/Translations/ru.json index e791733cf..7c1b54d9a 100644 --- a/Assets/Translations/ru.json +++ b/Assets/Translations/ru.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Обрезать (Заполнить)", "fit": "Подогнать (Вместить)", + "repeat": "Повторить (Замостить)", "stretch": "Растянуть" }, "no-match": "Совпадений не найдено.", diff --git a/Assets/Translations/tr.json b/Assets/Translations/tr.json index c281ec3ca..8a91b75bb 100644 --- a/Assets/Translations/tr.json +++ b/Assets/Translations/tr.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Kırp (Doldur)", "fit": "Sığ (İçer)", + "repeat": "Tekrarla (Döşe)", "stretch": "Ger" }, "no-match": "Eşleşme bulunamadı.", diff --git a/Assets/Translations/uk-UA.json b/Assets/Translations/uk-UA.json index 3d93f55de..5c37c32be 100644 --- a/Assets/Translations/uk-UA.json +++ b/Assets/Translations/uk-UA.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "Обрізати (Заповнити)", "fit": "Вмістити (Вписати)", + "repeat": "Повторити (Плитка)", "stretch": "Розтягнути" }, "no-match": "Збігів не знайдено.", diff --git a/Assets/Translations/zh-CN.json b/Assets/Translations/zh-CN.json index 4f0d51860..348b6ac9a 100644 --- a/Assets/Translations/zh-CN.json +++ b/Assets/Translations/zh-CN.json @@ -1594,6 +1594,7 @@ "fill-modes": { "crop": "裁剪(填充)", "fit": "适应(包含)", + "repeat": "重复(平铺)", "stretch": "拉伸" }, "no-match": "未找到匹配项。", diff --git a/Assets/Translations/zh-TW.json b/Assets/Translations/zh-TW.json index c2df41a2f..41a1b04e7 100644 --- a/Assets/Translations/zh-TW.json +++ b/Assets/Translations/zh-TW.json @@ -1501,6 +1501,7 @@ "fill-modes": { "crop": "裁切 (填滿)", "fit": "調整 (收容)", + "repeat": "重複 (平鋪)", "stretch": "延展" }, "no-match": "沒有相關結果", diff --git a/Services/UI/WallpaperService.qml b/Services/UI/WallpaperService.qml index 5c05cbc21..1d25eec81 100644 --- a/Services/UI/WallpaperService.qml +++ b/Services/UI/WallpaperService.qml @@ -165,6 +165,11 @@ Singleton { "name": I18n.tr("wallpaper.fill-modes.stretch"), "uniform": 3.0 }); + fillModeModel.append({ + "key": "repeat", + "name": I18n.tr("wallpaper.fill-modes.repeat"), + "uniform": 4.0 + }); // Populate transitionsModel with translated names transitionsModel.append({ diff --git a/Shaders/frag/wp_disc.frag b/Shaders/frag/wp_disc.frag index 9bdf0a70c..3add2f138 100644 --- a/Shaders/frag/wp_disc.frag +++ b/Shaders/frag/wp_disc.frag @@ -17,7 +17,7 @@ layout(std140, binding = 0) uniform buf { float aspectRatio; // Width / Height of the screen // Fill mode parameters - float fillMode; // 0=no(center), 1=crop(fill), 2=fit(contain), 3=stretch + float fillMode; // 0=center, 1=crop, 2=fit, 3=stretch, 4=repeat float imageWidth1; // Width of source1 image float imageHeight1; // Height of source1 image float imageWidth2; // Width of source2 image @@ -38,7 +38,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float imageAspect = imgWidth / imgHeight; float screenAspect = ubuf.screenWidth / ubuf.screenHeight; vec2 transformedUV = uv; - + if (ubuf.fillMode < 0.5) { // Mode 0: no (center) - No resize, center image at original size // Convert UV to pixel coordinates, offset, then back to UV in image space @@ -46,7 +46,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { vec2 imageOffset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - vec2(imgWidth, imgHeight)) * 0.5; vec2 imagePixel = screenPixel - imageOffset; transformedUV = imagePixel / vec2(imgWidth, imgHeight); - } + } else if (ubuf.fillMode < 1.5) { // Mode 1: crop (fill/cover) - Fill screen, crop excess (default) float scale = max(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); @@ -59,7 +59,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float scale = min(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); vec2 scaledImageSize = vec2(imgWidth, imgHeight) * scale; vec2 offset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - scaledImageSize) * 0.5; - + // Convert screen UV to pixel coordinates vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); // Adjust for offset and scale @@ -67,9 +67,16 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { // Convert back to UV coordinates in image space transformedUV = imagePixel / vec2(imgWidth, imgHeight); } - // Mode 3: stretch - Use original UV (stretches to fit) - // No transformation needed for stretch mode - + else if (ubuf.fillMode < 3.5) { + // Mode 3: stretch - Use original UV (stretches to fit) + // No transformation needed for stretch mode + } + else { + // Mode 4: repeat (tile) - Tile image at original size + vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); + transformedUV = screenPixel / vec2(imgWidth, imgHeight); + } + return transformedUV; } @@ -83,6 +90,11 @@ vec4 sampleWithFillMode(sampler2D tex, vec2 uv, float imgWidth, float imgHeight, vec2 transformedUV = calculateUV(uv, imgWidth, imgHeight); + // Mode 4 (repeat): use fract() to tile the image + if (ubuf.fillMode > 3.5) { + return texture(tex, fract(transformedUV)); + } + // Check if UV is out of bounds if (transformedUV.x < 0.0 || transformedUV.x > 1.0 || transformedUV.y < 0.0 || transformedUV.y > 1.0) { diff --git a/Shaders/frag/wp_fade.frag b/Shaders/frag/wp_fade.frag index 805798a47..6fbc9a1e1 100644 --- a/Shaders/frag/wp_fade.frag +++ b/Shaders/frag/wp_fade.frag @@ -13,7 +13,7 @@ layout(std140, binding = 0) uniform buf { float progress; // Fill mode parameters - float fillMode; // 0=no(center), 1=crop(fill), 2=fit(contain), 3=stretch + float fillMode; // 0=center, 1=crop, 2=fit, 3=stretch, 4=repeat float imageWidth1; // Width of source1 image float imageHeight1; // Height of source1 image float imageWidth2; // Width of source2 image @@ -34,7 +34,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float imageAspect = imgWidth / imgHeight; float screenAspect = ubuf.screenWidth / ubuf.screenHeight; vec2 transformedUV = uv; - + if (ubuf.fillMode < 0.5) { // Mode 0: no (center) - No resize, center image at original size // Convert UV to pixel coordinates, offset, then back to UV in image space @@ -42,7 +42,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { vec2 imageOffset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - vec2(imgWidth, imgHeight)) * 0.5; vec2 imagePixel = screenPixel - imageOffset; transformedUV = imagePixel / vec2(imgWidth, imgHeight); - } + } else if (ubuf.fillMode < 1.5) { // Mode 1: crop (fill/cover) - Fill screen, crop excess (default) float scale = max(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); @@ -55,7 +55,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float scale = min(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); vec2 scaledImageSize = vec2(imgWidth, imgHeight) * scale; vec2 offset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - scaledImageSize) * 0.5; - + // Convert screen UV to pixel coordinates vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); // Adjust for offset and scale @@ -63,9 +63,16 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { // Convert back to UV coordinates in image space transformedUV = imagePixel / vec2(imgWidth, imgHeight); } - // Mode 3: stretch - Use original UV (stretches to fit) - // No transformation needed for stretch mode - + else if (ubuf.fillMode < 3.5) { + // Mode 3: stretch - Use original UV (stretches to fit) + // No transformation needed for stretch mode + } + else { + // Mode 4: repeat (tile) - Tile image at original size + vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); + transformedUV = screenPixel / vec2(imgWidth, imgHeight); + } + return transformedUV; } @@ -79,6 +86,11 @@ vec4 sampleWithFillMode(sampler2D tex, vec2 uv, float imgWidth, float imgHeight, vec2 transformedUV = calculateUV(uv, imgWidth, imgHeight); + // Mode 4 (repeat): use fract() to tile the image + if (ubuf.fillMode > 3.5) { + return texture(tex, fract(transformedUV)); + } + // Check if UV is out of bounds if (transformedUV.x < 0.0 || transformedUV.x > 1.0 || transformedUV.y < 0.0 || transformedUV.y > 1.0) { diff --git a/Shaders/frag/wp_stripes.frag b/Shaders/frag/wp_stripes.frag index 50a33146e..72e83f56c 100644 --- a/Shaders/frag/wp_stripes.frag +++ b/Shaders/frag/wp_stripes.frag @@ -17,7 +17,7 @@ layout(std140, binding = 0) uniform buf { float aspectRatio; // Width / Height of the screen // Fill mode parameters - float fillMode; // 0=no(center), 1=crop(fill), 2=fit(contain), 3=stretch + float fillMode; // 0=center, 1=crop, 2=fit, 3=stretch, 4=repeat float imageWidth1; // Width of source1 image float imageHeight1; // Height of source1 image float imageWidth2; // Width of source2 image @@ -38,7 +38,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float imageAspect = imgWidth / imgHeight; float screenAspect = ubuf.screenWidth / ubuf.screenHeight; vec2 transformedUV = uv; - + if (ubuf.fillMode < 0.5) { // Mode 0: no (center) - No resize, center image at original size // Convert UV to pixel coordinates, offset, then back to UV in image space @@ -46,7 +46,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { vec2 imageOffset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - vec2(imgWidth, imgHeight)) * 0.5; vec2 imagePixel = screenPixel - imageOffset; transformedUV = imagePixel / vec2(imgWidth, imgHeight); - } + } else if (ubuf.fillMode < 1.5) { // Mode 1: crop (fill/cover) - Fill screen, crop excess (default) float scale = max(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); @@ -59,7 +59,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float scale = min(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); vec2 scaledImageSize = vec2(imgWidth, imgHeight) * scale; vec2 offset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - scaledImageSize) * 0.5; - + // Convert screen UV to pixel coordinates vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); // Adjust for offset and scale @@ -67,9 +67,16 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { // Convert back to UV coordinates in image space transformedUV = imagePixel / vec2(imgWidth, imgHeight); } - // Mode 3: stretch - Use original UV (stretches to fit) - // No transformation needed for stretch mode - + else if (ubuf.fillMode < 3.5) { + // Mode 3: stretch - Use original UV (stretches to fit) + // No transformation needed for stretch mode + } + else { + // Mode 4: repeat (tile) - Tile image at original size + vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); + transformedUV = screenPixel / vec2(imgWidth, imgHeight); + } + return transformedUV; } @@ -83,6 +90,11 @@ vec4 sampleWithFillMode(sampler2D tex, vec2 uv, float imgWidth, float imgHeight, vec2 transformedUV = calculateUV(uv, imgWidth, imgHeight); + // Mode 4 (repeat): use fract() to tile the image + if (ubuf.fillMode > 3.5) { + return texture(tex, fract(transformedUV)); + } + // Check if UV is out of bounds if (transformedUV.x < 0.0 || transformedUV.x > 1.0 || transformedUV.y < 0.0 || transformedUV.y > 1.0) { diff --git a/Shaders/frag/wp_wipe.frag b/Shaders/frag/wp_wipe.frag index 15cd01e90..19ab477a8 100644 --- a/Shaders/frag/wp_wipe.frag +++ b/Shaders/frag/wp_wipe.frag @@ -15,7 +15,7 @@ layout(std140, binding = 0) uniform buf { float smoothness; // Edge smoothness (0.0 to 1.0, 0=sharp, 1=very smooth) // Fill mode parameters - float fillMode; // 0=no(center), 1=crop(fill), 2=fit(contain), 3=stretch + float fillMode; // 0=center, 1=crop, 2=fit, 3=stretch, 4=repeat float imageWidth1; // Width of source1 image float imageHeight1; // Height of source1 image float imageWidth2; // Width of source2 image @@ -36,7 +36,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float imageAspect = imgWidth / imgHeight; float screenAspect = ubuf.screenWidth / ubuf.screenHeight; vec2 transformedUV = uv; - + if (ubuf.fillMode < 0.5) { // Mode 0: no (center) - No resize, center image at original size // Convert UV to pixel coordinates, offset, then back to UV in image space @@ -44,7 +44,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { vec2 imageOffset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - vec2(imgWidth, imgHeight)) * 0.5; vec2 imagePixel = screenPixel - imageOffset; transformedUV = imagePixel / vec2(imgWidth, imgHeight); - } + } else if (ubuf.fillMode < 1.5) { // Mode 1: crop (fill/cover) - Fill screen, crop excess (default) float scale = max(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); @@ -57,7 +57,7 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { float scale = min(ubuf.screenWidth / imgWidth, ubuf.screenHeight / imgHeight); vec2 scaledImageSize = vec2(imgWidth, imgHeight) * scale; vec2 offset = (vec2(ubuf.screenWidth, ubuf.screenHeight) - scaledImageSize) * 0.5; - + // Convert screen UV to pixel coordinates vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); // Adjust for offset and scale @@ -65,9 +65,16 @@ vec2 calculateUV(vec2 uv, float imgWidth, float imgHeight) { // Convert back to UV coordinates in image space transformedUV = imagePixel / vec2(imgWidth, imgHeight); } - // Mode 3: stretch - Use original UV (stretches to fit) - // No transformation needed for stretch mode - + else if (ubuf.fillMode < 3.5) { + // Mode 3: stretch - Use original UV (stretches to fit) + // No transformation needed for stretch mode + } + else { + // Mode 4: repeat (tile) - Tile image at original size + vec2 screenPixel = uv * vec2(ubuf.screenWidth, ubuf.screenHeight); + transformedUV = screenPixel / vec2(imgWidth, imgHeight); + } + return transformedUV; } @@ -81,6 +88,11 @@ vec4 sampleWithFillMode(sampler2D tex, vec2 uv, float imgWidth, float imgHeight, vec2 transformedUV = calculateUV(uv, imgWidth, imgHeight); + // Mode 4 (repeat): use fract() to tile the image + if (ubuf.fillMode > 3.5) { + return texture(tex, fract(transformedUV)); + } + // Check if UV is out of bounds if (transformedUV.x < 0.0 || transformedUV.x > 1.0 || transformedUV.y < 0.0 || transformedUV.y > 1.0) { diff --git a/Shaders/qsb/wp_disc.frag.qsb b/Shaders/qsb/wp_disc.frag.qsb index 24f759416879f2b008a089b10cb1f9fc657d5753..d324e006b9507a864702df10a1fcc5caec0d13e4 100644 GIT binary patch literal 6135 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 J`F~*emx7Ykq?G^w literal 5816 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 C;;OFz diff --git a/Shaders/qsb/wp_fade.frag.qsb b/Shaders/qsb/wp_fade.frag.qsb index 578adbd5bfd8c5bbc22e13f64aee198dbca49479..6778626180e85f94503db798c51626aa5ba48bc2 100644 GIT binary patch literal 5047 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 diff --git a/Shaders/qsb/wp_stripes.frag.qsb b/Shaders/qsb/wp_stripes.frag.qsb index 8b8cfdcc4ada3cd3f6c880e9ccdd862cd076b0c1..3265b2b5d45bf36a158f046545044b11f5fb2546 100644 GIT binary patch literal 8774 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 HMg?i#NP^xd