Compare commits

..
Author SHA1 Message Date
Ivan Avdeev b4cd946486 render: apply material changes 2026-07-09 11:45:11 -04:00
Ivan Avdeev b44f0f266b render: update sprite tests to cover texgamma loading changes
not sure if correct, but makes tests pass
2026-07-09 11:41:27 -04:00
Ivan Avdeev 8d5fc4eaae fixup podman woes on some machines 2026-04-22 08:19:20 -04:00
Ivan Avdeev 546f96b6d0 install the latest vulkan sdk from tarball
lunarg no longer updates ubuntu packages, and those are stale
2026-04-22 08:18:46 -04:00
Ivan Avdeev 770c17349d pass local timezone to the test 2026-04-22 08:18:24 -04:00
Ivan Avdeev 3aeae2e81e fixup building imagecompare inside a container 2026-04-12 15:10:27 -04:00
Ivan Avdeev 75fa9cae18 pass extra metadata (repo refs, timestamps) to test results 2026-04-09 15:24:54 -04:00
Ivan Avdeev c6edc9f3fe embed steam Half-Life data into the image itself
allows also adding hlsdk libs to the image
makes it easier to build, manage, and run
2026-04-08 01:17:49 -04:00
Ivan Avdeev eecca09544 add initial hermetic container build-and-test support 2026-04-07 17:51:32 -04:00
Ivan Avdeev 4a1a79f206 lookup imagemagick tool, and loudly fail if it doesn't work 2026-04-05 13:04:54 -04:00
Ivan Avdeev 2f30db6a52 update gold images, remove prev frame leaks
Follows commit b53e7b1d in main xash3d-fwgs repo.
2025-03-04 12:19:43 -05:00
Ivan Avdeev b857a04c4a update rendering cvars and gold images accordingly 2025-02-10 13:17:15 -05:00
Ivan Avdeev c70b78a347 update glitched gold images 2025-02-10 12:44:54 -05:00
Ivan Avdeev 72facfb61e explicitly use xash dir for libraries path 2025-02-10 12:44:28 -05:00
Ivan Avdeev 8c3aa04318 update gold images for latest denoiser
NOTE that this gold is not fully correct itself. It has following
issues:
- indirect channel is incorrect
- missing indirect diffuse
- missing specular fresnel

See https://github.com/w23/xash3d-fwgs/issues/759

Committing it as a new gold for the sole reason of detecting changes
compared to current vulkan branch state. More correct gold will be
submitted when the issues above are fixed.

