# Run sent to worker: doanac-reckless == 2026-05-11 14:12:21.647233: Setting up runner on worker == 2026-05-11 14:12:23.047973: Steps to recreate inside simulator wget -O simulate.sh https://api.gavelci.us/projects/jobserv/builds/516/runs/unit-test//.simulate.sh # wget'ing the file may require the --header flag if the # jobserv API requires authentication. sh ./simulate.sh == 2026-05-11 14:12:23.666960: Pulling container: python:3.11-alpine3.19 3.11-alpine3.19: Pulling from library/python Digest: sha256:135b0db9b7c3e33d654ba8893b63cbe9394768cc64fc2a2f283148125ae8aa1f Status: Image is up to date for python:3.11-alpine3.19 docker.io/library/python:3.11-alpine3.19 == 2026-05-11 14:12:25.455262: Preparing bind mounts 2026-05-11 14:12:25.649142: INFO Default docker configuration detected 2026-05-11 14:12:25.850549: INFO Creating secret: githubtok 2026-05-11 14:12:26.051110: INFO Creating secret: webhook-key 2026-05-11 14:12:26.242539: INFO Creating secret: milosz 2026-05-11 14:12:26.454367: INFO Adding shared volume: /lmp-bitbake-cache == 2026-05-11 14:12:26.848661: Creating container .netrc file 2026-05-11 14:12:27.039075: INFO Creating token for jobserv run access 2026-05-11 14:12:27.237922: INFO Creating a github token entry == 2026-05-11 14:12:27.649768: Preparing script == 2026-05-11 14:12:28.051522: Cloning git repository 2026-05-11 14:12:28.248675: INFO Clone_url: https://github.com/foundriesio/jobserv.git 2026-05-11 14:12:28.461738: INFO Checking to see if https://github.com/foundriesio/jobserv.git requires authentication. 2026-05-11 14:12:28.915116: INFO Server does not appear to need credentials for cloning 2026-05-11 14:12:29.136575: INFO Adding githubtok to .gitconfig 2026-05-11 14:12:29.335142: INFO Git install supports submodules Cloning into '/srv/gavelci-worker/runs/tmp0_9if8wx/repo'... 2026-05-11 14:12:30.424197: INFO Checking out: b51d8a7e14bb5414731e1569a18f83fa76f43125 Switched to branch 'jobserv-run' == 2026-05-11 14:12:31.203047: Setting up container environment 2026-05-11 14:12:31.437287: INFO Container environment variables: GH_PRNUM=161 GH_OWNER=foundriesio GH_REPO=jobserv GH_BRANCH=master GH_STATUS_URL=https://api.github.com/repos/foundriesio/jobserv/statuses/b51d8a7e14bb5414731e1569a18f83fa76f43125 GH_TARGET_REPO=https://github.com/foundriesio/jobserv.git GIT_URL=https://github.com/foundriesio/jobserv.git GIT_SHA_BASE=fd65674147008acf71375d1108160227120fa201 GIT_OLD_SHA=fd65674147008acf71375d1108160227120fa201 GIT_SHA=b51d8a7e14bb5414731e1569a18f83fa76f43125 H_PROJECT=jobserv H_BUILD=516 H_RUN=unit-test H_RUN_URL=https://api.gavelci.us/projects/jobserv/builds/516/runs/unit-test/ H_WORKER=doanac-reckless == 2026-05-11 14:12:31.850627: Running script inside container 2026-05-11 14:12:32.059450: INFO Running with --memory=14639596339 WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. + apk --no-cache add git python3-dev musl-dev g++ openssl libffi-dev openssl-dev rust cargo fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/APKINDEX.tar.gz fetch https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/APKINDEX.tar.gz (1/45) Upgrading musl (1.2.4_git20230717-r4 -> 1.2.4_git20230717-r6) (2/45) Upgrading libcrypto3 (3.1.7-r1 -> 3.1.8-r1) (3/45) Upgrading libssl3 (3.1.7-r1 -> 3.1.8-r1) (4/45) Installing libgcc (13.2.1_git20231014-r0) (5/45) Installing jansson (2.14-r4) (6/45) Installing libstdc++ (13.2.1_git20231014-r0) (7/45) Installing zstd-libs (1.5.5-r8) (8/45) Installing binutils (2.41-r1) (9/45) Installing libgomp (13.2.1_git20231014-r0) (10/45) Installing libatomic (13.2.1_git20231014-r0) (11/45) Installing gmp (6.3.0-r0) (12/45) Installing isl26 (0.26-r1) (13/45) Installing mpfr4 (4.2.1-r0) (14/45) Installing mpc1 (1.3.1-r1) (15/45) Installing gcc (13.2.1_git20231014-r0) (16/45) Installing musl-dev (1.2.4_git20230717-r6) (17/45) Installing libxml2 (2.11.8-r3) (18/45) Installing llvm17-libs (17.0.5-r0) (19/45) Installing scudo-malloc (17.0.5-r0) (20/45) Installing rust (1.76.0-r0) (21/45) Installing brotli-libs (1.1.0-r1) (22/45) Installing c-ares (1.27.0-r0) (23/45) Installing libunistring (1.1-r2) (24/45) Installing libidn2 (2.3.4-r4) (25/45) Installing nghttp2-libs (1.58.0-r0) (26/45) Installing libpsl (0.21.5-r0) (27/45) Installing libcurl (8.14.1-r2) (28/45) Installing cargo (1.76.0-r0) (29/45) Installing libstdc++-dev (13.2.1_git20231014-r0) (30/45) Installing libc-dev (0.7.2-r5) (31/45) Installing g++ (13.2.1_git20231014-r0) (32/45) Installing libexpat (2.7.3-r0) (33/45) Installing pcre2 (10.42-r2) (34/45) Installing git (2.43.7-r0) (35/45) Installing linux-headers (6.5-r0) (36/45) Installing pkgconf (2.1.0-r0) (37/45) Installing libffi-dev (3.4.4-r3) (38/45) Installing openssl (3.1.8-r1) (39/45) Installing openssl-dev (3.1.8-r1) (40/45) Installing mpdecimal (2.5.1-r2) (41/45) Installing python3 (3.11.14-r0) (42/45) Installing python3-pycache-pyc0 (3.11.14-r0) (43/45) Installing pyc (3.11.14-r0) (44/45) Installing python3-pyc (3.11.14-r0) (45/45) Installing python3-dev (3.11.14-r0) Executing busybox-1.36.1-r19.trigger Executing ca-certificates-20240226-r0.trigger OK: 1077 MiB in 79 packages + git config --global user.email cibot@example.com + git config --global user.name cibot + git config --system protocol.file.allow always + git config --global --add safe.directory /repo/.git + ls /lmp-bitbake-cache/ dmesg.out + sh ./unit-test.sh + readlink -f ./unit-test.sh + dirname /repo/unit-test.sh + HERE=/repo + cd /repo + mktemp -d + VENV=/tmp/tmp.hfICGk + trap '[ -z ] || docker kill jobserv-db; rm -rf /tmp/tmp.hfICGk' EXIT + '[' -n ] + '[' -z ] + echo 'WARNING: Using sqlite database - work queue testing will be skipped' + export 'SQLALCHEMY_DATABASE_URI=sqlite://' + python3 -m venv /tmp/tmp.hfICGk WARNING: Using sqlite database - work queue testing will be skipped + /tmp/tmp.hfICGk/bin/pip3 install -U pip Requirement already satisfied: pip in /tmp/tmp.hfICGk/lib/python3.11/site-packages (24.0) Collecting pip Downloading pip-26.1.1-py3-none-any.whl.metadata (4.6 kB) Downloading pip-26.1.1-py3-none-any.whl (1.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 3.5 MB/s eta 0:00:00 Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 24.0 Uninstalling pip-24.0: Successfully uninstalled pip-24.0 Successfully installed pip-26.1.1 + /tmp/tmp.hfICGk/bin/pip3 install -U setuptools Requirement already satisfied: setuptools in /tmp/tmp.hfICGk/lib/python3.11/site-packages (65.5.0) Collecting setuptools Downloading setuptools-82.0.1-py3-none-any.whl.metadata (6.5 kB) Downloading setuptools-82.0.1-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 3.9 MB/s 0:00:00 Installing collected packages: setuptools Attempting uninstall: setuptools Found existing installation: setuptools 65.5.0 Uninstalling setuptools-65.5.0: Successfully uninstalled setuptools-65.5.0 Successfully installed setuptools-82.0.1 + /tmp/tmp.hfICGk/bin/pip3 install -r requirements.txt Collecting Flask-Migrate==4.0.7 (from -r requirements.txt (line 1)) Downloading Flask_Migrate-4.0.7-py3-none-any.whl.metadata (3.1 kB) Collecting Flask-SQLAlchemy==3.0.5 (from -r requirements.txt (line 2)) Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl.metadata (3.3 kB) Collecting Flask-Testing==0.8.1 (from -r requirements.txt (line 3)) Downloading Flask-Testing-0.8.1.tar.gz (45 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting Flask==3.1.3 (from -r requirements.txt (line 4)) Downloading flask-3.1.3-py3-none-any.whl.metadata (3.2 kB) Collecting PyJWT==2.12.0 (from -r requirements.txt (line 5)) Downloading pyjwt-2.12.0-py3-none-any.whl.metadata (4.0 kB) Collecting PyMySQL==1.1.2 (from -r requirements.txt (line 6)) Downloading pymysql-1.1.2-py3-none-any.whl.metadata (4.3 kB) Collecting PyYAML==6.0.1 (from -r requirements.txt (line 7)) Downloading PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl.metadata (2.1 kB) Collecting SQLAlchemy==1.4.54 (from -r requirements.txt (line 8)) Downloading sqlalchemy-1.4.54.tar.gz (8.5 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.5/8.5 MB 3.3 MB/s 0:00:02 Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting Werkzeug==3.1.6 (from -r requirements.txt (line 9)) Downloading werkzeug-3.1.6-py3-none-any.whl.metadata (4.0 kB) Collecting bcrypt==5.0.0 (from -r requirements.txt (line 10)) Downloading bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl.metadata (10 kB) Collecting cryptography==46.0.7 (from -r requirements.txt (line 11)) Downloading cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl.metadata (5.7 kB) Collecting dataclasses==0.6 (from -r requirements.txt (line 12)) Downloading dataclasses-0.6-py3-none-any.whl.metadata (3.0 kB) Collecting google-cloud-storage==2.10.0 (from -r requirements.txt (line 13)) Downloading google_cloud_storage-2.10.0-py2.py3-none-any.whl.metadata (6.0 kB) Collecting gunicorn==23.0.0 (from -r requirements.txt (line 16)) Downloading gunicorn-23.0.0-py3-none-any.whl.metadata (4.4 kB) Collecting json-logging==1.5.1 (from -r requirements.txt (line 17)) Downloading json_logging-1.5.1-py2.py3-none-any.whl.metadata (1.1 kB) Collecting pykwalify==1.8.0 (from -r requirements.txt (line 18)) Downloading pykwalify-1.8.0-py2.py3-none-any.whl.metadata (5.3 kB) Collecting python-dateutil==2.8.2 (from -r requirements.txt (line 19)) Downloading python_dateutil-2.8.2-py2.py3-none-any.whl.metadata (8.2 kB) Collecting pytz==2023.3 (from -r requirements.txt (line 20)) Downloading pytz-2023.3-py2.py3-none-any.whl.metadata (22 kB) Collecting requests==2.32.5 (from -r requirements.txt (line 21)) Downloading requests-2.32.5-py3-none-any.whl.metadata (4.9 kB) Collecting wheel==0.46.2 (from -r requirements.txt (line 22)) Downloading wheel-0.46.2-py3-none-any.whl.metadata (2.4 kB) Requirement already satisfied: setuptools==82.0.1 in /tmp/tmp.hfICGk/lib/python3.11/site-packages (from -r requirements.txt (line 23)) (82.0.1) Collecting alembic>=1.9.0 (from Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading alembic-1.18.4-py3-none-any.whl.metadata (7.2 kB) Collecting blinker>=1.9.0 (from Flask==3.1.3->-r requirements.txt (line 4)) Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB) Collecting click>=8.1.3 (from Flask==3.1.3->-r requirements.txt (line 4)) Downloading click-8.3.3-py3-none-any.whl.metadata (2.6 kB) Collecting itsdangerous>=2.2.0 (from Flask==3.1.3->-r requirements.txt (line 4)) Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB) Collecting jinja2>=3.1.2 (from Flask==3.1.3->-r requirements.txt (line 4)) Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) Collecting markupsafe>=2.1.1 (from Flask==3.1.3->-r requirements.txt (line 4)) Downloading markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (2.7 kB) Collecting greenlet!=0.4.17 (from SQLAlchemy==1.4.54->-r requirements.txt (line 8)) Downloading greenlet-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (3.7 kB) Collecting cffi>=2.0.0 (from cryptography==46.0.7->-r requirements.txt (line 11)) Downloading cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (2.6 kB) Collecting google-auth<3.0dev,>=1.25.0 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_auth-2.52.0-py3-none-any.whl.metadata (5.5 kB) Collecting google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_api_core-2.30.3-py3-none-any.whl.metadata (3.1 kB) Collecting google-cloud-core<3.0dev,>=2.3.0 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_cloud_core-2.6.0-py3-none-any.whl.metadata (2.8 kB) Collecting google-resumable-media>=2.3.2 (from google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_resumable_media-2.9.0-py3-none-any.whl.metadata (2.2 kB) Collecting charset_normalizer<4,>=2 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (40 kB) Collecting idna<4,>=2.5 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading idna-3.14-py3-none-any.whl.metadata (8.0 kB) Collecting urllib3<3,>=1.21.1 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading urllib3-2.7.0-py3-none-any.whl.metadata (6.9 kB) Collecting certifi>=2017.4.17 (from requests==2.32.5->-r requirements.txt (line 21)) Downloading certifi-2026.4.22-py3-none-any.whl.metadata (2.5 kB) Collecting packaging (from gunicorn==23.0.0->-r requirements.txt (line 16)) Downloading packaging-26.2-py3-none-any.whl.metadata (3.5 kB) Collecting docopt>=0.6.2 (from pykwalify==1.8.0->-r requirements.txt (line 18)) Downloading docopt-0.6.2.tar.gz (25 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting ruamel.yaml>=0.16.0 (from pykwalify==1.8.0->-r requirements.txt (line 18)) Downloading ruamel_yaml-0.19.1-py3-none-any.whl.metadata (16 kB) Collecting six>=1.5 (from python-dateutil==2.8.2->-r requirements.txt (line 19)) Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB) Collecting googleapis-common-protos<2.0.0,>=1.63.2 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading googleapis_common_protos-1.75.0-py3-none-any.whl.metadata (8.6 kB) Collecting protobuf<8.0.0,>=4.25.8 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading protobuf-7.34.1-py3-none-any.whl.metadata (595 bytes) Collecting proto-plus<2.0.0,>=1.22.3 (from google-api-core!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0dev,>=1.31.5->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading proto_plus-1.28.0-py3-none-any.whl.metadata (2.2 kB) Collecting pyasn1-modules>=0.2.1 (from google-auth<3.0dev,>=1.25.0->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading pyasn1_modules-0.4.2-py3-none-any.whl.metadata (3.5 kB) Collecting Mako (from alembic>=1.9.0->Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading mako-1.3.12-py3-none-any.whl.metadata (2.9 kB) Collecting typing-extensions>=4.12 (from alembic>=1.9.0->Flask-Migrate==4.0.7->-r requirements.txt (line 1)) Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) Collecting pycparser (from cffi>=2.0.0->cryptography==46.0.7->-r requirements.txt (line 11)) Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB) Collecting google-crc32c<2.0.0,>=1.0.0 (from google-resumable-media>=2.3.2->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading google_crc32c-1.8.0.tar.gz (14 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting pyasn1<0.7.0,>=0.6.1 (from pyasn1-modules>=0.2.1->google-auth<3.0dev,>=1.25.0->google-cloud-storage==2.10.0->-r requirements.txt (line 13)) Downloading pyasn1-0.6.3-py3-none-any.whl.metadata (8.4 kB) Downloading Flask_Migrate-4.0.7-py3-none-any.whl (21 kB) Downloading flask_sqlalchemy-3.0.5-py3-none-any.whl (24 kB) Downloading flask-3.1.3-py3-none-any.whl (103 kB) Downloading pyjwt-2.12.0-py3-none-any.whl (29 kB) Downloading pymysql-1.1.2-py3-none-any.whl (45 kB) Downloading PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl (748 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 748.5/748.5 kB 3.9 MB/s 0:00:00 Downloading werkzeug-3.1.6-py3-none-any.whl (225 kB) Downloading bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl (359 kB) Downloading cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl (4.7 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.7/4.7 MB 10.6 MB/s 0:00:00 Downloading dataclasses-0.6-py3-none-any.whl (14 kB) Downloading google_cloud_storage-2.10.0-py2.py3-none-any.whl (114 kB) Downloading requests-2.32.5-py3-none-any.whl (64 kB) Downloading gunicorn-23.0.0-py3-none-any.whl (85 kB) Downloading json_logging-1.5.1-py2.py3-none-any.whl (23 kB) Downloading pykwalify-1.8.0-py2.py3-none-any.whl (24 kB) Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) Downloading pytz-2023.3-py2.py3-none-any.whl (502 kB) Downloading wheel-0.46.2-py3-none-any.whl (29 kB) Downloading charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl (216 kB) Downloading google_api_core-2.30.3-py3-none-any.whl (173 kB) Downloading google_auth-2.52.0-py3-none-any.whl (245 kB) Downloading google_cloud_core-2.6.0-py3-none-any.whl (29 kB) Downloading googleapis_common_protos-1.75.0-py3-none-any.whl (300 kB) Downloading idna-3.14-py3-none-any.whl (72 kB) Downloading proto_plus-1.28.0-py3-none-any.whl (50 kB) Downloading protobuf-7.34.1-py3-none-any.whl (170 kB) Downloading urllib3-2.7.0-py3-none-any.whl (131 kB) Downloading alembic-1.18.4-py3-none-any.whl (263 kB) Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB) Downloading certifi-2026.4.22-py3-none-any.whl (135 kB) Downloading cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl (217 kB) Downloading click-8.3.3-py3-none-any.whl (110 kB) Downloading google_resumable_media-2.9.0-py3-none-any.whl (81 kB) Downloading greenlet-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl (1.6 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 7.3 MB/s 0:00:00 Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB) Downloading jinja2-3.1.6-py3-none-any.whl (134 kB) Downloading markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl (22 kB) Using cached packaging-26.2-py3-none-any.whl (100 kB) Downloading pyasn1_modules-0.4.2-py3-none-any.whl (181 kB) Downloading pyasn1-0.6.3-py3-none-any.whl (83 kB) Downloading ruamel_yaml-0.19.1-py3-none-any.whl (118 kB) Downloading six-1.17.0-py2.py3-none-any.whl (11 kB) Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB) Downloading mako-1.3.12-py3-none-any.whl (78 kB) Downloading pycparser-3.0-py3-none-any.whl (48 kB) Building wheels for collected packages: Flask-Testing, SQLAlchemy, docopt, google-crc32c Building wheel for Flask-Testing (pyproject.toml): started Building wheel for Flask-Testing (pyproject.toml): finished with status 'done' Created wheel for Flask-Testing: filename=flask_testing-0.8.1-py3-none-any.whl size=8265 sha256=7276f3b90444ff655fdd754fca8df19568734f58a55ac22f0ec2201c13a54e29 Stored in directory: /root/.cache/pip/wheels/9d/aa/a4/a97a989ae422b51b1f164f76b5bdfc21a9c30b1842b7403598 Building wheel for SQLAlchemy (pyproject.toml): started Building wheel for SQLAlchemy (pyproject.toml): finished with status 'done' Created wheel for SQLAlchemy: filename=sqlalchemy-1.4.54-cp311-cp311-linux_x86_64.whl size=1622617 sha256=c2413cc391f1d2d2901ef77d5449aedac8d8ad176eb86bf9079f0035121b9b85 Stored in directory: /root/.cache/pip/wheels/e6/d5/db/f068d28cbd84d13f9f4c0d31dce260bc385dc39d9ea395bda5 Building wheel for docopt (pyproject.toml): started Building wheel for docopt (pyproject.toml): finished with status 'done' Created wheel for docopt: filename=docopt-0.6.2-py2.py3-none-any.whl size=13782 sha256=d78b24e77a76c982e4beebeb084b9edbffad90acbd9825c943de5ea742c3c9d0 Stored in directory: /root/.cache/pip/wheels/1a/b0/8c/4b75c4116c31f83c8f9f047231251e13cc74481cca4a78a9ce Building wheel for google-crc32c (pyproject.toml): started Building wheel for google-crc32c (pyproject.toml): finished with status 'done' Created wheel for google-crc32c: filename=google_crc32c-1.8.0-py3-none-any.whl size=13802 sha256=1c76ac8a718ee2aaed0ad0f479e4740a536a6be24d49b1bc315ded87fc1f888f Stored in directory: /root/.cache/pip/wheels/bf/c5/4d/1896ad3fcff8c08542fa9a4452e2dec9aa336fa1d63d5fdae6 Successfully built Flask-Testing SQLAlchemy docopt google-crc32c Installing collected packages: pytz, json-logging, docopt, dataclasses, urllib3, typing-extensions, six, ruamel.yaml, PyYAML, PyMySQL, PyJWT, pycparser, pyasn1, protobuf, packaging, markupsafe, itsdangerous, idna, greenlet, google-crc32c, click, charset_normalizer, certifi, blinker, bcrypt, wheel, Werkzeug, SQLAlchemy, requests, python-dateutil, pyasn1-modules, proto-plus, Mako, jinja2, gunicorn, googleapis-common-protos, google-resumable-media, cffi, pykwalify, Flask, cryptography, alembic, google-auth, Flask-Testing, Flask-SQLAlchemy, google-api-core, Flask-Migrate, google-cloud-core, google-cloud-storage Successfully installed Flask-3.1.3 Flask-Migrate-4.0.7 Flask-SQLAlchemy-3.0.5 Flask-Testing-0.8.1 Mako-1.3.12 PyJWT-2.12.0 PyMySQL-1.1.2 PyYAML-6.0.1 SQLAlchemy-1.4.54 Werkzeug-3.1.6 alembic-1.18.4 bcrypt-5.0.0 blinker-1.9.0 certifi-2026.4.22 cffi-2.0.0 charset_normalizer-3.4.7 click-8.3.3 cryptography-46.0.7 dataclasses-0.6 docopt-0.6.2 google-api-core-2.30.3 google-auth-2.52.0 google-cloud-core-2.6.0 google-cloud-storage-2.10.0 google-crc32c-1.8.0 google-resumable-media-2.9.0 googleapis-common-protos-1.75.0 greenlet-3.5.0 gunicorn-23.0.0 idna-3.14 itsdangerous-2.2.0 jinja2-3.1.6 json-logging-1.5.1 markupsafe-3.0.3 packaging-26.2 proto-plus-1.28.0 protobuf-7.34.1 pyasn1-0.6.3 pyasn1-modules-0.4.2 pycparser-3.0 pykwalify-1.8.0 python-dateutil-2.8.2 pytz-2023.3 requests-2.32.5 ruamel.yaml-0.19.1 six-1.17.0 typing-extensions-4.15.0 urllib3-2.7.0 wheel-0.46.2 + /tmp/tmp.hfICGk/bin/pip3 install 'junitxml==0.7' 'python-subunit==1.3.0' Collecting junitxml==0.7 Downloading junitxml-0.7.tar.gz (26 kB) Installing build dependencies: started Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting python-subunit==1.3.0 Downloading python_subunit-1.3.0-py2.py3-none-any.whl.metadata (21 kB) Collecting extras (from python-subunit==1.3.0) Downloading extras-1.0.0-py2.py3-none-any.whl.metadata (1.7 kB) Collecting testtools>=0.9.34 (from python-subunit==1.3.0) Downloading testtools-2.9.1-py3-none-any.whl.metadata (5.4 kB) Downloading python_subunit-1.3.0-py2.py3-none-any.whl (104 kB) Downloading testtools-2.9.1-py3-none-any.whl (110 kB) Downloading extras-1.0.0-py2.py3-none-any.whl (7.3 kB) Building wheels for collected packages: junitxml Building wheel for junitxml (pyproject.toml): started Building wheel for junitxml (pyproject.toml): finished with status 'done' Created wheel for junitxml: filename=junitxml-0.7-py3-none-any.whl size=16364 sha256=8ac7fd63f8e9b357b282a8b753d54d0829df678c850ae46fbafd3b37c29aa64f Stored in directory: /root/.cache/pip/wheels/8a/7a/9b/f1dac57e815dbc28e3889797e53848042661a1143aa45f127f Successfully built junitxml Installing collected packages: junitxml, extras, testtools, python-subunit Successfully installed extras-1.0.0 junitxml-0.7 python-subunit-1.3.0 testtools-2.9.1 + set -o pipefail + PYTHONPATH=./ /tmp/tmp.hfICGk/bin/python3 -m subunit.run discover + /tmp/tmp.hfICGk/bin/subunit2junitxml --no-passthrough + tee /archive/junit.xml hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Cloning into '/tmp/tmpedylxffw/repo-src/submod'... done. hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Cloning into '/tmp/tmpedylxffw/nested-par/repo-src'... done. hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m 2026-05-11 14:14:34.317230: ERROR foo bar == 2026-05-11 14:14:34.317446: test_exec 2026-05-11 14:14:34.317446: ERROR Traceback (most recent call last): | File "/repo/tests/runner/test_logging.py", line 44, in test_exec | raise RuntimeError() |RuntimeError | == 2026-05-11 14:14:34.318285: test_exec_cancelled 2026-05-11 14:14:34.318519: INFO foo bar 2026-05-11 14:14:34.318720: WARN foo bar 2026-05-11 14:14:34,320 DEBUG: Update all existing logger to using JSONLogFormatter {"written_at": "2026-05-11T14:14:34.751Z", "written_ts": 1778508874751709000, "msg": "Run requested a host-tag that is not configured for this project: dont_allow_this", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "trigger", "line_no": 61, "correlation_id": "bc91cc5c-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:35.087Z", "written_ts": 1778508875087351000, "msg": "Unexpected error creating runs for: {'name': 'git', 'type': 'git_poller', 'runs': [{'name': 'run0', 'host-tag': 'foo*', 'container': 'alpine', 'script': 'test'}]}", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "trigger", "line_no": 72, "exc_info": "Traceback (most recent call last):\n File \"/repo/jobserv/trigger.py\", line 65, in trigger_runs\n storage.set_run_definition(r, rundef)\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1124, in __call__\n return self._mock_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1128, in _mock_call\n return self._execute_mock_call(*args, **kwargs)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.11/unittest/mock.py\", line 1183, in _execute_mock_call\n raise effect\nRuntimeError: edge case!!!\n", "filename": "trigger.py", "correlation_id": "bcc57854-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:37.210Z", "written_ts": 1778508877210234000, "msg": "Delivered webhook to https://example.com", "type": "log", "logger": "jobserv.flask", "thread": "Thread-1 (deliver)", "level": "INFO", "module": "notify", "line_no": 169, "correlation_id": "be109b58-4d43-11f1-b7e7-0242ac110002"} {"written_at": "2026-05-11T14:14:37.451Z", "written_ts": 1778508877451283000, "msg": "Updating the rundef from simple->github_pr", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 30, "correlation_id": "be330ecc-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:37.813Z", "written_ts": 1778508877813960000, "msg": "Updating the rundef from simple->gith_poller", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 34, "correlation_id": "be6ac9f2-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:37.878Z", "written_ts": 1778508877878467000, "msg": "Caught integrity error and failed run: 1", "type": "log", "logger": "jobserv.flask", "thread": "MainThread", "level": "ERROR", "module": "run", "line_no": 172, "exc_info": "Traceback (most recent call last):\n File \"/repo/jobserv/api/run.py\", line 155, in _handle_triggers\n _create_triggers(\n File \"/repo/jobserv/api/run.py\", line 79, in _create_triggers\n trigger_runs(\n File \"/repo/jobserv/trigger.py\", line 53, in trigger_runs\n raise ValueError('A run named \"%s\" already exists' % name)\nValueError: A run named \"collision-name\" already exists\n", "filename": "run.py", "correlation_id": "be749f9a-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:37.941Z", "written_ts": 1778508877941143000, "msg": "Updating the rundef from simple->github_pr", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "trigger", "line_no": 30, "correlation_id": "be7e3ec4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.837Z", "written_ts": 1778508886837085000, "msg": "Unable to check doesnot matter.git/info/refs?service=git-upload-pack for changes: 500 ", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "git_poller", "line_no": 167, "correlation_id": "c3cd9492-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.844Z", "written_ts": 1778508886844469000, "msg": "Adding foo to poller list", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 435, "correlation_id": "c3ceabb6-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.850Z", "written_ts": 1778508886850512000, "msg": "Updating foo", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 440, "correlation_id": "c3cf97c4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.852Z", "written_ts": 1778508886852749000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 186, "correlation_id": "c3cff00c-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.853Z", "written_ts": 1778508886853052000, "msg": "url1 ref1 change oldsha->sha1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 197, "correlation_id": "c3cffab6-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.853Z", "written_ts": 1778508886853645000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 186, "correlation_id": "c3d011ea-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.853Z", "written_ts": 1778508886853790000, "msg": "First run detected for url1 - ref1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 195, "correlation_id": "c3d017d0-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.853Z", "written_ts": 1778508886853948000, "msg": "Looking for changes to: url1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 186, "correlation_id": "c3d01e10-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.854Z", "written_ts": 1778508886854170000, "msg": "First run detected for url1 - ref2", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 195, "correlation_id": "c3d0264e-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.854Z", "written_ts": 1778508886854931000, "msg": "Trigger build for proj with params: {'GIT_URL': 'fake'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 352, "correlation_id": "c3d04444-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.855Z", "written_ts": 1778508886855108000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 382, "correlation_id": "c3d04b06-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.855Z", "written_ts": 1778508886855791000, "msg": "Trigger build for proj with params: {'GIT_URL': 'https://github.com'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 352, "correlation_id": "c3d065e6-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.855Z", "written_ts": 1778508886855957000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 382, "correlation_id": "c3d06c30-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.856Z", "written_ts": 1778508886856665000, "msg": "Trigger build for proj with params: {'GIT_URL': 'https://fake.com'}", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 352, "correlation_id": "c3d08800-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:46.856Z", "written_ts": 1778508886856838000, "msg": "Skipping build for proj because of skip-ci message", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "git_poller", "line_no": 382, "correlation_id": "c3d08ea4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:50.303Z", "written_ts": 1778508890303650000, "msg": "validation.invalid", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 190, "correlation_id": "c5de808e-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:50.303Z", "written_ts": 1778508890303799000, "msg": " --- All found errors ---", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 191, "correlation_id": "c5de808e-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:50.303Z", "written_ts": 1778508890303921000, "msg": "[\"Cannot find required key 'timeout'. Path: ''\"]", "type": "log", "logger": "pykwalify.core", "thread": "MainThread", "level": "ERROR", "module": "core", "line_no": 192, "correlation_id": "c5de808e-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:50.597Z", "written_ts": 1778508890597162000, "msg": "Failing cancelled run: proj1/1/bla", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 235, "correlation_id": "c60b49c0-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:50.881Z", "written_ts": 1778508890881887000, "msg": "marking w1 offline 81s without a check-in", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 46, "correlation_id": "c636bbd2-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:51.166Z", "written_ts": 1778508891166330000, "msg": "marking w1 offline (no pings log)", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 75, "correlation_id": "c66222cc-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:51.455Z", "written_ts": 1778508891455917000, "msg": "rotating pings log to: /tmp/tmp9bda6_6y/w1/pings.log.1778508891", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 57, "correlation_id": "c68e5306-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:51.752Z", "written_ts": 1778508891752658000, "msg": "Run has not been acked by worker: 1 ", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 269, "correlation_id": "c6bb9ad2-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.048Z", "written_ts": 1778508892048078000, "msg": "Found stuck run proj1/1/bla on worker None", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 212, "correlation_id": "c6e8ae32-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.051Z", "written_ts": 1778508892051626000, "msg": "Found stuck run proj1/1/bla on worker None", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker", "line_no": 212, "correlation_id": "c6e8ae32-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.827Z", "written_ts": 1778508892827711000, "msg": "Entering surge support for armhf: count=1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "c75fa4c4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.834Z", "written_ts": 1778508892834257000, "msg": "Exiting surge support for armhf", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 158, "correlation_id": "c75fa4c4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.834Z", "written_ts": 1778508892834523000, "msg": "Entering surge support for amd64: count=2", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "c75fa4c4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:52.836Z", "written_ts": 1778508892836432000, "msg": "Entering surge support for armhf: count=3", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "c75fa4c4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:53.127Z", "written_ts": 1778508893127084000, "msg": "Entering surge support for amd64: count=1", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 170, "correlation_id": "c78d52d4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:53.131Z", "written_ts": 1778508893131354000, "msg": "Exiting surge support for amd64", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 158, "correlation_id": "c78d52d4-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:53.418Z", "written_ts": 1778508893418503000, "msg": "truncating the pings log", "type": "log", "logger": "root", "thread": "MainThread", "level": "INFO", "module": "worker", "line_no": 60, "correlation_id": "c7b9ca76-4d43-11f1-8d5d-0242ac110002"} {"written_at": "2026-05-11T14:14:53.429Z", "written_ts": 1778508893429996000, "msg": "Unable to read: bad: Unable to load PEM file. See https://cryptography.io/en/latest/faq/#why-can-t-i-import-my-pem-file for more details. MalformedFraming", "type": "log", "logger": "root", "thread": "MainThread", "level": "ERROR", "module": "worker_jwt", "line_no": 44, "correlation_id": "c7bb8afa-4d43-11f1-8d5d-0242ac110002"} Docker not available Docker not available Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL Test requires MySQL + '[' -z ] + rm -rf /tmp/tmp.hfICGk Script completed == 2026-05-11 14:14:56.724943: Finding artifacts to upload Uploading 1 items 20583 bytes == 2026-05-11 14:14:57.607818: Analyzing junit results(/srv/gavelci-worker/runs/tmp0_9if8wx/archive/junit.xml) == 2026-05-11 14:14:58.422862: Runner has completed _ _ | \/ | \__|____|__/ | o o| Thumbs Up |___\/_|_____||_ | _____|__| | | |______| | | | | | | | | |_| |_|