Also, changes rendertest script to use the new denoiser, and remove some
extra text messages things from the frame.
2025-02-06 14:05:01 -05:00
Ivan Avdeev 32acc7d835 write engine logs, and also json report
also, RADV_PERFTEST=rt is no longer needed, mesa enables rt by default
now
2025-02-06 14:03:30 -05:00
Ivan Avdeev 9d4dfa472a do not write flip gifs, it's handled by web stuff now 2025-02-06 14:02:48 -05:00
Ivan Avdeev c7970f9952 improve status reporting 2025-02-06 14:00:08 -05:00
Ivan Avdeev 6e31a068ee use magick instead of legacy convert 2025-02-06 13:59:02 -05:00
Ivan Avdeev 6995a4cc46 force RGB components for all images in imagecompare
Imagemagick produces 1-bit grayscale pngs for fully black pictures. This
makes imagecompare unhappy. Enforce the 3-component RGB type for
consistency.
2025-02-06 13:55:58 -05:00
Ivan Avdeev ceae5141c1 update stb_image.h 2025-02-06 13:55:38 -05:00
provod 3d86ab2697 Merge pull request 'some fixes' (#17) from NightFox/HLRTest:master into master
Reviewed-on: #17
2024-12-18 03:44:24 +01:00
NightFox 20d02c28e4 add focus for the selected comparison in the list; fix light theme 2024-12-18 01:03:24 +03:00
NightFox 6ad2f816df fix vertical padding issue (last-child bottom padding) 2024-02-16 14:11:15 +03:00
provod 697978420e Merge pull request 'fix #9' (#15) from NightFox/HLRTest:master into master
Reviewed-on: #15
2024-02-16 01:30:17 +01:00
NightFox 2f4cf5c3be title for filter 2024-02-16 02:40:39 +03:00
NightFox 3da9283b42 bonus ALT+F for focus at filter input 2024-02-16 02:38:37 +03:00
NightFox a25dee6640 fix #9 2024-02-16 02:27:50 +03:00
NightFoxandprovod 25faf8b0e1 new design for rendertest (#8)
Что сделано:
* Удалёны gif, тесты заметно ускорились из-за этого, даже не смотря что делаются png из tga форсировано теперь.
* Добавлены темы, но светлой уделялось мало внимания. С костылём на автотёмную тему не знаю как будет тёмная тема работать, не проверял.
* Изменён дизайн, теперь таблица-список картинок вынесена в отдельную боковую панель.
* Появились разные режимы и настройки (лень перечислять там и так всё видно).
* Исправлена ошибка сортировки которая проявлялась на chrome-подобных браузерах.
* Исправлена ошибка с ориентацией картинок (поймал у себя что они оказались перевёрнутые).
* Произошла некоторая реорганизация кодовой базы, некоторые функции были расширены, а что-то исправлено по мелочи.

Reviewed-on: #8
Co-authored-by: NightFox <nightfox@dev.null>
Co-committed-by: NightFox <nightfox@dev.null>
2024-02-15 23:35:40 +01:00
247 changed files with 1527 additions and 786 deletions
+2
View File
@@ -1,3 +1,5 @@
*.sav filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.woff2 filter=lfs diff=lfs merge=lfs -text
+1
View File
@@ -1,3 +1,4 @@
render/work
imagecompare
rendertest.script
container/Half-Life
+67
View File
@@ -0,0 +1,67 @@
FROM ubuntu-hlsdk
# Avoid interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
ENV VULKAN_SDK_VERSION=1.4.341.1
USER root
RUN apt-get update && apt-get full-upgrade -y && apt-get autoremove -y
# Install system dependencies and development packages
RUN apt-get install --no-install-recommends --no-install-suggests -y \
libsdl2-dev \
libfreetype-dev \
\
# FFmpeg development packages
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libavfilter-dev \
libavdevice-dev \
libswscale-dev \
libswresample-dev \
libpostproc-dev \
ffmpeg \
\
# Running render tests
weston \
libgl1-mesa-dri \
mesa-vulkan-drivers \
libvulkan1 \
imagemagick
# Install Vulkan SDK runtime dependencies only
#RUN apt-get update && apt-get install -y \
# libxcb-xinput0 libxcb-xinerama0 libxcb-cursor-dev
# Install Vulkan SDK
RUN mkdir -p /opt/VulkanSDK && wget -qO- \
https://sdk.lunarg.com/sdk/download/${VULKAN_SDK_VERSION}/linux/vulkansdk-linux-x86_64-${VULKAN_SDK_VERSION}.tar.xz | \
tar -xJ -C /opt/VulkanSDK/
ENV VULKAN_SDK=/opt/VulkanSDK/${VULKAN_SDK_VERSION}/x86_64
ENV PATH=$VULKAN_SDK/bin:$PATH
ENV LD_LIBRARY_PATH="$VULKAN_SDK/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
ENV VK_ADD_LAYER_PATH="$VULKAN_SDK/share/vulkan/explicit_layer.d${VK_ADD_LAYER_PATH:+:$VK_ADD_LAYER_PATH}"
ENV PKG_CONFIG_PATH="$VULKAN_SDK/share/pkgconfig:$VULKAN_SDK/lib/pkgconfig${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
# Common dev utils
RUN apt-get install --no-install-recommends --no-install-suggests -y \
ripgrep \
less \
fd-find
# Remove extra cache after all the installations
RUN rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /build
COPY build-and-test.sh /build/
# Switch to non-root user
USER ubuntu
# Default command
WORKDIR /build
CMD ["/build/build-and-test.sh"]
+48
View File
@@ -0,0 +1,48 @@
FROM ubuntu:24.04
# This cannot reference external dirs, unfortunately
ARG HALFLIFE_STEAM_FILES=./Half-Life
# Copy HL data files
RUN mkdir -p /opt/hl && chown ubuntu:ubuntu /opt/hl
COPY --chown=ubuntu:ubuntu ${HALFLIFE_STEAM_FILES}/valve /opt/hl/valve
COPY --chown=ubuntu:ubuntu ${HALFLIFE_STEAM_FILES}/valve_hd /opt/hl/valve_hd
ENV DEBIAN_FRONTEND=noninteractive
# Install generic build dependencies
RUN apt-get update && apt-get install --no-install-recommends --no-install-suggests -y \
\
# Build essential utilities
ca-certificates \
wget \
build-essential \
pkg-config \
python3 \
git
# Build FWGS hlsdk game libs
ARG FWGS_HLSDK_REF=ae84bfc0c3598fcff605a7b3bb963abe8ec3e295
RUN mkdir -p /build && chown ubuntu:ubuntu /build
USER ubuntu
RUN cd /build && \
git version && \
# git > 2.49: git clone --depth 1 --revision ${FWGS_HLSDK_REF} https://github.com/FWGS/hlsdk-portable && \
mkdir -p hlsdk-portable && \
cd hlsdk-portable && \
git init && \
git remote add origin https://github.com/FWGS/hlsdk-portable && \
git fetch --depth 1 origin ${FWGS_HLSDK_REF} && \
git checkout FETCH_HEAD && \
./waf \
configure -8 -T release \
build \
install --destdir=/opt/hl
# Cleanup build files
RUN rm -rf /build/hlsdk-portable
# At this point there's:
# /opt/hl with
# ./valve
# {dlls, cl_dlls} with fwgs/hlsdk libs
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
set -eux
echo DESTINATION_IS_WRITABLE > /opt/hl/testfile
XDG_RUNTIME_DIR=/tmp weston \
--backend=headless \
--renderer=gl \
--width=1280 \
--height=800 \
--socket=wayland-headless &
build() {
pushd /build/xash3d-fwgs
./waf configure -T release -8 \
build \
install --destdir=/opt/hl
popd
}
rendertest() {
pushd /build/HLRTest/render
WAYLAND_DISPLAY=/tmp/wayland-headless ./rendertest.py \
--xash-dir /opt/hl \
--xash-revision "${XASH3D_REVISION}" \
--pbr-revision "${PBR_REVISION}" \
--tests-revision "${HLRTEST_REVISION}" \
run
popd
}
time build
time rendertest
+5
View File
@@ -0,0 +1,5 @@
# Path to https://rtxash.omgwtf.ru/Half-Life-RTX/Half-Life-PBR repo clone (readonly)
HALFLIFE_PBR_REPO_DIR=${HOME}/src/Half-Life-PBR
# Path to https://github.com/w23/xash3d-fwgs/ clone (readonly)
XASH3D_RT_REPO_DIR=${HOME}/src/xash3d-fwgs
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
set -eux
# just podman things
export DBUS_SESSION_BUS_ADDRESS=
NAME=xash-builder
HLRTEST_REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
source .env
build-image-hlsdk() {
podman build -t ubuntu-hlsdk -f Containerfile.hlsdk
}
build-image() {
podman build -t ubuntu-xash-builder -f Containerfile
}
build() {
build-image-hlsdk
build-image
}
git_short() {
local dir="${1:-.}"
local hash dirty_flag
# Get short commit hash
hash=$(cd "$dir" && git rev-parse --short HEAD 2>/dev/null)
if [[ -z "$hash" ]]; then
echo "Not a git repository" >&2
return 1
fi
# Check for uncommitted changes (staged or unstaged)
dirty_flag=$(cd "$dir" && git status --porcelain --untracked-files=no 2>/dev/null)
if [[ -n "$dirty_flag" ]]; then
echo "${hash}-dirty"
else
echo "$hash"
fi
}
render-test() {
local OUTPUT="${HLRTEST_REPO_DIR}/render/work"
mkdir -p "${OUTPUT}"
local HLRTEST_REVISION=$(git_short "${HLRTEST_REPO_DIR}")
local XASH3D_REVISION=$(git_short "${XASH3D_RT_REPO_DIR}")
local PBR_REVISION=$(git_short "${HALFLIFE_PBR_REPO_DIR}")
# Make sure the image's ubuntu (uid=1000) user can write to the output
#chmod -R o+rw "${OUTPUT}"
podman run -it --rm \
--name ${NAME} \
--userns=keep-id:uid=1000,gid=1000 \
\
--cap-drop=ALL \
--security-opt=no-new-privileges \
--read-only \
--tmpfs /tmp \
\
-e HLRTEST_REVISION="${HLRTEST_REVISION}" \
-e XASH3D_REVISION="${XASH3D_REVISION}" \
-e PBR_REVISION="${PBR_REVISION}" \
\
-v /dev/dri/renderD128:/dev/dri/renderD128:ro \
-v /etc/localtime:/etc/localtime:ro \
\
-v /opt/hl \
-v /home/ubuntu \
-v ${HALFLIFE_PBR_REPO_DIR}/valve/pbr:/opt/hl/valve/pbr:ro \
-v ${HALFLIFE_PBR_REPO_DIR}/valve/bluenoise:/opt/hl/valve/bluenoise:ro \
\
-v ${XASH3D_RT_REPO_DIR}:/build/xash3d-fwgs:O \
\
-v ${HLRTEST_REPO_DIR}:/build/HLRTest:O \
-v ${OUTPUT}:/build/HLRTest/render/work \
\
ubuntu-xash-builder:latest \
"$@"
}
shell() {
podman exec -it ${NAME} /bin/bash
}
time "$@"
+1 -1
View File
@@ -1,2 +1,2 @@
imagecompare: imagecompare.c stb_image.h stb_image_write.h Makefile
${CC} -O3 -ggdb3 -march=native -Wall -Werror -pedantic -lm -o imagecompare imagecompare.c
${CC} -O3 -ggdb3 -march=native -Wall -Werror -pedantic -o imagecompare imagecompare.c -lm
+177 -31
View File
@@ -1,16 +1,15 @@
@font-face {
font-family: "Noto Color Emoji";
src: url("./fonts/NotoColorEmoji/NotoColorEmoji-Regular.ttf");
src: url("./fonts/NotoColorEmoji/Noto-COLRv1-noflags.ttf");
}
@font-face {
font-family: "OpenMojiDemoFont";
src: url("./fonts/OpenMoji/OpenMoji-color-colr1_svg.ttf");
src: url("./fonts/OpenMoji/OpenMoji-color-colr1_svg.woff2") format("woff2");
}
@font-face {
font-family: "Twemoji Mozilla Built";
src: url("./fonts/Mozilla/Twemoji.Mozilla.ttf");
}
/*@font-face {
font-family: "OpenMojiDemoFont";
src: url("OpenMoji-color-colr1_svg.woff2") format("woff2");
}*/
html, body {
@@ -25,21 +24,53 @@ html, body {
*, *:before, *:after {
box-sizing: inherit;
}
h1,h2,h3,h4,h5 {
h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child {
margin-top: 0;
}
.emoji {
/*font-family: "Noto Color Emoji", sans-serif;*/
font-family: "Noto Color Emoji", sans-serif;
font-family: "OpenMojiDemoFont", sans-serif;
/*font-weight: 400;
font-style: regular;
*/
font-family: "Twemoji Mozilla Built", sans-serif;
font-size: 16px;
font-weight: 400;
font-style: normal;
position: relative;
/*top: 1px; /* Twemoji */
}
.emoji:after {
font-variant-emoji: emoji; /* experimental and only in firefox :( */
font-variant-emoji: emoji; /* experimental feature and only in firefox :( */
content: '\FE0F'; /* fuck off, give me emoji // https://codepoints.net/U+FE0F */
}
.emoji.Twemoji {
font-family: "Twemoji Mozilla Built", sans-serif;
font-size: 16px;
top: 2px;
}
.emoji.Noto {
font-family: "Noto Color Emoji", sans-serif;
font-size: 14px;
/*left: -1px;*/
top: 0px;
}
.emoji.OpenMoji {
font-family: "OpenMojiDemoFont", sans-serif;
font-size: 17px;
left: -2px;
top: 0px;
color: #888; /* fix outline */
}
.emoji.OpenMoji + .text-left-margin {
margin-left: 0;
}
.emoji.Noto + .text-left-margin {
margin-left: 5px;
}
.sidebar .emoji.Noto + .emoji.Noto {
margin-left: 4px;
}
footer {
text-align: center;
@@ -130,17 +161,27 @@ table, tr, td, th {
display: grid;
grid-gap: 2px;
align-items: stretch;
align-content: baseline;
}
.sidebar h2 {
font-size: 17px;
}
#options {
height: var(--options-height);
}
#table { }
#fail_images {
display: grid;
justify-content: left;
}
#fail_images.center,
.grid-container.reversed #fail_images.center{
justify-content: center;
}
.grid-container.reversed #fail_images {
justify-content: right;
}
.panel {
display: block;
@@ -158,23 +199,27 @@ table, tr, td, th {
.content {
grid-area: content;
overflow: auto;
justify-content: center;
padding: 0px 10px;
}
body.min { /* split feature */
body.mini { /* split feature */
width: 75%; margin: 0 auto; /* FIXME */
}
.min .sidebar {
.mini .sidebar {
font-size: 12px;
/*font-weight: bold;*/
}
.min .sidebar .panel > div {
.mini .sidebar .panel > div {
line-height: 20px;
}
.min .sidebar #options.panel {
.mini .sidebar #options.panel {
height: var(--options-height-min);
}
@keyframes flash {
0% {
z-index: 1;
@@ -241,11 +286,45 @@ body.min { /* split feature */
position: absolute;
animation: flash var(--animation-duration) infinite;
}
.block-gold.anim_off {
.block-gold.anim_off,
.block-gold.anim_force_off,
.all_diff .block-gold,
.split_compare .block-gold{
animation: none;
}
.split_compare .image-container {
cursor: col-resize;
}
.split_compare .block-gold {
overflow: hidden;
width: 50%;
position: absolute;
z-index: 10;
}
.split_compare .separator {
width: 1px;
height: 100%;
cursor: col-resize;
position: absolute;
top: 0;
left: 50%;
z-index: 10;
backdrop-filter: invert(1);
}
.split_compare .block-test:after {
left: auto;
right: 25px;
}
:root {
--animation-duration: 0.7s;
--height-image: calc((100vh - 800px) / 2);
@@ -256,23 +335,34 @@ body.min { /* split feature */
position: relative;
}
.meta-block h2 {
.meta-block h3 {
/*display: none;*/
font-family: monospace;
/*font-family: "Gill Sans", sans-serif;*/
padding-top: 10px;
margin-top: revert;
/*font-size: 150%;*/
font-size: 1.5em;
}
.meta-block h2:before {
.meta-block h3:before {
content: "🎯\FE0F"; /* for hedging her bets; see .emoji for details */
}
#fail_images.padding .meta-block {
.text-link {
text-decoration: none;
}
#fail_images.vpadding .meta-block {
/*margin-block: 100vh;*/
padding-top: calc(var(--height-image));
padding-bottom: 2px;
/*padding-bottom: calc(50% - var(--height-image) );*/
}
#fail_images.padding .meta-block h2, .meta-block:first-child h2 {
#fail_images.vpadding .meta-block:last-child {
padding-top: calc(var(--height-image));
padding-bottom: calc(var(--height-image));
}
#fail_images.vpadding .meta-block h3, .meta-block:first-child h3 {
border-top: none;
}
@@ -284,14 +374,27 @@ body.min { /* split feature */
/*z-index: 10;*/
}
.block-diff.show_diff {
.block-diff.show_diff,
.all_diff .block-diff {
display: block;
z-index: 2;
}
.diff_separate .block-diff {
display: block;
position: relative;
top: auto;
}
.image-container, img, .block {
max-width: 100%;
user-select: none;
}
/* TODO: исправить конфликт с image split compare */
.split_compare .image-container,
.split_compare img,
.split_compare .block {
max-width: unset;
}
table {
@@ -319,14 +422,46 @@ th {
}
th.table-sticky {
position: sticky;
top: 0;
top: 2.7em; /* FIXME */
}
.mini th.table-sticky {
position: sticky;
top: 3.53em; /* FIXME */
}
#options.sticky + #table th.table-sticky {
top: calc(var(--options-height) + 0.07em); /* FIXME */
top: calc(var(--options-height) + 2.74em); /* FIXME */
}
.min .sidebar #options.sticky + #table th.table-sticky {
top: calc(var(--options-height-min) + 0.07em); /* FIXME */
.mini .sidebar #options.sticky + #table th.table-sticky {
top: calc(var(--options-height-min) + 3.50em); /* FIXME */
}
.filter {
display: block;
padding: 10px 4px;
font-size: 16px;
font-weight: bold;
}
.filter * {
font-weight: normal;
}
.mini .filter {
font-size: 12px;
}
#options.sticky + #table .filter.sticky {
top: calc(var(--options-height) + 0.0em); /* FIXME */
}
.mini .sidebar #options.sticky + #table .filter.sticky {
top: calc(var(--options-height-min) + 0.0em); /* FIXME */
}
.filter input {
margin-left: 10px;
}
#options .filter.sticky {
}
input[type=range] { vertical-align: middle; }
@@ -369,4 +504,15 @@ details[open] summary:before {
.green {
color: #6b9a00;
color: oklch(62.8% 0.25768330773615683 128.19);
}
}
table th:nth-child(3) {
text-align: center;
}
table td:nth-child(3) { /* Δ, % // TODO: add class */
text-align: right;
font-family: Consolas, monospace;
}
table td:nth-child(4) { /* Passed // TODO: add class */
text-align: center;
}
+50
View File
@@ -0,0 +1,50 @@
## License for the Code
Copyright 2016-2018, Mozilla Foundation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
## License for the Visual Design
The Emoji art in the twe-svg.zip archive comes from [Twemoji](https://twitter.github.io/twemoji),
and is used and redistributed under the CC-BY-4.0 [license terms](https://github.com/twitter/twemoji#license)
offered by the Twemoji project.
### Creative Commons Attribution 4.0 International (CC BY 4.0)
https://creativecommons.org/licenses/by/4.0/legalcode
or for the human readable summary: https://creativecommons.org/licenses/by/4.0/
#### You are free to:
**Share** — copy and redistribute the material in any medium or format
**Adapt** — remix, transform, and build upon the material for any purpose, even commercially.
The licensor cannot revoke these freedoms as long as you follow the license terms.
#### Under the following terms:
**Attribution** — You must give appropriate credit, provide a link to the license,
and indicate if changes were made.
You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
**No additional restrictions** — You may not apply legal terms or **technological measures**
that legally restrict others from doing anything the license permits.
#### Notices:
You do not have to comply with the license for elements of the material in the public domain
or where your use is permitted by an applicable exception or limitation. No warranties are given.
The license may not give you all of the permissions necessary for your intended use.
For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More