From 50eeb10114b7112fa711e6daf4f4892a3c90c11c Mon Sep 17 00:00:00 2001 From: dlstjs8246 Date: Thu, 3 Jul 2025 15:48:01 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C=ED=8E=B8=20=EB=B0=8F?= =?UTF-8?q?=20=EB=AC=B8=EC=84=9C=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 1_infrastructure/README.md | 11 + .../docker}/.gitignore | 0 {docker => 1_infrastructure/docker}/README.md | 0 .../docker/ai_career_portfolio_guidelines.md | 219 ++ .../docker/ai_industry_case_studies.md | 255 ++ .../cloud_practice_environment_guide.md | 231 ++ .../docker}/deployment_guide.md | 0 .../docker}/docker-windows-vm/Dockerfile | 0 .../docker}/docker-windows-vm/README.md | 0 .../docker}/docker-windows-vm/Vagrantfile | 0 .../docker-windows-vm/docker-compose.yml | 0 .../docker}/docker-windows-vm/startup.sh | 0 .../docker}/docker_3dp/Dockerfile | 0 .../docker}/docker_3dp/README.md | 0 .../docker}/docker_3dp/docker-compose.yml | 0 .../docker/docker_3dp/printer/.gitignore | 6 + .../docker/docker_3dp/printer/README.md | 131 + .../docker/docker_3dp/printer/app.bak.py | 265 ++ .../docker/docker_3dp/printer/app.py | 339 ++ .../docker_3dp/printer/requirements.txt | 4 + .../docker/docker_3dp/printer/slicer_test.py | 337 ++ .../docker}/docker_3dp/rebuild_docker.sh | 0 .../docker}/docker_3dp/setting.sql | 0 .../docker_3dp/sites-available/default | 0 .../docker_3dp/sites-available/nextcloud.conf | 0 .../docker}/docker_3dp/start_service.sh | 0 .../docker}/docker_all/Dockerfile | 0 .../docker}/docker_all/README.md | 0 .../docker}/docker_all/docker-compose.yml | 0 .../docker}/docker_all/rebuild_docker.sh | 0 .../docker}/docker_all/setting.sql | 0 .../docker}/docker_all/start_service.sh | 0 .../docker}/docker_centos/Dockerfile | 0 .../docker}/docker_centos/Dockerfile_centos | 0 .../docker}/docker_centos/README.md | 0 .../docker_centos/docker-compose-centos.yml | 0 .../docker}/docker_centos/docker-compose.yml | 0 .../docker}/docker_centos/httpd.conf | 0 .../docker}/docker_centos/my.cnf | 0 .../docker}/docker_centos/php.ini | 0 .../docker}/docker_centos/rebuild_docker.sh | 0 .../docker}/docker_centos/setting.sql | 0 .../docker}/docker_centos/sshd_config | 0 .../docker}/docker_centos/start_service.sh | 0 .../docker}/docker_centos_desktop/Dockerfile | 0 .../docker}/docker_centos_desktop/README.md | 0 .../docker_centos_desktop/docker-compose.yml | 0 .../docker}/docker_centos_desktop/httpd.conf | 0 .../docker}/docker_centos_desktop/my.cnf | 0 .../docker}/docker_centos_desktop/php.ini | 0 .../docker_centos_desktop/rebuild_docker.sh | 0 .../docker}/docker_centos_desktop/setting.sql | 0 .../docker}/docker_centos_desktop/sshd_config | 0 .../docker}/docker_centos_desktop/ssl.conf | 0 .../docker_centos_desktop/start_service.sh | 0 .../test-installation.pl | 0 .../docker}/docker_crowling/Dockerfile | 0 .../docker}/docker_crowling/README.md | 0 .../docker_crowling/docker-compose.yml | 0 .../docker}/docker_crowling/rebuild.sh | 0 .../docker}/docker_db/Dockerfile | 0 .../docker}/docker_db/README.md | 0 .../docker}/docker_db/docker-compose.yml | 0 .../docker_db/make_root_remote_host.sh | 0 .../docker}/docker_db/rebuild.sh | 0 .../docker}/docker_db/setting.sql | 0 .../docker}/docker_db_new/Dockerfile | 0 .../docker}/docker_db_new/README.md | 0 .../docker}/docker_db_new/docker-compose.yml | 0 .../docker_db_new/make_root_remote_host.sh | 0 .../docker}/docker_db_new/rebuild.sh | 0 .../docker}/docker_db_new/setting.sql | 0 .../docker/docker_fastapi/.gitignore | 79 + .../docker/docker_fastapi/Dockerfile | 83 + .../docker/docker_fastapi/README.md | 275 ++ .../docker/docker_fastapi/docker-compose.yml | 16 + .../docker/docker_fastapi_new/.gitignore | 62 + .../docker/docker_fastapi_new/Dockerfile | 71 + .../docker/docker_fastapi_new/README.md | 71 + .../docker_fastapi_new/docker-compose.yml | 15 + .../docker}/docker_flask_proxy/Dockerfile | 0 .../docker}/docker_flask_proxy/README.md | 0 .../docker}/docker_flask_proxy/app.py | 0 .../docker_flask_proxy/docker-compose.yml | 0 .../proxy.geumdo.net/README | 0 .../proxy.geumdo.net/cert.pem | 0 .../proxy.geumdo.net/chain.pem | 0 .../proxy.geumdo.net/fullchain.pem | 0 .../proxy.geumdo.net/privkey.pem | 0 .../docker_flask_proxy/rebuild_docker.sh | 0 .../docker}/docker_gitlab/README.md | 0 .../docker}/docker_gitlab/docker-compose.yml | 0 .../docker}/docker_java/Dockerfile | 0 .../docker}/docker_java/README.md | 0 .../docker}/docker_java/docker-compose.yml | 0 .../docker}/docker_java/rebuild_docker.sh | 0 .../docker}/docker_java/setting.sql | 0 .../ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt | 0 .../ssl/gbmax.or.kr_ssl/TrustedRootG2.crt | 0 .../ssl/gbmax.or.kr_ssl/gbmax.or.kr.key | Bin .../ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b | 0 .../ssl/max.or.kr_ssl/DigiCertCAG1.crt | 0 .../ssl/max.or.kr_ssl/TrustedRootG2.crt | 0 .../ssl/max.or.kr_ssl/max.or.kr.key | Bin .../ssl/max.or.kr_ssl/max.or.kr.p7b | 0 .../docker}/docker_java/start_service.sh | 0 .../docker}/docker_jenkins/Dockerfile | 0 .../docker}/docker_jenkins/README.md | 0 .../docker}/docker_jenkins/docker-compose.yml | 0 .../docker}/docker_jenkins/rebuild.sh | 0 .../docker}/docker_jenkins/start_service.sh | 0 .../docker}/docker_jupyter/Dockerfile | 0 .../docker}/docker_jupyter/README.md | 0 .../docker}/docker_jupyter/docker-compose.yml | 0 .../notebooks/.Trash-0/files/Untitled 1.ipynb | 0 .../notebooks/.Trash-0/files/Untitled.ipynb | 0 .../notebooks/.Trash-0/files/Untitled1.ipynb | 0 .../notebooks/.Trash-0/files/Untitled2.ipynb | 0 .../.Trash-0/files/llama3.1_koalpaca.ipynb | 0 .../.Trash-0/info/Untitled 1.ipynb.trashinfo | 0 .../.Trash-0/info/Untitled Folder.trashinfo | 0 .../.Trash-0/info/Untitled.ipynb.trashinfo | 0 .../.Trash-0/info/Untitled1.ipynb.trashinfo | 0 .../.Trash-0/info/Untitled2.ipynb.trashinfo | 0 .../info/llama3.1_koalpaca.ipynb.trashinfo | 0 .../docker_jupyter/notebooks/Untitled.ipynb | 0 .../docker_jupyter/notebooks/bi-lstm-1.ipynb | 0 .../docker_jupyter/notebooks/gpucheck.ipynb | 0 .../docker}/docker_jupyter/notebooks/test.txt | 0 .../docker}/docker_jupyter/rebuild.sh | 0 .../docker}/docker_jupyter/requirements.txt | 0 .../docker}/docker_jupyter/start_service.sh | 0 .../docker}/docker_mailserver/README.md | 0 .../docker}/docker_mailserver/certs/ca.crt | 0 .../docker_mailserver/certs/dh4096.pem | 0 .../certs/letsencrypt/README | 0 .../certs/letsencrypt/_account/private.pem | 0 .../certs/letsencrypt/_account/public.pem | 0 .../certs/letsencrypt/cert.pem | 0 .../certs/letsencrypt/chain.pem | 0 .../certs/letsencrypt/fullchain.pem | 0 .../letsencrypt/mail.geumdo.net/cert.pem | 0 .../letsencrypt/mail.geumdo.net/chain.pem | 0 .../letsencrypt/mail.geumdo.net/fullchain.pem | 0 .../letsencrypt/mail.geumdo.net/last.csr | 0 .../letsencrypt/mail.geumdo.net/private.pem | 0 .../letsencrypt/mail.geumdo.net/public.pem | 0 .../certs/letsencrypt/privkey.pem | 0 .../docker_mailserver/certs/server.crt | 0 .../docker_mailserver/certs/server.key | 0 .../docker_mailserver/docker-compose.yml | 0 .../docker}/docker_mailserver/rebuild.sh | 0 .../docker}/docker_metaverse/Dockerfile | 0 .../docker}/docker_metaverse/README.md | 0 .../docker_metaverse/docker-compose.yml | 0 .../etc/nginx/sites-available/default | 0 .../home/ubuntu/node/index.js | 0 .../home/ubuntu/node/m_fword.js | 0 .../home/ubuntu/node/socket.js | 0 .../home/ubuntu/node/test_chat.html | 0 .../home/ubuntu/node/test_socket_chat.html | 0 .../home/ubuntu/node/test_upload.html | 0 .../docker}/docker_metaverse/nodam.sql | 0 .../docker}/docker_metaverse/readme.txt | 0 .../docker_metaverse/rebuild_docker.sh | 0 .../docker}/docker_metaverse/start_service.sh | 0 .../docker}/docker_nginx_proxy/Dockerfile | 0 .../docker}/docker_nginx_proxy/README.md | 0 .../docker_nginx_proxy/docker-compose.yml | 0 ....updated-options-ssl-nginx-conf-digest.txt | 0 .../.updated-ssl-dhparams-pem-digest.txt | 0 .../archive/dip-zero.geumdo.net/cert1.pem | 0 .../archive/dip-zero.geumdo.net/cert2.pem | 0 .../archive/dip-zero.geumdo.net/cert3.pem | 0 .../archive/dip-zero.geumdo.net/chain1.pem | 0 .../archive/dip-zero.geumdo.net/chain2.pem | 0 .../archive/dip-zero.geumdo.net/chain3.pem | 0 .../dip-zero.geumdo.net/fullchain1.pem | 0 .../dip-zero.geumdo.net/fullchain2.pem | 0 .../dip-zero.geumdo.net/fullchain3.pem | 0 .../archive/dip-zero.geumdo.net/privkey1.pem | 0 .../archive/dip-zero.geumdo.net/privkey2.pem | 0 .../archive/dip-zero.geumdo.net/privkey3.pem | 0 .../archive/mail.geumdo.net/cert1.pem | 0 .../archive/mail.geumdo.net/cert2.pem | 0 .../archive/mail.geumdo.net/cert3.pem | 0 .../archive/mail.geumdo.net/chain1.pem | 0 .../archive/mail.geumdo.net/chain2.pem | 0 .../archive/mail.geumdo.net/chain3.pem | 0 .../archive/mail.geumdo.net/fullchain1.pem | 0 .../archive/mail.geumdo.net/fullchain2.pem | 0 .../archive/mail.geumdo.net/fullchain3.pem | 0 .../archive/mail.geumdo.net/privkey1.pem | 0 .../archive/mail.geumdo.net/privkey2.pem | 0 .../archive/mail.geumdo.net/privkey3.pem | 0 .../archive/proxy.geumdo.net/cert1.pem | 0 .../archive/proxy.geumdo.net/chain1.pem | 0 .../archive/proxy.geumdo.net/fullchain1.pem | 0 .../archive/proxy.geumdo.net/privkey1.pem | 0 .../docker_nginx_proxy/letsencrypt/cli.ini | 0 .../letsencrypt/csr/0000_csr-certbot.pem | 0 .../letsencrypt/csr/0001_csr-certbot.pem | 0 .../letsencrypt/csr/0002_csr-certbot.pem | 0 .../letsencrypt/csr/0003_csr-certbot.pem | 0 .../letsencrypt/csr/0004_csr-certbot.pem | 0 .../letsencrypt/csr/0005_csr-certbot.pem | 0 .../letsencrypt/csr/0006_csr-certbot.pem | 0 .../letsencrypt/csr/0007_csr-certbot.pem | 0 .../letsencrypt/csr/0008_csr-certbot.pem | 0 .../letsencrypt/csr/0009_csr-certbot.pem | 0 .../letsencrypt/csr/0010_csr-certbot.pem | 0 .../letsencrypt/csr/0011_csr-certbot.pem | 0 .../letsencrypt/csr/0012_csr-certbot.pem | 0 .../letsencrypt/csr/0013_csr-certbot.pem | 0 .../letsencrypt/csr/0014_csr-certbot.pem | 0 .../letsencrypt/csr/0015_csr-certbot.pem | 0 .../letsencrypt/csr/0016_csr-certbot.pem | 0 .../letsencrypt/csr/0017_csr-certbot.pem | 0 .../letsencrypt/csr/0018_csr-certbot.pem | 0 .../letsencrypt/csr/0019_csr-certbot.pem | 0 .../letsencrypt/csr/0020_csr-certbot.pem | 0 .../letsencrypt/csr/0021_csr-certbot.pem | 0 .../letsencrypt/csr/0022_csr-certbot.pem | 0 .../letsencrypt/csr/0023_csr-certbot.pem | 0 .../letsencrypt/csr/0024_csr-certbot.pem | 0 .../letsencrypt/csr/0025_csr-certbot.pem | 0 .../letsencrypt/csr/0026_csr-certbot.pem | 0 .../letsencrypt/csr/0027_csr-certbot.pem | 0 .../letsencrypt/csr/0028_csr-certbot.pem | 0 .../letsencrypt/csr/0029_csr-certbot.pem | 0 .../letsencrypt/csr/0030_csr-certbot.pem | 0 .../letsencrypt/csr/0031_csr-certbot.pem | 0 .../letsencrypt/csr/0032_csr-certbot.pem | 0 .../letsencrypt/csr/0033_csr-certbot.pem | 0 .../letsencrypt/csr/0034_csr-certbot.pem | 0 .../letsencrypt/csr/0035_csr-certbot.pem | 0 .../letsencrypt/csr/0036_csr-certbot.pem | 0 .../letsencrypt/csr/0037_csr-certbot.pem | 0 .../letsencrypt/csr/0038_csr-certbot.pem | 0 .../letsencrypt/csr/0039_csr-certbot.pem | 0 .../letsencrypt/csr/0040_csr-certbot.pem | 0 .../letsencrypt/csr/0041_csr-certbot.pem | 0 .../letsencrypt/csr/0042_csr-certbot.pem | 0 .../letsencrypt/csr/0043_csr-certbot.pem | 0 .../letsencrypt/csr/0044_csr-certbot.pem | 0 .../letsencrypt/csr/0045_csr-certbot.pem | 0 .../letsencrypt/csr/0046_csr-certbot.pem | 0 .../letsencrypt/csr/0047_csr-certbot.pem | 0 .../letsencrypt/csr/0048_csr-certbot.pem | 0 .../letsencrypt/csr/0049_csr-certbot.pem | 0 .../letsencrypt/csr/0050_csr-certbot.pem | 0 .../letsencrypt/csr/0051_csr-certbot.pem | 0 .../letsencrypt/csr/0052_csr-certbot.pem | 0 .../letsencrypt/csr/0053_csr-certbot.pem | 0 .../letsencrypt/csr/0054_csr-certbot.pem | 0 .../letsencrypt/csr/0055_csr-certbot.pem | 0 .../letsencrypt/csr/0056_csr-certbot.pem | 0 .../letsencrypt/csr/0057_csr-certbot.pem | 0 .../letsencrypt/csr/0058_csr-certbot.pem | 0 .../letsencrypt/csr/0059_csr-certbot.pem | 0 .../letsencrypt/csr/0060_csr-certbot.pem | 0 .../letsencrypt/csr/0061_csr-certbot.pem | 0 .../letsencrypt/csr/0062_csr-certbot.pem | 0 .../letsencrypt/csr/0063_csr-certbot.pem | 0 .../letsencrypt/csr/0064_csr-certbot.pem | 0 .../letsencrypt/csr/0065_csr-certbot.pem | 0 .../letsencrypt/csr/0066_csr-certbot.pem | 0 .../letsencrypt/csr/0067_csr-certbot.pem | 0 .../letsencrypt/csr/0068_csr-certbot.pem | 0 .../letsencrypt/csr/0069_csr-certbot.pem | 0 .../letsencrypt/csr/0070_csr-certbot.pem | 0 .../letsencrypt/csr/0071_csr-certbot.pem | 0 .../letsencrypt/csr/0072_csr-certbot.pem | 0 .../letsencrypt/csr/0073_csr-certbot.pem | 0 .../letsencrypt/csr/0074_csr-certbot.pem | 0 .../letsencrypt/csr/0075_csr-certbot.pem | 0 .../letsencrypt/csr/0076_csr-certbot.pem | 0 .../letsencrypt/csr/0077_csr-certbot.pem | 0 .../letsencrypt/csr/0078_csr-certbot.pem | 0 .../letsencrypt/csr/0079_csr-certbot.pem | 0 .../letsencrypt/csr/0080_csr-certbot.pem | 0 .../letsencrypt/csr/0081_csr-certbot.pem | 0 .../letsencrypt/csr/0082_csr-certbot.pem | 0 .../letsencrypt/csr/0083_csr-certbot.pem | 0 .../letsencrypt/csr/0084_csr-certbot.pem | 0 .../letsencrypt/csr/0085_csr-certbot.pem | 0 .../letsencrypt/csr/0086_csr-certbot.pem | 0 .../letsencrypt/csr/0087_csr-certbot.pem | 0 .../letsencrypt/csr/0088_csr-certbot.pem | 0 .../letsencrypt/csr/0089_csr-certbot.pem | 0 .../letsencrypt/csr/0090_csr-certbot.pem | 0 .../letsencrypt/csr/0091_csr-certbot.pem | 0 .../letsencrypt/csr/0092_csr-certbot.pem | 0 .../letsencrypt/csr/0093_csr-certbot.pem | 0 .../letsencrypt/csr/0094_csr-certbot.pem | 0 .../letsencrypt/csr/0095_csr-certbot.pem | 0 .../letsencrypt/csr/0096_csr-certbot.pem | 0 .../letsencrypt/csr/0097_csr-certbot.pem | 0 .../letsencrypt/csr/0098_csr-certbot.pem | 0 .../letsencrypt/csr/0099_csr-certbot.pem | 0 .../letsencrypt/csr/0100_csr-certbot.pem | 0 .../letsencrypt/csr/0101_csr-certbot.pem | 0 .../letsencrypt/csr/0102_csr-certbot.pem | 0 .../letsencrypt/csr/0103_csr-certbot.pem | 0 .../letsencrypt/csr/0104_csr-certbot.pem | 0 .../letsencrypt/csr/0105_csr-certbot.pem | 0 .../letsencrypt/csr/0106_csr-certbot.pem | 0 .../letsencrypt/csr/0107_csr-certbot.pem | 0 .../letsencrypt/csr/0108_csr-certbot.pem | 0 .../letsencrypt/csr/0109_csr-certbot.pem | 0 .../letsencrypt/csr/0110_csr-certbot.pem | 0 .../letsencrypt/csr/0111_csr-certbot.pem | 0 .../letsencrypt/csr/0112_csr-certbot.pem | 0 .../letsencrypt/csr/0113_csr-certbot.pem | 0 .../letsencrypt/csr/0114_csr-certbot.pem | 0 .../letsencrypt/csr/0115_csr-certbot.pem | 0 .../letsencrypt/csr/0116_csr-certbot.pem | 0 .../letsencrypt/csr/0117_csr-certbot.pem | 0 .../letsencrypt/csr/0118_csr-certbot.pem | 0 .../letsencrypt/csr/0119_csr-certbot.pem | 0 .../letsencrypt/csr/0120_csr-certbot.pem | 0 .../letsencrypt/csr/0121_csr-certbot.pem | 0 .../letsencrypt/csr/0122_csr-certbot.pem | 0 .../letsencrypt/csr/0123_csr-certbot.pem | 0 .../letsencrypt/csr/0124_csr-certbot.pem | 0 .../letsencrypt/csr/0125_csr-certbot.pem | 0 .../letsencrypt/csr/0126_csr-certbot.pem | 0 .../letsencrypt/csr/0127_csr-certbot.pem | 0 .../letsencrypt/csr/0128_csr-certbot.pem | 0 .../letsencrypt/csr/0129_csr-certbot.pem | 0 .../letsencrypt/csr/0130_csr-certbot.pem | 0 .../letsencrypt/csr/0131_csr-certbot.pem | 0 .../letsencrypt/csr/0132_csr-certbot.pem | 0 .../letsencrypt/csr/0133_csr-certbot.pem | 0 .../letsencrypt/csr/0134_csr-certbot.pem | 0 .../letsencrypt/csr/0135_csr-certbot.pem | 0 .../letsencrypt/csr/0136_csr-certbot.pem | 0 .../letsencrypt/csr/0137_csr-certbot.pem | 0 .../letsencrypt/csr/0138_csr-certbot.pem | 0 .../letsencrypt/csr/0139_csr-certbot.pem | 0 .../letsencrypt/csr/0140_csr-certbot.pem | 0 .../letsencrypt/csr/0141_csr-certbot.pem | 0 .../letsencrypt/csr/0142_csr-certbot.pem | 0 .../letsencrypt/csr/0143_csr-certbot.pem | 0 .../letsencrypt/csr/0144_csr-certbot.pem | 0 .../letsencrypt/csr/0145_csr-certbot.pem | 0 .../letsencrypt/csr/0146_csr-certbot.pem | 0 .../letsencrypt/csr/0147_csr-certbot.pem | 0 .../letsencrypt/csr/0148_csr-certbot.pem | 0 .../letsencrypt/csr/0149_csr-certbot.pem | 0 .../letsencrypt/csr/0150_csr-certbot.pem | 0 .../letsencrypt/csr/0151_csr-certbot.pem | 0 .../letsencrypt/csr/0152_csr-certbot.pem | 0 .../letsencrypt/csr/0153_csr-certbot.pem | 0 .../letsencrypt/csr/0154_csr-certbot.pem | 0 .../letsencrypt/csr/0155_csr-certbot.pem | 0 .../letsencrypt/csr/0156_csr-certbot.pem | 0 .../letsencrypt/csr/0157_csr-certbot.pem | 0 .../letsencrypt/csr/0158_csr-certbot.pem | 0 .../letsencrypt/csr/0159_csr-certbot.pem | 0 .../letsencrypt/csr/0160_csr-certbot.pem | 0 .../letsencrypt/csr/0161_csr-certbot.pem | 0 .../letsencrypt/csr/0162_csr-certbot.pem | 0 .../letsencrypt/csr/0163_csr-certbot.pem | 0 .../letsencrypt/csr/0164_csr-certbot.pem | 0 .../letsencrypt/csr/0165_csr-certbot.pem | 0 .../letsencrypt/csr/0166_csr-certbot.pem | 0 .../letsencrypt/csr/0167_csr-certbot.pem | 0 .../letsencrypt/csr/0168_csr-certbot.pem | 0 .../letsencrypt/csr/0169_csr-certbot.pem | 0 .../letsencrypt/csr/0170_csr-certbot.pem | 0 .../letsencrypt/csr/0171_csr-certbot.pem | 0 .../letsencrypt/csr/0172_csr-certbot.pem | 0 .../letsencrypt/csr/0173_csr-certbot.pem | 0 .../letsencrypt/csr/0174_csr-certbot.pem | 0 .../letsencrypt/csr/0175_csr-certbot.pem | 0 .../letsencrypt/csr/0176_csr-certbot.pem | 0 .../letsencrypt/csr/0177_csr-certbot.pem | 0 .../letsencrypt/csr/0178_csr-certbot.pem | 0 .../letsencrypt/csr/0179_csr-certbot.pem | 0 .../letsencrypt/csr/0180_csr-certbot.pem | 0 .../letsencrypt/csr/0181_csr-certbot.pem | 0 .../letsencrypt/csr/0182_csr-certbot.pem | 0 .../letsencrypt/csr/0183_csr-certbot.pem | 0 .../letsencrypt/csr/0184_csr-certbot.pem | 0 .../letsencrypt/csr/0185_csr-certbot.pem | 0 .../letsencrypt/csr/0186_csr-certbot.pem | 0 .../letsencrypt/csr/0187_csr-certbot.pem | 0 .../letsencrypt/csr/0188_csr-certbot.pem | 0 .../letsencrypt/csr/0189_csr-certbot.pem | 0 .../letsencrypt/csr/0190_csr-certbot.pem | 0 .../letsencrypt/csr/0191_csr-certbot.pem | 0 .../letsencrypt/csr/0192_csr-certbot.pem | 0 .../letsencrypt/csr/0193_csr-certbot.pem | 0 .../letsencrypt/csr/0194_csr-certbot.pem | 0 .../letsencrypt/csr/0195_csr-certbot.pem | 0 .../letsencrypt/csr/0196_csr-certbot.pem | 0 .../letsencrypt/csr/0197_csr-certbot.pem | 0 .../letsencrypt/csr/0198_csr-certbot.pem | 0 .../letsencrypt/csr/0199_csr-certbot.pem | 0 .../letsencrypt/csr/0200_csr-certbot.pem | 0 .../letsencrypt/csr/0201_csr-certbot.pem | 0 .../letsencrypt/csr/0202_csr-certbot.pem | 0 .../letsencrypt/csr/0203_csr-certbot.pem | 0 .../letsencrypt/csr/0204_csr-certbot.pem | 0 .../letsencrypt/csr/0205_csr-certbot.pem | 0 .../letsencrypt/csr/0206_csr-certbot.pem | 0 .../letsencrypt/csr/0207_csr-certbot.pem | 0 .../letsencrypt/csr/0208_csr-certbot.pem | 0 .../letsencrypt/csr/0209_csr-certbot.pem | 0 .../letsencrypt/csr/0210_csr-certbot.pem | 0 .../letsencrypt/csr/0211_csr-certbot.pem | 0 .../letsencrypt/csr/0212_csr-certbot.pem | 0 .../letsencrypt/csr/0213_csr-certbot.pem | 0 .../letsencrypt/csr/0214_csr-certbot.pem | 0 .../letsencrypt/csr/0215_csr-certbot.pem | 0 .../letsencrypt/csr/0216_csr-certbot.pem | 0 .../letsencrypt/csr/0217_csr-certbot.pem | 0 .../letsencrypt/csr/0218_csr-certbot.pem | 0 .../letsencrypt/csr/0219_csr-certbot.pem | 0 .../letsencrypt/csr/0220_csr-certbot.pem | 0 .../letsencrypt/csr/0221_csr-certbot.pem | 0 .../letsencrypt/csr/0222_csr-certbot.pem | 0 .../letsencrypt/csr/0223_csr-certbot.pem | 0 .../letsencrypt/csr/0224_csr-certbot.pem | 0 .../letsencrypt/csr/0225_csr-certbot.pem | 0 .../letsencrypt/csr/0226_csr-certbot.pem | 0 .../letsencrypt/csr/0227_csr-certbot.pem | 0 .../letsencrypt/csr/0228_csr-certbot.pem | 0 .../letsencrypt/csr/0229_csr-certbot.pem | 0 .../letsencrypt/csr/0230_csr-certbot.pem | 0 .../letsencrypt/csr/0231_csr-certbot.pem | 0 .../letsencrypt/csr/0232_csr-certbot.pem | 0 .../letsencrypt/csr/0233_csr-certbot.pem | 0 .../letsencrypt/csr/0234_csr-certbot.pem | 0 .../letsencrypt/csr/0235_csr-certbot.pem | 0 .../letsencrypt/csr/0236_csr-certbot.pem | 0 .../letsencrypt/csr/0237_csr-certbot.pem | 0 .../letsencrypt/csr/0238_csr-certbot.pem | 0 .../letsencrypt/csr/0239_csr-certbot.pem | 0 .../letsencrypt/csr/0240_csr-certbot.pem | 0 .../letsencrypt/csr/0241_csr-certbot.pem | 0 .../letsencrypt/csr/0242_csr-certbot.pem | 0 .../letsencrypt/csr/0243_csr-certbot.pem | 0 .../letsencrypt/csr/0244_csr-certbot.pem | 0 .../letsencrypt/csr/0245_csr-certbot.pem | 0 .../letsencrypt/csr/0246_csr-certbot.pem | 0 .../letsencrypt/csr/0247_csr-certbot.pem | 0 .../letsencrypt/csr/0248_csr-certbot.pem | 0 .../letsencrypt/csr/0249_csr-certbot.pem | 0 .../letsencrypt/csr/0250_csr-certbot.pem | 0 .../letsencrypt/csr/0251_csr-certbot.pem | 0 .../letsencrypt/csr/0252_csr-certbot.pem | 0 .../letsencrypt/csr/0253_csr-certbot.pem | 0 .../letsencrypt/csr/0254_csr-certbot.pem | 0 .../letsencrypt/csr/0255_csr-certbot.pem | 0 .../letsencrypt/csr/0256_csr-certbot.pem | 0 .../letsencrypt/csr/0257_csr-certbot.pem | 0 .../letsencrypt/csr/0258_csr-certbot.pem | 0 .../letsencrypt/csr/0259_csr-certbot.pem | 0 .../letsencrypt/csr/0260_csr-certbot.pem | 0 .../letsencrypt/csr/0261_csr-certbot.pem | 0 .../letsencrypt/csr/0262_csr-certbot.pem | 0 .../letsencrypt/csr/0263_csr-certbot.pem | 0 .../letsencrypt/csr/0264_csr-certbot.pem | 0 .../letsencrypt/csr/0265_csr-certbot.pem | 0 .../letsencrypt/csr/0266_csr-certbot.pem | 0 .../letsencrypt/csr/0267_csr-certbot.pem | 0 .../letsencrypt/csr/0268_csr-certbot.pem | 0 .../letsencrypt/csr/0269_csr-certbot.pem | 0 .../letsencrypt/csr/0270_csr-certbot.pem | 0 .../letsencrypt/csr/0271_csr-certbot.pem | 0 .../letsencrypt/csr/0272_csr-certbot.pem | 0 .../letsencrypt/csr/0273_csr-certbot.pem | 0 .../letsencrypt/csr/0274_csr-certbot.pem | 0 .../letsencrypt/csr/0275_csr-certbot.pem | 0 .../letsencrypt/csr/0276_csr-certbot.pem | 0 .../letsencrypt/csr/0277_csr-certbot.pem | 0 .../letsencrypt/csr/0278_csr-certbot.pem | 0 .../letsencrypt/csr/0279_csr-certbot.pem | 0 .../letsencrypt/csr/0280_csr-certbot.pem | 0 .../letsencrypt/csr/0281_csr-certbot.pem | 0 .../letsencrypt/csr/0282_csr-certbot.pem | 0 .../letsencrypt/csr/0283_csr-certbot.pem | 0 .../letsencrypt/csr/0284_csr-certbot.pem | 0 .../letsencrypt/csr/0285_csr-certbot.pem | 0 .../letsencrypt/csr/0286_csr-certbot.pem | 0 .../letsencrypt/csr/0287_csr-certbot.pem | 0 .../letsencrypt/csr/0288_csr-certbot.pem | 0 .../letsencrypt/csr/0289_csr-certbot.pem | 0 .../letsencrypt/csr/0290_csr-certbot.pem | 0 .../letsencrypt/csr/0291_csr-certbot.pem | 0 .../letsencrypt/csr/0292_csr-certbot.pem | 0 .../letsencrypt/csr/0293_csr-certbot.pem | 0 .../letsencrypt/csr/0294_csr-certbot.pem | 0 .../letsencrypt/csr/0295_csr-certbot.pem | 0 .../letsencrypt/csr/0296_csr-certbot.pem | 0 .../letsencrypt/csr/0297_csr-certbot.pem | 0 .../letsencrypt/csr/0298_csr-certbot.pem | 0 .../letsencrypt/csr/0299_csr-certbot.pem | 0 .../letsencrypt/csr/0300_csr-certbot.pem | 0 .../letsencrypt/csr/0301_csr-certbot.pem | 0 .../letsencrypt/csr/0302_csr-certbot.pem | 0 .../letsencrypt/csr/0303_csr-certbot.pem | 0 .../letsencrypt/csr/0304_csr-certbot.pem | 0 .../letsencrypt/csr/0305_csr-certbot.pem | 0 .../letsencrypt/csr/0306_csr-certbot.pem | 0 .../letsencrypt/csr/0307_csr-certbot.pem | 0 .../letsencrypt/csr/0308_csr-certbot.pem | 0 .../letsencrypt/csr/0309_csr-certbot.pem | 0 .../letsencrypt/csr/0310_csr-certbot.pem | 0 .../letsencrypt/csr/0311_csr-certbot.pem | 0 .../letsencrypt/csr/0312_csr-certbot.pem | 0 .../letsencrypt/csr/0313_csr-certbot.pem | 0 .../letsencrypt/csr/0314_csr-certbot.pem | 0 .../letsencrypt/csr/0315_csr-certbot.pem | 0 .../letsencrypt/csr/0316_csr-certbot.pem | 0 .../letsencrypt/csr/0317_csr-certbot.pem | 0 .../letsencrypt/csr/0318_csr-certbot.pem | 0 .../letsencrypt/csr/0319_csr-certbot.pem | 0 .../letsencrypt/csr/0320_csr-certbot.pem | 0 .../letsencrypt/csr/0321_csr-certbot.pem | 0 .../letsencrypt/csr/0322_csr-certbot.pem | 0 .../letsencrypt/csr/0323_csr-certbot.pem | 0 .../letsencrypt/csr/0324_csr-certbot.pem | 0 .../letsencrypt/csr/0325_csr-certbot.pem | 0 .../letsencrypt/csr/0326_csr-certbot.pem | 0 .../letsencrypt/csr/0327_csr-certbot.pem | 0 .../letsencrypt/csr/0328_csr-certbot.pem | 0 .../letsencrypt/csr/0329_csr-certbot.pem | 0 .../letsencrypt/csr/0330_csr-certbot.pem | 0 .../letsencrypt/csr/0331_csr-certbot.pem | 0 .../letsencrypt/csr/0332_csr-certbot.pem | 0 .../letsencrypt/csr/0333_csr-certbot.pem | 0 .../letsencrypt/csr/0334_csr-certbot.pem | 0 .../letsencrypt/csr/0335_csr-certbot.pem | 0 .../letsencrypt/csr/0336_csr-certbot.pem | 0 .../letsencrypt/csr/0337_csr-certbot.pem | 0 .../letsencrypt/csr/0338_csr-certbot.pem | 0 .../letsencrypt/csr/0339_csr-certbot.pem | 0 .../letsencrypt/csr/0340_csr-certbot.pem | 0 .../letsencrypt/csr/0341_csr-certbot.pem | 0 .../letsencrypt/csr/0342_csr-certbot.pem | 0 .../letsencrypt/csr/0343_csr-certbot.pem | 0 .../letsencrypt/csr/0344_csr-certbot.pem | 0 .../letsencrypt/csr/0345_csr-certbot.pem | 0 .../letsencrypt/csr/0346_csr-certbot.pem | 0 .../letsencrypt/csr/0347_csr-certbot.pem | 0 .../letsencrypt/csr/0348_csr-certbot.pem | 0 .../letsencrypt/csr/0349_csr-certbot.pem | 0 .../letsencrypt/csr/0350_csr-certbot.pem | 0 .../letsencrypt/csr/0351_csr-certbot.pem | 0 .../letsencrypt/csr/0352_csr-certbot.pem | 0 .../letsencrypt/csr/0353_csr-certbot.pem | 0 .../letsencrypt/csr/0354_csr-certbot.pem | 0 .../letsencrypt/csr/0355_csr-certbot.pem | 0 .../letsencrypt/csr/0356_csr-certbot.pem | 0 .../letsencrypt/csr/0357_csr-certbot.pem | 0 .../letsencrypt/csr/0358_csr-certbot.pem | 0 .../letsencrypt/csr/0359_csr-certbot.pem | 0 .../letsencrypt/csr/0360_csr-certbot.pem | 0 .../letsencrypt/csr/0361_csr-certbot.pem | 0 .../letsencrypt/csr/0362_csr-certbot.pem | 0 .../letsencrypt/csr/0363_csr-certbot.pem | 0 .../letsencrypt/csr/0364_csr-certbot.pem | 0 .../letsencrypt/csr/0365_csr-certbot.pem | 0 .../letsencrypt/csr/0366_csr-certbot.pem | 0 .../letsencrypt/csr/0367_csr-certbot.pem | 0 .../letsencrypt/csr/0368_csr-certbot.pem | 0 .../letsencrypt/csr/0369_csr-certbot.pem | 0 .../letsencrypt/csr/0370_csr-certbot.pem | 0 .../letsencrypt/csr/0371_csr-certbot.pem | 0 .../letsencrypt/csr/0372_csr-certbot.pem | 0 .../letsencrypt/csr/0373_csr-certbot.pem | 0 .../letsencrypt/csr/0374_csr-certbot.pem | 0 .../letsencrypt/csr/0375_csr-certbot.pem | 0 .../letsencrypt/csr/0376_csr-certbot.pem | 0 .../letsencrypt/csr/0377_csr-certbot.pem | 0 .../letsencrypt/csr/0378_csr-certbot.pem | 0 .../letsencrypt/csr/0379_csr-certbot.pem | 0 .../letsencrypt/csr/0380_csr-certbot.pem | 0 .../letsencrypt/csr/0381_csr-certbot.pem | 0 .../letsencrypt/csr/0382_csr-certbot.pem | 0 .../letsencrypt/csr/0383_csr-certbot.pem | 0 .../letsencrypt/csr/0384_csr-certbot.pem | 0 .../letsencrypt/csr/0385_csr-certbot.pem | 0 .../letsencrypt/csr/0386_csr-certbot.pem | 0 .../letsencrypt/csr/0387_csr-certbot.pem | 0 .../letsencrypt/csr/0388_csr-certbot.pem | 0 .../letsencrypt/csr/0389_csr-certbot.pem | 0 .../letsencrypt/csr/0390_csr-certbot.pem | 0 .../letsencrypt/csr/0391_csr-certbot.pem | 0 .../letsencrypt/csr/0392_csr-certbot.pem | 0 .../letsencrypt/csr/0393_csr-certbot.pem | 0 .../letsencrypt/csr/0394_csr-certbot.pem | 0 .../letsencrypt/csr/0395_csr-certbot.pem | 0 .../letsencrypt/csr/0396_csr-certbot.pem | 0 .../letsencrypt/csr/0397_csr-certbot.pem | 0 .../letsencrypt/csr/0398_csr-certbot.pem | 0 .../letsencrypt/csr/0399_csr-certbot.pem | 0 .../letsencrypt/csr/0400_csr-certbot.pem | 0 .../letsencrypt/csr/0401_csr-certbot.pem | 0 .../letsencrypt/csr/0402_csr-certbot.pem | 0 .../letsencrypt/csr/0403_csr-certbot.pem | 0 .../letsencrypt/csr/0404_csr-certbot.pem | 0 .../letsencrypt/csr/0405_csr-certbot.pem | 0 .../letsencrypt/csr/0406_csr-certbot.pem | 0 .../letsencrypt/csr/0407_csr-certbot.pem | 0 .../letsencrypt/csr/0408_csr-certbot.pem | 0 .../letsencrypt/csr/0409_csr-certbot.pem | 0 .../letsencrypt/csr/0410_csr-certbot.pem | 0 .../letsencrypt/csr/0411_csr-certbot.pem | 0 .../letsencrypt/csr/0412_csr-certbot.pem | 0 .../letsencrypt/csr/0413_csr-certbot.pem | 0 .../letsencrypt/csr/0414_csr-certbot.pem | 0 .../letsencrypt/csr/0415_csr-certbot.pem | 0 .../letsencrypt/csr/0416_csr-certbot.pem | 0 .../letsencrypt/csr/0417_csr-certbot.pem | 0 .../letsencrypt/csr/0418_csr-certbot.pem | 0 .../letsencrypt/csr/0419_csr-certbot.pem | 0 .../letsencrypt/csr/0420_csr-certbot.pem | 0 .../letsencrypt/csr/0421_csr-certbot.pem | 0 .../letsencrypt/csr/0422_csr-certbot.pem | 0 .../letsencrypt/csr/0423_csr-certbot.pem | 0 .../letsencrypt/csr/0424_csr-certbot.pem | 0 .../letsencrypt/csr/0425_csr-certbot.pem | 0 .../letsencrypt/csr/0426_csr-certbot.pem | 0 .../letsencrypt/csr/0427_csr-certbot.pem | 0 .../letsencrypt/csr/0428_csr-certbot.pem | 0 .../letsencrypt/csr/0429_csr-certbot.pem | 0 .../letsencrypt/csr/0430_csr-certbot.pem | 0 .../letsencrypt/csr/0431_csr-certbot.pem | 0 .../letsencrypt/csr/0432_csr-certbot.pem | 0 .../letsencrypt/csr/0433_csr-certbot.pem | 0 .../letsencrypt/csr/0434_csr-certbot.pem | 0 .../letsencrypt/csr/0435_csr-certbot.pem | 0 .../letsencrypt/csr/0436_csr-certbot.pem | 0 .../letsencrypt/csr/0437_csr-certbot.pem | 0 .../letsencrypt/csr/0438_csr-certbot.pem | 0 .../letsencrypt/csr/0439_csr-certbot.pem | 0 .../letsencrypt/csr/0440_csr-certbot.pem | 0 .../letsencrypt/csr/0441_csr-certbot.pem | 0 .../letsencrypt/csr/0442_csr-certbot.pem | 0 .../letsencrypt/csr/0443_csr-certbot.pem | 0 .../letsencrypt/csr/0444_csr-certbot.pem | 0 .../letsencrypt/csr/0445_csr-certbot.pem | 0 .../letsencrypt/csr/0446_csr-certbot.pem | 0 .../letsencrypt/csr/0447_csr-certbot.pem | 0 .../letsencrypt/csr/0448_csr-certbot.pem | 0 .../letsencrypt/csr/0449_csr-certbot.pem | 0 .../letsencrypt/csr/0450_csr-certbot.pem | 0 .../letsencrypt/csr/0451_csr-certbot.pem | 0 .../letsencrypt/csr/0452_csr-certbot.pem | 0 .../letsencrypt/csr/0453_csr-certbot.pem | 0 .../letsencrypt/csr/0454_csr-certbot.pem | 0 .../letsencrypt/csr/0455_csr-certbot.pem | 0 .../letsencrypt/csr/0456_csr-certbot.pem | 0 .../letsencrypt/csr/0457_csr-certbot.pem | 0 .../letsencrypt/csr/0458_csr-certbot.pem | 0 .../letsencrypt/csr/0459_csr-certbot.pem | 0 .../letsencrypt/csr/0460_csr-certbot.pem | 0 .../letsencrypt/csr/0461_csr-certbot.pem | 0 .../letsencrypt/csr/0462_csr-certbot.pem | 0 .../letsencrypt/csr/0463_csr-certbot.pem | 0 .../letsencrypt/csr/0464_csr-certbot.pem | 0 .../letsencrypt/csr/0465_csr-certbot.pem | 0 .../letsencrypt/csr/0466_csr-certbot.pem | 0 .../letsencrypt/csr/0467_csr-certbot.pem | 0 .../letsencrypt/csr/0468_csr-certbot.pem | 0 .../letsencrypt/csr/0469_csr-certbot.pem | 0 .../letsencrypt/csr/0470_csr-certbot.pem | 0 .../letsencrypt/csr/0471_csr-certbot.pem | 0 .../letsencrypt/csr/0472_csr-certbot.pem | 0 .../letsencrypt/csr/0473_csr-certbot.pem | 0 .../letsencrypt/csr/0474_csr-certbot.pem | 0 .../letsencrypt/csr/0475_csr-certbot.pem | 0 .../letsencrypt/csr/0476_csr-certbot.pem | 0 .../letsencrypt/csr/0477_csr-certbot.pem | 0 .../letsencrypt/csr/0478_csr-certbot.pem | 0 .../letsencrypt/csr/0479_csr-certbot.pem | 0 .../letsencrypt/csr/0480_csr-certbot.pem | 0 .../letsencrypt/csr/0481_csr-certbot.pem | 0 .../letsencrypt/csr/0482_csr-certbot.pem | 0 .../letsencrypt/csr/0483_csr-certbot.pem | 0 .../letsencrypt/csr/0484_csr-certbot.pem | 0 .../letsencrypt/csr/0485_csr-certbot.pem | 0 .../letsencrypt/csr/0486_csr-certbot.pem | 0 .../letsencrypt/csr/0487_csr-certbot.pem | 0 .../letsencrypt/csr/0488_csr-certbot.pem | 0 .../letsencrypt/csr/0489_csr-certbot.pem | 0 .../letsencrypt/csr/0490_csr-certbot.pem | 0 .../letsencrypt/csr/0491_csr-certbot.pem | 0 .../letsencrypt/csr/0492_csr-certbot.pem | 0 .../letsencrypt/csr/0493_csr-certbot.pem | 0 .../letsencrypt/csr/0494_csr-certbot.pem | 0 .../letsencrypt/csr/0495_csr-certbot.pem | 0 .../letsencrypt/csr/0496_csr-certbot.pem | 0 .../letsencrypt/csr/0497_csr-certbot.pem | 0 .../letsencrypt/csr/0498_csr-certbot.pem | 0 .../letsencrypt/csr/0499_csr-certbot.pem | 0 .../letsencrypt/csr/0500_csr-certbot.pem | 0 .../letsencrypt/csr/0501_csr-certbot.pem | 0 .../letsencrypt/csr/0502_csr-certbot.pem | 0 .../letsencrypt/csr/0503_csr-certbot.pem | 0 .../letsencrypt/csr/0504_csr-certbot.pem | 0 .../letsencrypt/csr/0505_csr-certbot.pem | 0 .../letsencrypt/csr/0506_csr-certbot.pem | 0 .../letsencrypt/csr/0507_csr-certbot.pem | 0 .../letsencrypt/csr/0508_csr-certbot.pem | 0 .../letsencrypt/csr/0509_csr-certbot.pem | 0 .../letsencrypt/csr/0510_csr-certbot.pem | 0 .../letsencrypt/csr/0511_csr-certbot.pem | 0 .../letsencrypt/csr/0512_csr-certbot.pem | 0 .../letsencrypt/csr/0513_csr-certbot.pem | 0 .../letsencrypt/csr/0514_csr-certbot.pem | 0 .../letsencrypt/csr/0515_csr-certbot.pem | 0 .../letsencrypt/csr/0516_csr-certbot.pem | 0 .../letsencrypt/csr/0517_csr-certbot.pem | 0 .../letsencrypt/csr/0518_csr-certbot.pem | 0 .../letsencrypt/csr/0519_csr-certbot.pem | 0 .../letsencrypt/csr/0520_csr-certbot.pem | 0 .../letsencrypt/csr/0521_csr-certbot.pem | 0 .../letsencrypt/csr/0522_csr-certbot.pem | 0 .../letsencrypt/csr/0523_csr-certbot.pem | 0 .../letsencrypt/csr/0524_csr-certbot.pem | 0 .../letsencrypt/csr/0525_csr-certbot.pem | 0 .../letsencrypt/csr/0526_csr-certbot.pem | 0 .../letsencrypt/csr/0527_csr-certbot.pem | 0 .../letsencrypt/csr/0528_csr-certbot.pem | 0 .../letsencrypt/csr/0529_csr-certbot.pem | 0 .../letsencrypt/csr/0530_csr-certbot.pem | 0 .../letsencrypt/csr/0531_csr-certbot.pem | 0 .../letsencrypt/csr/0532_csr-certbot.pem | 0 .../letsencrypt/csr/0533_csr-certbot.pem | 0 .../letsencrypt/csr/0534_csr-certbot.pem | 0 .../letsencrypt/csr/0535_csr-certbot.pem | 0 .../letsencrypt/csr/0536_csr-certbot.pem | 0 .../letsencrypt/csr/0537_csr-certbot.pem | 0 .../letsencrypt/csr/0538_csr-certbot.pem | 0 .../letsencrypt/csr/0539_csr-certbot.pem | 0 .../letsencrypt/csr/0540_csr-certbot.pem | 0 .../letsencrypt/csr/0541_csr-certbot.pem | 0 .../letsencrypt/csr/0542_csr-certbot.pem | 0 .../letsencrypt/csr/0543_csr-certbot.pem | 0 .../letsencrypt/csr/0544_csr-certbot.pem | 0 .../letsencrypt/csr/0545_csr-certbot.pem | 0 .../letsencrypt/csr/0546_csr-certbot.pem | 0 .../letsencrypt/csr/0547_csr-certbot.pem | 0 .../letsencrypt/csr/0548_csr-certbot.pem | 0 .../letsencrypt/csr/0549_csr-certbot.pem | 0 .../letsencrypt/csr/0550_csr-certbot.pem | 0 .../letsencrypt/csr/0551_csr-certbot.pem | 0 .../letsencrypt/csr/0552_csr-certbot.pem | 0 .../letsencrypt/csr/0553_csr-certbot.pem | 0 .../letsencrypt/csr/0554_csr-certbot.pem | 0 .../letsencrypt/csr/0555_csr-certbot.pem | 0 .../letsencrypt/csr/0556_csr-certbot.pem | 0 .../letsencrypt/csr/0557_csr-certbot.pem | 0 .../letsencrypt/csr/0558_csr-certbot.pem | 0 .../letsencrypt/csr/0559_csr-certbot.pem | 0 .../letsencrypt/csr/0560_csr-certbot.pem | 0 .../letsencrypt/csr/0561_csr-certbot.pem | 0 .../letsencrypt/csr/0562_csr-certbot.pem | 0 .../letsencrypt/csr/0563_csr-certbot.pem | 0 .../letsencrypt/csr/0564_csr-certbot.pem | 0 .../letsencrypt/csr/0565_csr-certbot.pem | 0 .../letsencrypt/csr/0566_csr-certbot.pem | 0 .../letsencrypt/csr/0567_csr-certbot.pem | 0 .../letsencrypt/csr/0568_csr-certbot.pem | 0 .../letsencrypt/csr/0569_csr-certbot.pem | 0 .../letsencrypt/csr/0570_csr-certbot.pem | 0 .../letsencrypt/csr/0571_csr-certbot.pem | 0 .../letsencrypt/csr/0572_csr-certbot.pem | 0 .../letsencrypt/csr/0573_csr-certbot.pem | 0 .../letsencrypt/csr/0574_csr-certbot.pem | 0 .../letsencrypt/csr/0575_csr-certbot.pem | 0 .../letsencrypt/csr/0576_csr-certbot.pem | 0 .../letsencrypt/csr/0577_csr-certbot.pem | 0 .../letsencrypt/csr/0578_csr-certbot.pem | 0 .../letsencrypt/csr/0579_csr-certbot.pem | 0 .../letsencrypt/csr/0580_csr-certbot.pem | 0 .../letsencrypt/csr/0581_csr-certbot.pem | 0 .../letsencrypt/csr/0582_csr-certbot.pem | 0 .../letsencrypt/csr/0583_csr-certbot.pem | 0 .../letsencrypt/csr/0584_csr-certbot.pem | 0 .../letsencrypt/csr/0585_csr-certbot.pem | 0 .../letsencrypt/csr/0586_csr-certbot.pem | 0 .../letsencrypt/csr/0587_csr-certbot.pem | 0 .../letsencrypt/csr/0588_csr-certbot.pem | 0 .../letsencrypt/csr/0589_csr-certbot.pem | 0 .../letsencrypt/csr/0590_csr-certbot.pem | 0 .../letsencrypt/csr/0591_csr-certbot.pem | 0 .../letsencrypt/csr/0592_csr-certbot.pem | 0 .../letsencrypt/csr/0593_csr-certbot.pem | 0 .../letsencrypt/csr/0594_csr-certbot.pem | 0 .../letsencrypt/csr/0595_csr-certbot.pem | 0 .../letsencrypt/csr/0596_csr-certbot.pem | 0 .../letsencrypt/csr/0597_csr-certbot.pem | 0 .../letsencrypt/csr/0598_csr-certbot.pem | 0 .../letsencrypt/csr/0599_csr-certbot.pem | 0 .../letsencrypt/csr/0600_csr-certbot.pem | 0 .../letsencrypt/csr/0601_csr-certbot.pem | 0 .../letsencrypt/csr/0602_csr-certbot.pem | 0 .../letsencrypt/csr/0603_csr-certbot.pem | 0 .../letsencrypt/csr/0604_csr-certbot.pem | 0 .../letsencrypt/csr/0605_csr-certbot.pem | 0 .../letsencrypt/csr/0606_csr-certbot.pem | 0 .../letsencrypt/csr/0607_csr-certbot.pem | 0 .../letsencrypt/csr/0608_csr-certbot.pem | 0 .../letsencrypt/csr/0609_csr-certbot.pem | 0 .../letsencrypt/csr/0610_csr-certbot.pem | 0 .../letsencrypt/csr/0611_csr-certbot.pem | 0 .../letsencrypt/csr/0612_csr-certbot.pem | 0 .../letsencrypt/csr/0613_csr-certbot.pem | 0 .../letsencrypt/csr/0614_csr-certbot.pem | 0 .../letsencrypt/csr/0615_csr-certbot.pem | 0 .../letsencrypt/csr/0616_csr-certbot.pem | 0 .../letsencrypt/csr/0617_csr-certbot.pem | 0 .../letsencrypt/csr/0618_csr-certbot.pem | 0 .../letsencrypt/csr/0619_csr-certbot.pem | 0 .../letsencrypt/csr/0620_csr-certbot.pem | 0 .../letsencrypt/csr/0621_csr-certbot.pem | 0 .../letsencrypt/csr/0622_csr-certbot.pem | 0 .../letsencrypt/csr/0623_csr-certbot.pem | 0 .../letsencrypt/csr/0624_csr-certbot.pem | 0 .../letsencrypt/csr/0625_csr-certbot.pem | 0 .../letsencrypt/csr/0626_csr-certbot.pem | 0 .../letsencrypt/csr/0627_csr-certbot.pem | 0 .../letsencrypt/csr/0628_csr-certbot.pem | 0 .../letsencrypt/csr/0629_csr-certbot.pem | 0 .../letsencrypt/csr/0630_csr-certbot.pem | 0 .../letsencrypt/csr/0631_csr-certbot.pem | 0 .../letsencrypt/csr/0632_csr-certbot.pem | 0 .../letsencrypt/csr/0633_csr-certbot.pem | 0 .../letsencrypt/csr/0634_csr-certbot.pem | 0 .../letsencrypt/csr/0635_csr-certbot.pem | 0 .../letsencrypt/csr/0636_csr-certbot.pem | 0 .../letsencrypt/csr/0637_csr-certbot.pem | 0 .../letsencrypt/csr/0638_csr-certbot.pem | 0 .../letsencrypt/csr/0639_csr-certbot.pem | 0 .../letsencrypt/csr/0640_csr-certbot.pem | 0 .../letsencrypt/csr/0641_csr-certbot.pem | 0 .../letsencrypt/csr/0642_csr-certbot.pem | 0 .../letsencrypt/csr/0643_csr-certbot.pem | 0 .../letsencrypt/csr/0644_csr-certbot.pem | 0 .../letsencrypt/csr/0645_csr-certbot.pem | 0 .../letsencrypt/csr/0646_csr-certbot.pem | 0 .../letsencrypt/csr/0647_csr-certbot.pem | 0 .../letsencrypt/csr/0648_csr-certbot.pem | 0 .../letsencrypt/csr/0649_csr-certbot.pem | 0 .../letsencrypt/csr/0650_csr-certbot.pem | 0 .../letsencrypt/csr/0651_csr-certbot.pem | 0 .../letsencrypt/csr/0652_csr-certbot.pem | 0 .../letsencrypt/csr/0653_csr-certbot.pem | 0 .../letsencrypt/csr/0654_csr-certbot.pem | 0 .../letsencrypt/csr/0655_csr-certbot.pem | 0 .../letsencrypt/csr/0656_csr-certbot.pem | 0 .../letsencrypt/csr/0657_csr-certbot.pem | 0 .../letsencrypt/csr/0658_csr-certbot.pem | 0 .../letsencrypt/csr/0659_csr-certbot.pem | 0 .../letsencrypt/csr/0660_csr-certbot.pem | 0 .../letsencrypt/csr/0661_csr-certbot.pem | 0 .../letsencrypt/csr/0662_csr-certbot.pem | 0 .../letsencrypt/csr/0663_csr-certbot.pem | 0 .../letsencrypt/csr/0664_csr-certbot.pem | 0 .../letsencrypt/csr/0665_csr-certbot.pem | 0 .../letsencrypt/csr/0666_csr-certbot.pem | 0 .../letsencrypt/csr/0667_csr-certbot.pem | 0 .../letsencrypt/csr/0668_csr-certbot.pem | 0 .../letsencrypt/csr/0669_csr-certbot.pem | 0 .../letsencrypt/csr/0670_csr-certbot.pem | 0 .../letsencrypt/csr/0671_csr-certbot.pem | 0 .../letsencrypt/csr/0672_csr-certbot.pem | 0 .../letsencrypt/csr/0673_csr-certbot.pem | 0 .../letsencrypt/csr/0674_csr-certbot.pem | 0 .../letsencrypt/csr/0675_csr-certbot.pem | 0 .../letsencrypt/csr/0676_csr-certbot.pem | 0 .../letsencrypt/csr/0677_csr-certbot.pem | 0 .../letsencrypt/csr/0678_csr-certbot.pem | 0 .../letsencrypt/csr/0679_csr-certbot.pem | 0 .../letsencrypt/csr/0680_csr-certbot.pem | 0 .../letsencrypt/csr/0681_csr-certbot.pem | 0 .../letsencrypt/csr/0682_csr-certbot.pem | 0 .../letsencrypt/csr/0683_csr-certbot.pem | 0 .../letsencrypt/csr/0684_csr-certbot.pem | 0 .../letsencrypt/csr/0685_csr-certbot.pem | 0 .../letsencrypt/csr/0686_csr-certbot.pem | 0 .../letsencrypt/csr/0687_csr-certbot.pem | 0 .../letsencrypt/csr/0688_csr-certbot.pem | 0 .../letsencrypt/csr/0689_csr-certbot.pem | 0 .../letsencrypt/csr/0690_csr-certbot.pem | 0 .../letsencrypt/csr/0691_csr-certbot.pem | 0 .../letsencrypt/csr/0692_csr-certbot.pem | 0 .../letsencrypt/csr/0693_csr-certbot.pem | 0 .../letsencrypt/csr/0694_csr-certbot.pem | 0 .../letsencrypt/csr/0695_csr-certbot.pem | 0 .../letsencrypt/csr/0696_csr-certbot.pem | 0 .../letsencrypt/csr/0697_csr-certbot.pem | 0 .../letsencrypt/csr/0698_csr-certbot.pem | 0 .../letsencrypt/csr/0699_csr-certbot.pem | 0 .../letsencrypt/csr/0700_csr-certbot.pem | 0 .../letsencrypt/csr/0701_csr-certbot.pem | 0 .../letsencrypt/csr/0702_csr-certbot.pem | 0 .../letsencrypt/csr/0703_csr-certbot.pem | 0 .../letsencrypt/csr/0704_csr-certbot.pem | 0 .../letsencrypt/csr/0705_csr-certbot.pem | 0 .../letsencrypt/csr/0706_csr-certbot.pem | 0 .../letsencrypt/csr/0707_csr-certbot.pem | 0 .../letsencrypt/csr/0708_csr-certbot.pem | 0 .../letsencrypt/csr/0709_csr-certbot.pem | 0 .../letsencrypt/csr/0710_csr-certbot.pem | 0 .../letsencrypt/csr/0711_csr-certbot.pem | 0 .../letsencrypt/csr/0712_csr-certbot.pem | 0 .../letsencrypt/csr/0713_csr-certbot.pem | 0 .../letsencrypt/csr/0714_csr-certbot.pem | 0 .../letsencrypt/csr/0715_csr-certbot.pem | 0 .../letsencrypt/csr/0716_csr-certbot.pem | 0 .../letsencrypt/csr/0717_csr-certbot.pem | 0 .../letsencrypt/csr/0718_csr-certbot.pem | 0 .../letsencrypt/csr/0719_csr-certbot.pem | 0 .../letsencrypt/csr/0720_csr-certbot.pem | 0 .../letsencrypt/csr/0721_csr-certbot.pem | 0 .../letsencrypt/csr/0722_csr-certbot.pem | 0 .../letsencrypt/csr/0723_csr-certbot.pem | 0 .../letsencrypt/csr/0724_csr-certbot.pem | 0 .../letsencrypt/csr/0725_csr-certbot.pem | 0 .../letsencrypt/csr/0726_csr-certbot.pem | 0 .../letsencrypt/csr/0727_csr-certbot.pem | 0 .../letsencrypt/csr/0728_csr-certbot.pem | 0 .../letsencrypt/csr/0729_csr-certbot.pem | 0 .../letsencrypt/csr/0730_csr-certbot.pem | 0 .../letsencrypt/csr/0731_csr-certbot.pem | 0 .../letsencrypt/csr/0732_csr-certbot.pem | 0 .../letsencrypt/csr/0733_csr-certbot.pem | 0 .../letsencrypt/csr/0734_csr-certbot.pem | 0 .../letsencrypt/csr/0735_csr-certbot.pem | 0 .../letsencrypt/csr/0736_csr-certbot.pem | 0 .../letsencrypt/csr/0737_csr-certbot.pem | 0 .../letsencrypt/csr/0738_csr-certbot.pem | 0 .../letsencrypt/csr/0739_csr-certbot.pem | 0 .../letsencrypt/csr/0740_csr-certbot.pem | 0 .../letsencrypt/csr/0741_csr-certbot.pem | 0 .../letsencrypt/csr/0742_csr-certbot.pem | 0 .../letsencrypt/csr/0743_csr-certbot.pem | 0 .../letsencrypt/csr/0744_csr-certbot.pem | 0 .../letsencrypt/csr/0745_csr-certbot.pem | 0 .../letsencrypt/csr/0746_csr-certbot.pem | 0 .../letsencrypt/csr/0747_csr-certbot.pem | 0 .../letsencrypt/csr/0748_csr-certbot.pem | 0 .../letsencrypt/csr/0749_csr-certbot.pem | 0 .../letsencrypt/csr/0750_csr-certbot.pem | 0 .../letsencrypt/csr/0751_csr-certbot.pem | 0 .../letsencrypt/csr/0752_csr-certbot.pem | 0 .../letsencrypt/csr/0753_csr-certbot.pem | 0 .../letsencrypt/csr/0754_csr-certbot.pem | 0 .../letsencrypt/csr/0755_csr-certbot.pem | 0 .../letsencrypt/csr/0756_csr-certbot.pem | 0 .../letsencrypt/csr/0757_csr-certbot.pem | 0 .../letsencrypt/csr/0758_csr-certbot.pem | 0 .../letsencrypt/csr/0759_csr-certbot.pem | 0 .../letsencrypt/csr/0760_csr-certbot.pem | 0 .../letsencrypt/csr/0761_csr-certbot.pem | 0 .../letsencrypt/csr/0762_csr-certbot.pem | 0 .../letsencrypt/csr/0763_csr-certbot.pem | 0 .../letsencrypt/csr/0764_csr-certbot.pem | 0 .../letsencrypt/csr/0765_csr-certbot.pem | 0 .../letsencrypt/csr/0766_csr-certbot.pem | 0 .../letsencrypt/csr/0767_csr-certbot.pem | 0 .../letsencrypt/csr/0768_csr-certbot.pem | 0 .../letsencrypt/csr/0769_csr-certbot.pem | 0 .../letsencrypt/csr/0770_csr-certbot.pem | 0 .../letsencrypt/csr/0771_csr-certbot.pem | 0 .../letsencrypt/csr/0772_csr-certbot.pem | 0 .../letsencrypt/csr/0773_csr-certbot.pem | 0 .../letsencrypt/csr/0774_csr-certbot.pem | 0 .../letsencrypt/csr/0775_csr-certbot.pem | 0 .../letsencrypt/csr/0776_csr-certbot.pem | 0 .../letsencrypt/csr/0777_csr-certbot.pem | 0 .../letsencrypt/csr/0778_csr-certbot.pem | 0 .../letsencrypt/csr/0779_csr-certbot.pem | 0 .../letsencrypt/csr/0780_csr-certbot.pem | 0 .../letsencrypt/csr/0781_csr-certbot.pem | 0 .../letsencrypt/csr/0782_csr-certbot.pem | 0 .../letsencrypt/csr/0783_csr-certbot.pem | 0 .../letsencrypt/csr/0784_csr-certbot.pem | 0 .../letsencrypt/csr/0785_csr-certbot.pem | 0 .../letsencrypt/csr/0786_csr-certbot.pem | 0 .../letsencrypt/csr/0787_csr-certbot.pem | 0 .../letsencrypt/csr/0788_csr-certbot.pem | 0 .../letsencrypt/csr/0789_csr-certbot.pem | 0 .../letsencrypt/csr/0790_csr-certbot.pem | 0 .../letsencrypt/csr/0791_csr-certbot.pem | 0 .../letsencrypt/csr/0792_csr-certbot.pem | 0 .../letsencrypt/csr/0793_csr-certbot.pem | 0 .../letsencrypt/csr/0794_csr-certbot.pem | 0 .../letsencrypt/csr/0795_csr-certbot.pem | 0 .../letsencrypt/csr/0796_csr-certbot.pem | 0 .../letsencrypt/csr/0797_csr-certbot.pem | 0 .../letsencrypt/csr/0798_csr-certbot.pem | 0 .../letsencrypt/csr/0799_csr-certbot.pem | 0 .../letsencrypt/csr/0800_csr-certbot.pem | 0 .../letsencrypt/csr/0801_csr-certbot.pem | 0 .../letsencrypt/csr/0802_csr-certbot.pem | 0 .../letsencrypt/csr/0803_csr-certbot.pem | 0 .../letsencrypt/csr/0804_csr-certbot.pem | 0 .../letsencrypt/csr/0805_csr-certbot.pem | 0 .../letsencrypt/csr/0806_csr-certbot.pem | 0 .../letsencrypt/csr/0807_csr-certbot.pem | 0 .../letsencrypt/csr/0808_csr-certbot.pem | 0 .../letsencrypt/csr/0809_csr-certbot.pem | 0 .../letsencrypt/csr/0810_csr-certbot.pem | 0 .../letsencrypt/csr/0811_csr-certbot.pem | 0 .../letsencrypt/csr/0812_csr-certbot.pem | 0 .../letsencrypt/csr/0813_csr-certbot.pem | 0 .../letsencrypt/csr/0814_csr-certbot.pem | 0 .../letsencrypt/csr/0815_csr-certbot.pem | 0 .../letsencrypt/csr/0816_csr-certbot.pem | 0 .../letsencrypt/csr/0817_csr-certbot.pem | 0 .../letsencrypt/csr/0818_csr-certbot.pem | 0 .../letsencrypt/csr/0819_csr-certbot.pem | 0 .../letsencrypt/csr/0820_csr-certbot.pem | 0 .../letsencrypt/csr/0821_csr-certbot.pem | 0 .../letsencrypt/csr/0822_csr-certbot.pem | 0 .../letsencrypt/csr/0823_csr-certbot.pem | 0 .../letsencrypt/csr/0824_csr-certbot.pem | 0 .../letsencrypt/csr/0825_csr-certbot.pem | 0 .../letsencrypt/csr/0826_csr-certbot.pem | 0 .../letsencrypt/csr/0827_csr-certbot.pem | 0 .../letsencrypt/csr/0828_csr-certbot.pem | 0 .../letsencrypt/csr/0829_csr-certbot.pem | 0 .../letsencrypt/csr/0830_csr-certbot.pem | 0 .../letsencrypt/csr/0831_csr-certbot.pem | 0 .../letsencrypt/csr/0832_csr-certbot.pem | 0 .../letsencrypt/csr/0833_csr-certbot.pem | 0 .../letsencrypt/csr/0834_csr-certbot.pem | 0 .../letsencrypt/csr/0835_csr-certbot.pem | 0 .../letsencrypt/csr/0836_csr-certbot.pem | 0 .../letsencrypt/csr/0837_csr-certbot.pem | 0 .../letsencrypt/csr/0838_csr-certbot.pem | 0 .../letsencrypt/csr/0839_csr-certbot.pem | 0 .../letsencrypt/csr/0840_csr-certbot.pem | 0 .../letsencrypt/csr/0841_csr-certbot.pem | 0 .../letsencrypt/csr/0842_csr-certbot.pem | 0 .../letsencrypt/csr/0843_csr-certbot.pem | 0 .../letsencrypt/csr/0844_csr-certbot.pem | 0 .../letsencrypt/csr/0845_csr-certbot.pem | 0 .../letsencrypt/csr/0846_csr-certbot.pem | 0 .../letsencrypt/csr/0847_csr-certbot.pem | 0 .../letsencrypt/csr/0848_csr-certbot.pem | 0 .../letsencrypt/csr/0849_csr-certbot.pem | 0 .../letsencrypt/csr/0850_csr-certbot.pem | 0 .../letsencrypt/csr/0851_csr-certbot.pem | 0 .../letsencrypt/csr/0852_csr-certbot.pem | 0 .../letsencrypt/csr/0853_csr-certbot.pem | 0 .../letsencrypt/csr/0854_csr-certbot.pem | 0 .../letsencrypt/csr/0855_csr-certbot.pem | 0 .../letsencrypt/csr/0856_csr-certbot.pem | 0 .../letsencrypt/csr/0857_csr-certbot.pem | 0 .../letsencrypt/csr/0858_csr-certbot.pem | 0 .../letsencrypt/csr/0859_csr-certbot.pem | 0 .../letsencrypt/csr/0860_csr-certbot.pem | 0 .../letsencrypt/csr/0861_csr-certbot.pem | 0 .../letsencrypt/csr/0862_csr-certbot.pem | 0 .../letsencrypt/csr/0863_csr-certbot.pem | 0 .../letsencrypt/csr/0864_csr-certbot.pem | 0 .../letsencrypt/csr/0865_csr-certbot.pem | 0 .../letsencrypt/csr/0866_csr-certbot.pem | 0 .../letsencrypt/csr/0867_csr-certbot.pem | 0 .../letsencrypt/csr/0868_csr-certbot.pem | 0 .../letsencrypt/csr/0869_csr-certbot.pem | 0 .../letsencrypt/csr/0870_csr-certbot.pem | 0 .../letsencrypt/csr/0871_csr-certbot.pem | 0 .../letsencrypt/csr/0872_csr-certbot.pem | 0 .../letsencrypt/csr/0873_csr-certbot.pem | 0 .../letsencrypt/csr/0874_csr-certbot.pem | 0 .../letsencrypt/csr/0875_csr-certbot.pem | 0 .../letsencrypt/csr/0876_csr-certbot.pem | 0 .../letsencrypt/csr/0877_csr-certbot.pem | 0 .../letsencrypt/csr/0878_csr-certbot.pem | 0 .../letsencrypt/csr/0879_csr-certbot.pem | 0 .../letsencrypt/csr/0880_csr-certbot.pem | 0 .../letsencrypt/csr/0881_csr-certbot.pem | 0 .../letsencrypt/csr/0882_csr-certbot.pem | 0 .../letsencrypt/csr/0883_csr-certbot.pem | 0 .../letsencrypt/csr/0884_csr-certbot.pem | 0 .../letsencrypt/csr/0885_csr-certbot.pem | 0 .../letsencrypt/csr/0886_csr-certbot.pem | 0 .../letsencrypt/csr/0887_csr-certbot.pem | 0 .../letsencrypt/csr/0888_csr-certbot.pem | 0 .../letsencrypt/csr/0889_csr-certbot.pem | 0 .../letsencrypt/csr/0890_csr-certbot.pem | 0 .../letsencrypt/csr/0891_csr-certbot.pem | 0 .../letsencrypt/csr/0892_csr-certbot.pem | 0 .../letsencrypt/csr/0893_csr-certbot.pem | 0 .../letsencrypt/csr/0894_csr-certbot.pem | 0 .../letsencrypt/csr/0895_csr-certbot.pem | 0 .../letsencrypt/csr/0896_csr-certbot.pem | 0 .../letsencrypt/csr/0897_csr-certbot.pem | 0 .../letsencrypt/csr/0898_csr-certbot.pem | 0 .../letsencrypt/csr/0899_csr-certbot.pem | 0 .../letsencrypt/csr/0900_csr-certbot.pem | 0 .../letsencrypt/csr/0901_csr-certbot.pem | 0 .../letsencrypt/csr/0902_csr-certbot.pem | 0 .../letsencrypt/csr/0903_csr-certbot.pem | 0 .../letsencrypt/csr/0904_csr-certbot.pem | 0 .../letsencrypt/csr/0905_csr-certbot.pem | 0 .../letsencrypt/csr/0906_csr-certbot.pem | 0 .../letsencrypt/csr/0907_csr-certbot.pem | 0 .../letsencrypt/csr/0908_csr-certbot.pem | 0 .../letsencrypt/csr/0909_csr-certbot.pem | 0 .../letsencrypt/csr/0910_csr-certbot.pem | 0 .../letsencrypt/csr/0911_csr-certbot.pem | 0 .../letsencrypt/csr/0912_csr-certbot.pem | 0 .../letsencrypt/csr/0913_csr-certbot.pem | 0 .../letsencrypt/csr/0914_csr-certbot.pem | 0 .../letsencrypt/csr/0915_csr-certbot.pem | 0 .../letsencrypt/csr/0916_csr-certbot.pem | 0 .../letsencrypt/csr/0917_csr-certbot.pem | 0 .../letsencrypt/csr/0918_csr-certbot.pem | 0 .../letsencrypt/csr/0919_csr-certbot.pem | 0 .../letsencrypt/csr/0920_csr-certbot.pem | 0 .../letsencrypt/csr/0921_csr-certbot.pem | 0 .../letsencrypt/csr/0922_csr-certbot.pem | 0 .../letsencrypt/csr/0923_csr-certbot.pem | 0 .../letsencrypt/csr/0924_csr-certbot.pem | 0 .../letsencrypt/csr/0925_csr-certbot.pem | 0 .../letsencrypt/csr/0926_csr-certbot.pem | 0 .../letsencrypt/csr/0927_csr-certbot.pem | 0 .../letsencrypt/csr/0928_csr-certbot.pem | 0 .../letsencrypt/csr/0929_csr-certbot.pem | 0 .../letsencrypt/csr/0930_csr-certbot.pem | 0 .../letsencrypt/csr/0931_csr-certbot.pem | 0 .../letsencrypt/csr/0932_csr-certbot.pem | 0 .../letsencrypt/csr/0933_csr-certbot.pem | 0 .../letsencrypt/csr/0934_csr-certbot.pem | 0 .../letsencrypt/csr/0935_csr-certbot.pem | 0 .../letsencrypt/csr/0936_csr-certbot.pem | 0 .../letsencrypt/csr/0937_csr-certbot.pem | 0 .../letsencrypt/csr/0938_csr-certbot.pem | 0 .../letsencrypt/csr/0939_csr-certbot.pem | 0 .../letsencrypt/csr/0940_csr-certbot.pem | 0 .../letsencrypt/csr/0941_csr-certbot.pem | 0 .../letsencrypt/csr/0942_csr-certbot.pem | 0 .../letsencrypt/csr/0943_csr-certbot.pem | 0 .../letsencrypt/csr/0944_csr-certbot.pem | 0 .../letsencrypt/csr/0945_csr-certbot.pem | 0 .../letsencrypt/csr/0946_csr-certbot.pem | 0 .../letsencrypt/csr/0947_csr-certbot.pem | 0 .../letsencrypt/csr/0948_csr-certbot.pem | 0 .../letsencrypt/csr/0949_csr-certbot.pem | 0 .../letsencrypt/csr/0950_csr-certbot.pem | 0 .../letsencrypt/csr/0951_csr-certbot.pem | 0 .../letsencrypt/csr/0952_csr-certbot.pem | 0 .../letsencrypt/csr/0953_csr-certbot.pem | 0 .../letsencrypt/csr/0954_csr-certbot.pem | 0 .../letsencrypt/csr/0955_csr-certbot.pem | 0 .../letsencrypt/csr/0956_csr-certbot.pem | 0 .../letsencrypt/csr/0957_csr-certbot.pem | 0 .../letsencrypt/csr/0958_csr-certbot.pem | 0 .../letsencrypt/csr/0959_csr-certbot.pem | 0 .../letsencrypt/csr/0960_csr-certbot.pem | 0 .../letsencrypt/csr/0961_csr-certbot.pem | 0 .../letsencrypt/csr/0962_csr-certbot.pem | 0 .../letsencrypt/csr/0963_csr-certbot.pem | 0 .../letsencrypt/csr/0964_csr-certbot.pem | 0 .../letsencrypt/csr/0965_csr-certbot.pem | 0 .../letsencrypt/csr/0966_csr-certbot.pem | 0 .../letsencrypt/csr/0967_csr-certbot.pem | 0 .../letsencrypt/csr/0968_csr-certbot.pem | 0 .../letsencrypt/csr/0969_csr-certbot.pem | 0 .../letsencrypt/csr/0970_csr-certbot.pem | 0 .../letsencrypt/csr/0971_csr-certbot.pem | 0 .../letsencrypt/csr/0972_csr-certbot.pem | 0 .../letsencrypt/csr/0973_csr-certbot.pem | 0 .../letsencrypt/csr/0974_csr-certbot.pem | 0 .../letsencrypt/csr/0975_csr-certbot.pem | 0 .../letsencrypt/csr/0976_csr-certbot.pem | 0 .../letsencrypt/csr/0977_csr-certbot.pem | 0 .../letsencrypt/csr/0978_csr-certbot.pem | 0 .../letsencrypt/csr/0979_csr-certbot.pem | 0 .../letsencrypt/csr/0980_csr-certbot.pem | 0 .../letsencrypt/csr/0981_csr-certbot.pem | 0 .../letsencrypt/csr/0982_csr-certbot.pem | 0 .../letsencrypt/csr/0983_csr-certbot.pem | 0 .../letsencrypt/csr/0984_csr-certbot.pem | 0 .../letsencrypt/csr/0985_csr-certbot.pem | 0 .../letsencrypt/csr/0986_csr-certbot.pem | 0 .../letsencrypt/csr/0987_csr-certbot.pem | 0 .../letsencrypt/csr/0988_csr-certbot.pem | 0 .../letsencrypt/csr/0989_csr-certbot.pem | 0 .../letsencrypt/csr/0990_csr-certbot.pem | 0 .../letsencrypt/csr/0991_csr-certbot.pem | 0 .../letsencrypt/csr/0992_csr-certbot.pem | 0 .../letsencrypt/csr/0993_csr-certbot.pem | 0 .../letsencrypt/csr/0994_csr-certbot.pem | 0 .../letsencrypt/csr/0995_csr-certbot.pem | 0 .../letsencrypt/csr/0996_csr-certbot.pem | 0 .../letsencrypt/csr/0997_csr-certbot.pem | 0 .../letsencrypt/csr/0998_csr-certbot.pem | 0 .../letsencrypt/csr/0999_csr-certbot.pem | 0 .../letsencrypt/csr/1000_csr-certbot.pem | 0 .../letsencrypt/csr/1001_csr-certbot.pem | 0 .../letsencrypt/csr/1002_csr-certbot.pem | 0 .../letsencrypt/csr/1003_csr-certbot.pem | 0 .../letsencrypt/csr/1004_csr-certbot.pem | 0 .../letsencrypt/csr/1005_csr-certbot.pem | 0 .../letsencrypt/csr/1006_csr-certbot.pem | 0 .../letsencrypt/csr/1007_csr-certbot.pem | 0 .../letsencrypt/csr/1008_csr-certbot.pem | 0 .../letsencrypt/csr/1009_csr-certbot.pem | 0 .../letsencrypt/csr/1010_csr-certbot.pem | 0 .../letsencrypt/csr/1011_csr-certbot.pem | 0 .../letsencrypt/csr/1012_csr-certbot.pem | 0 .../letsencrypt/csr/1013_csr-certbot.pem | 0 .../letsencrypt/csr/1014_csr-certbot.pem | 0 .../letsencrypt/csr/1015_csr-certbot.pem | 0 .../letsencrypt/csr/1016_csr-certbot.pem | 0 .../letsencrypt/csr/1017_csr-certbot.pem | 0 .../letsencrypt/csr/1018_csr-certbot.pem | 0 .../letsencrypt/csr/1019_csr-certbot.pem | 0 .../letsencrypt/csr/1020_csr-certbot.pem | 0 .../letsencrypt/csr/1021_csr-certbot.pem | 0 .../letsencrypt/csr/1022_csr-certbot.pem | 0 .../letsencrypt/csr/1023_csr-certbot.pem | 0 .../letsencrypt/csr/1024_csr-certbot.pem | 0 .../letsencrypt/csr/1025_csr-certbot.pem | 0 .../letsencrypt/csr/1026_csr-certbot.pem | 0 .../letsencrypt/csr/1027_csr-certbot.pem | 0 .../letsencrypt/csr/1028_csr-certbot.pem | 0 .../letsencrypt/csr/1029_csr-certbot.pem | 0 .../letsencrypt/csr/1030_csr-certbot.pem | 0 .../letsencrypt/csr/1031_csr-certbot.pem | 0 .../letsencrypt/csr/1032_csr-certbot.pem | 0 .../letsencrypt/csr/1033_csr-certbot.pem | 0 .../letsencrypt/csr/1034_csr-certbot.pem | 0 .../letsencrypt/csr/1035_csr-certbot.pem | 0 .../letsencrypt/csr/1036_csr-certbot.pem | 0 .../letsencrypt/csr/1037_csr-certbot.pem | 0 .../letsencrypt/csr/1038_csr-certbot.pem | 0 .../letsencrypt/csr/1039_csr-certbot.pem | 0 .../letsencrypt/csr/1040_csr-certbot.pem | 0 .../letsencrypt/csr/1041_csr-certbot.pem | 0 .../letsencrypt/csr/1042_csr-certbot.pem | 0 .../letsencrypt/csr/1043_csr-certbot.pem | 0 .../letsencrypt/csr/1044_csr-certbot.pem | 0 .../letsencrypt/csr/1045_csr-certbot.pem | 0 .../letsencrypt/csr/1046_csr-certbot.pem | 0 .../letsencrypt/csr/1047_csr-certbot.pem | 0 .../letsencrypt/csr/1048_csr-certbot.pem | 0 .../letsencrypt/csr/1049_csr-certbot.pem | 0 .../letsencrypt/csr/1050_csr-certbot.pem | 0 .../letsencrypt/csr/1051_csr-certbot.pem | 0 .../letsencrypt/csr/1052_csr-certbot.pem | 0 .../letsencrypt/csr/1053_csr-certbot.pem | 0 .../letsencrypt/csr/1054_csr-certbot.pem | 0 .../letsencrypt/csr/1055_csr-certbot.pem | 0 .../letsencrypt/csr/1056_csr-certbot.pem | 0 .../letsencrypt/csr/1057_csr-certbot.pem | 0 .../letsencrypt/csr/1058_csr-certbot.pem | 0 .../letsencrypt/csr/1059_csr-certbot.pem | 0 .../letsencrypt/csr/1060_csr-certbot.pem | 0 .../letsencrypt/csr/1061_csr-certbot.pem | 0 .../letsencrypt/csr/1062_csr-certbot.pem | 0 .../letsencrypt/csr/1063_csr-certbot.pem | 0 .../letsencrypt/csr/1064_csr-certbot.pem | 0 .../letsencrypt/csr/1065_csr-certbot.pem | 0 .../letsencrypt/csr/1066_csr-certbot.pem | 0 .../letsencrypt/csr/1067_csr-certbot.pem | 0 .../letsencrypt/csr/1068_csr-certbot.pem | 0 .../letsencrypt/csr/1069_csr-certbot.pem | 0 .../letsencrypt/csr/1070_csr-certbot.pem | 0 .../letsencrypt/csr/1071_csr-certbot.pem | 0 .../letsencrypt/csr/1072_csr-certbot.pem | 0 .../letsencrypt/csr/1073_csr-certbot.pem | 0 .../letsencrypt/csr/1074_csr-certbot.pem | 0 .../letsencrypt/csr/1075_csr-certbot.pem | 0 .../letsencrypt/csr/1076_csr-certbot.pem | 0 .../letsencrypt/csr/1077_csr-certbot.pem | 0 .../letsencrypt/csr/1078_csr-certbot.pem | 0 .../letsencrypt/csr/1079_csr-certbot.pem | 0 .../letsencrypt/csr/1080_csr-certbot.pem | 0 .../letsencrypt/csr/1081_csr-certbot.pem | 0 .../letsencrypt/csr/1082_csr-certbot.pem | 0 .../letsencrypt/csr/1083_csr-certbot.pem | 0 .../letsencrypt/csr/1084_csr-certbot.pem | 0 .../letsencrypt/csr/1085_csr-certbot.pem | 0 .../letsencrypt/csr/1086_csr-certbot.pem | 0 .../letsencrypt/csr/1087_csr-certbot.pem | 0 .../letsencrypt/csr/1088_csr-certbot.pem | 0 .../letsencrypt/csr/1089_csr-certbot.pem | 0 .../letsencrypt/csr/1090_csr-certbot.pem | 0 .../letsencrypt/csr/1091_csr-certbot.pem | 0 .../letsencrypt/csr/1092_csr-certbot.pem | 0 .../letsencrypt/csr/1093_csr-certbot.pem | 0 .../letsencrypt/csr/1094_csr-certbot.pem | 0 .../letsencrypt/csr/1095_csr-certbot.pem | 0 .../letsencrypt/csr/1096_csr-certbot.pem | 0 .../letsencrypt/csr/1097_csr-certbot.pem | 0 .../letsencrypt/csr/1098_csr-certbot.pem | 0 .../letsencrypt/csr/1099_csr-certbot.pem | 0 .../letsencrypt/csr/1100_csr-certbot.pem | 0 .../letsencrypt/csr/1101_csr-certbot.pem | 0 .../letsencrypt/csr/1102_csr-certbot.pem | 0 .../letsencrypt/csr/1103_csr-certbot.pem | 0 .../letsencrypt/csr/1104_csr-certbot.pem | 0 .../letsencrypt/csr/1105_csr-certbot.pem | 0 .../letsencrypt/csr/1106_csr-certbot.pem | 0 .../letsencrypt/csr/1107_csr-certbot.pem | 0 .../letsencrypt/csr/1108_csr-certbot.pem | 0 .../letsencrypt/csr/1109_csr-certbot.pem | 0 .../letsencrypt/csr/1110_csr-certbot.pem | 0 .../letsencrypt/csr/1111_csr-certbot.pem | 0 .../letsencrypt/csr/1112_csr-certbot.pem | 0 .../letsencrypt/csr/1113_csr-certbot.pem | 0 .../letsencrypt/csr/1114_csr-certbot.pem | 0 .../letsencrypt/csr/1115_csr-certbot.pem | 0 .../letsencrypt/csr/1116_csr-certbot.pem | 0 .../letsencrypt/csr/1117_csr-certbot.pem | 0 .../letsencrypt/csr/1118_csr-certbot.pem | 0 .../letsencrypt/csr/1119_csr-certbot.pem | 0 .../letsencrypt/csr/1120_csr-certbot.pem | 0 .../letsencrypt/csr/1121_csr-certbot.pem | 0 .../letsencrypt/csr/1122_csr-certbot.pem | 0 .../letsencrypt/csr/1123_csr-certbot.pem | 0 .../letsencrypt/csr/1124_csr-certbot.pem | 0 .../letsencrypt/csr/1125_csr-certbot.pem | 0 .../letsencrypt/csr/1126_csr-certbot.pem | 0 .../letsencrypt/csr/1127_csr-certbot.pem | 0 .../letsencrypt/csr/1128_csr-certbot.pem | 0 .../letsencrypt/csr/1129_csr-certbot.pem | 0 .../letsencrypt/csr/1130_csr-certbot.pem | 0 .../letsencrypt/csr/1131_csr-certbot.pem | 0 .../letsencrypt/csr/1132_csr-certbot.pem | 0 .../letsencrypt/csr/1133_csr-certbot.pem | 0 .../letsencrypt/csr/1134_csr-certbot.pem | 0 .../letsencrypt/csr/1135_csr-certbot.pem | 0 .../letsencrypt/csr/1136_csr-certbot.pem | 0 .../letsencrypt/csr/1137_csr-certbot.pem | 0 .../letsencrypt/csr/1138_csr-certbot.pem | 0 .../letsencrypt/csr/1139_csr-certbot.pem | 0 .../letsencrypt/csr/1140_csr-certbot.pem | 0 .../letsencrypt/csr/1141_csr-certbot.pem | 0 .../letsencrypt/csr/1142_csr-certbot.pem | 0 .../letsencrypt/csr/1143_csr-certbot.pem | 0 .../letsencrypt/csr/1144_csr-certbot.pem | 0 .../letsencrypt/csr/1145_csr-certbot.pem | 0 .../letsencrypt/csr/1146_csr-certbot.pem | 0 .../letsencrypt/csr/1147_csr-certbot.pem | 0 .../letsencrypt/csr/1148_csr-certbot.pem | 0 .../letsencrypt/csr/1149_csr-certbot.pem | 0 .../letsencrypt/csr/1150_csr-certbot.pem | 0 .../letsencrypt/csr/1151_csr-certbot.pem | 0 .../letsencrypt/csr/1152_csr-certbot.pem | 0 .../letsencrypt/csr/1153_csr-certbot.pem | 0 .../letsencrypt/csr/1154_csr-certbot.pem | 0 .../letsencrypt/csr/1155_csr-certbot.pem | 0 .../letsencrypt/csr/1156_csr-certbot.pem | 0 .../letsencrypt/csr/1157_csr-certbot.pem | 0 .../letsencrypt/csr/1158_csr-certbot.pem | 0 .../letsencrypt/csr/1159_csr-certbot.pem | 0 .../letsencrypt/csr/1160_csr-certbot.pem | 0 .../letsencrypt/csr/1161_csr-certbot.pem | 0 .../letsencrypt/csr/1162_csr-certbot.pem | 0 .../letsencrypt/csr/1163_csr-certbot.pem | 0 .../letsencrypt/csr/1164_csr-certbot.pem | 0 .../letsencrypt/csr/1165_csr-certbot.pem | 0 .../letsencrypt/csr/1166_csr-certbot.pem | 0 .../letsencrypt/csr/1167_csr-certbot.pem | 0 .../letsencrypt/csr/1168_csr-certbot.pem | 0 .../letsencrypt/csr/1169_csr-certbot.pem | 0 .../letsencrypt/csr/1170_csr-certbot.pem | 0 .../letsencrypt/csr/1171_csr-certbot.pem | 0 .../letsencrypt/csr/1172_csr-certbot.pem | 0 .../letsencrypt/csr/1173_csr-certbot.pem | 0 .../letsencrypt/csr/1174_csr-certbot.pem | 0 .../letsencrypt/csr/1175_csr-certbot.pem | 0 .../letsencrypt/csr/1176_csr-certbot.pem | 0 .../letsencrypt/csr/1177_csr-certbot.pem | 0 .../letsencrypt/csr/1178_csr-certbot.pem | 0 .../letsencrypt/csr/1179_csr-certbot.pem | 0 .../letsencrypt/csr/1180_csr-certbot.pem | 0 .../letsencrypt/csr/1181_csr-certbot.pem | 0 .../letsencrypt/csr/1182_csr-certbot.pem | 0 .../letsencrypt/csr/1183_csr-certbot.pem | 0 .../letsencrypt/csr/1184_csr-certbot.pem | 0 .../letsencrypt/csr/1185_csr-certbot.pem | 0 .../letsencrypt/csr/1186_csr-certbot.pem | 0 .../letsencrypt/csr/1187_csr-certbot.pem | 0 .../letsencrypt/csr/1188_csr-certbot.pem | 0 .../letsencrypt/csr/1189_csr-certbot.pem | 0 .../letsencrypt/csr/1190_csr-certbot.pem | 0 .../letsencrypt/csr/1191_csr-certbot.pem | 0 .../letsencrypt/csr/1192_csr-certbot.pem | 0 .../letsencrypt/csr/1193_csr-certbot.pem | 0 .../letsencrypt/csr/1194_csr-certbot.pem | 0 .../letsencrypt/csr/1195_csr-certbot.pem | 0 .../letsencrypt/csr/1196_csr-certbot.pem | 0 .../letsencrypt/csr/1197_csr-certbot.pem | 0 .../letsencrypt/csr/1198_csr-certbot.pem | 0 .../letsencrypt/csr/1199_csr-certbot.pem | 0 .../letsencrypt/csr/1200_csr-certbot.pem | 0 .../letsencrypt/csr/1201_csr-certbot.pem | 0 .../letsencrypt/live/README | 0 .../live/dip-zero.geumdo.net/README | 0 .../live/dip-zero.geumdo.net/cert.pem | 0 .../live/dip-zero.geumdo.net/chain.pem | 0 .../live/dip-zero.geumdo.net/fullchain.pem | 0 .../live/dip-zero.geumdo.net/privkey.pem | 0 .../letsencrypt/live/mail.geumdo.net/README | 0 .../letsencrypt/live/mail.geumdo.net/cert.pem | 0 .../live/mail.geumdo.net/chain.pem | 0 .../live/mail.geumdo.net/fullchain.pem | 0 .../live/mail.geumdo.net/privkey.pem | 0 .../letsencrypt/live/proxy.geumdo.net/README | 0 .../live/proxy.geumdo.net/cert.pem | 0 .../live/proxy.geumdo.net/chain.pem | 0 .../live/proxy.geumdo.net/fullchain.pem | 0 .../live/proxy.geumdo.net/privkey.pem | 0 .../letsencrypt/options-ssl-nginx.conf | 0 .../renewal/dip-zero.geumdo.net.conf | 0 .../letsencrypt/renewal/mail.geumdo.net.conf | 0 .../letsencrypt/renewal/proxy.geumdo.net.conf | 0 .../letsencrypt/ssl-dhparams.pem | 0 .../docker}/docker_nginx_proxy/nginx.conf | 0 .../docker_nginx_proxy/rebuild_docker.sh | 0 .../sites-available/3dp_nextcloud.conf | 0 .../sites-available/ai_was.conf | 0 .../sites-available/default | 0 .../sites-available/dmi.conf | 0 .../sites-available/fastapi.conf | 0 .../sites-available/flask_proxy.conf | 0 .../sites-available/flaskapi.conf | 0 .../sites-available/geumdo_java_upgrade.conf | 0 .../geumdo_java_upgrade_http.conf | 0 .../sites-available/geumdo_ollama_docker.conf | 0 .../geumdo_ollamaui_docker.conf | 0 .../sites-available/jupyter.conf | 0 .../sites-available/posteio.conf | 0 .../sites-available/sw3d-dev.conf | 0 .../docker_nginx_proxy/ssl-certs/nginx.crt | 0 .../docker_nginx_proxy/ssl-certs/nginx.key | 0 .../ssl/gdlab.co.kr/gdlab.co.kr.key | Bin .../ssl/gdlab.co.kr/gdlab.co.kr.p7b | 0 .../ssl/gdlab.co.kr/gdlab.co.kr.pem | 0 .../ssl/gdlab.co.kr/gdlab.co.kr.private.key | 0 .../ssl/gdlab.co.kr/key.pem | 0 .../ssl/geumdo.net/DigiCertCAG1.crt | 0 .../ssl/geumdo.net/TrustedRootG2.crt | 0 .../ssl/geumdo.net/bundle.pem | 0 .../ssl/geumdo.net/geumdo.net.crt | 0 .../ssl/geumdo.net/geumdo.net.csr | 0 .../ssl/geumdo.net/geumdo.net.key | 0 .../docker_nginx_proxy/start_service.sh | 0 .../docker/docker_open_webui/.gitignore | 309 ++ .../docker/docker_open_webui/Dockerfile | 161 + .../docker/docker_open_webui/README.md | 203 ++ .../docker_open_webui/docker-compose.yaml | 64 + .../docker}/docker_posivibes/Dockerfile | 0 .../docker}/docker_posivibes/README.md | 0 .../docker_posivibes/docker-compose.yml | 0 .../docker_posivibes/rebuild_docker.sh | 0 .../docker}/docker_posivibes/start_service.sh | 0 .../docker/docker_prusa_exporter/.gitignore | 1 + .../docker/docker_prusa_exporter/Dockerfile | 22 + .../docker/docker_prusa_exporter/README.md | 129 + .../docker_prusa_exporter/docker-compose.yaml | 89 + .../docker}/docker_registry/README.md | 0 .../docker_registry/docker-compose.yml | 0 .../docker}/docker_securedb/Dockerfile | 0 .../docker}/docker_securedb/README.md | 0 .../docker_securedb/docker-compose.yml | 0 .../docker}/docker_securedb/rebuild_docker.sh | 0 .../docker}/docker_securedb/start_service.sh | 0 .../docker}/docker_ssl_setup_guide.md | 0 .../docker}/docker_ubuntu_ssh/Dockerfile | 0 .../docker}/docker_ubuntu_ssh/README.md | 0 .../docker_ubuntu_ssh/docker-compose.yml | 0 .../docker_ubuntu_ssh/rebuild_docker.sh | 0 .../docker}/docker_vnexa_api/Dockerfile | 0 .../docker}/docker_vnexa_api/README.md | 0 .../docker}/docker_vnexa_api/app/app.py | 0 .../docker_vnexa_api/app/requirements.txt | 0 .../docker_vnexa_api/docker-compose.yml | 0 .../docker_vnexa_api/rebuild_docker.sh | 0 .../docker}/docker_was/Dockerfile | 0 .../docker}/docker_was/README.md | 0 .../docker}/docker_was/docker-compose.yml | 0 .../docker}/docker_was/rebuild_docker.sh | 0 .../docker}/docker_was/setting.sql | 0 .../docker}/docker_was/start_service.sh | 0 .../docker}/docker_was_upgrade/Dockerfile | 0 .../docker}/docker_was_upgrade/README.md | 0 .../docker_was_upgrade/docker-compose.yml | 0 .../docker_was_upgrade/rebuild_docker.sh | 0 .../docker}/docker_was_upgrade/setting.sql | 0 .../docker_was_upgrade/start_service.sh | 0 .../docker_was_upgrade_http/Dockerfile | 0 .../docker}/docker_was_upgrade_http/README.md | 0 .../docker-compose.yml | 0 .../docker_was_upgrade_http/rebuild_docker.sh | 0 .../docker_was_upgrade_http/setting.sql | 0 .../docker_was_upgrade_http/start_service.sh | 0 .../docker}/examples/.gitkeep | 0 .../docker}/examples/Dockerfile | 0 .../docker}/examples/README.md | 0 .../docker}/examples/docker-compose.yml | 0 .../docker}/examples/rebuild_docker.sh | 0 .../docker}/examples/start_service.sh | 0 .../docker/geumdo-rag-chat-bot/.gitignore | 40 + .../docker/geumdo-rag-chat-bot/Dockerfile | 32 + .../docker/geumdo-rag-chat-bot/README.md | 265 ++ .../geumdo-rag-chat-bot/docker-compose.yml | 55 + .../docker}/geumdo_docker_report_240611.md | 0 .../.cursor/rules/clean-code.md | 0 .../.cursor/rules/global-rules.md | 0 .../.cursor/rules/user-guide.md | 0 .../docker}/gpu_cooling_monitor/Dockerfile | 0 .../docker}/gpu_cooling_monitor/README.md | 0 .../gpu_cooling_monitor/check_system.py | 0 .../gpu_cooling_monitor/docker-compose.yml | 0 .../provisioning/dashboards/dashboards.yml | 0 .../provisioning/datasources/influxdb.yml | 0 .../gpu_cooling_monitor/requirement.md | 0 .../gpu_cooling_monitor/requirements.txt | 0 .../docker}/gpu_cooling_monitor/sensors.conf | 0 .../gpu_cooling_monitor/src/__init__.py | 0 .../docker}/gpu_cooling_monitor/src/api.py | 0 .../src/config/__init__.py | 0 .../gpu_cooling_monitor/src/config/config.py | 0 .../src/cooling_monitor.py | 0 .../src/implementation_plan.md | 0 .../docker}/gpu_cooling_monitor/src/main.py | 0 .../src/monitors/__init__.py | 0 .../src/monitors/cooling_monitor.py | 0 .../src/monitors/gpu_monitor.py | 0 .../src/notifications/__init__.py | 0 .../src/notifications/alert_manager.py | 0 .../src/notifications/slack_notifier.py | 0 .../src/utils/influxdb_client.py | 0 .../src/utils/system_checker.py | 0 .../gpu_cooling_monitor/src/web/app.py | 0 .../gpu_cooling_monitor/src/web/run.py | 0 .../src/web/static/css/style.css | 0 .../src/web/static/js/dashboard.js | 0 .../src/web/templates/index.html | 0 .../docker}/gpu_cooling_monitor/start.sh | 0 .../docker}/jupyter_geumdo_lab/.cursorrules | 0 .../docker}/jupyter_geumdo_lab/.dockerignore | 0 .../docker}/jupyter_geumdo_lab/.gitignore | 0 .../docker}/jupyter_geumdo_lab/README.md | 0 .../jupyter_geumdo_lab/backup-cronjob.yaml | 0 .../docker}/jupyter_geumdo_lab/config.yaml | 0 .../jupyter_geumdo_lab/jupyter-hub-nginx.conf | 0 .../docker}/jupyter_gpu_docker/Dockerfile | 0 .../docker}/jupyter_gpu_docker/README.md | 0 .../jupyter_gpu_docker/docker-compose.yml | 0 .../jupyter_gpu_docker/rebuild_with_fix.sh | 0 .../jupyter_gpu_docker/requirements.txt | 0 .../docker/potential_industry_partners.md | 129 + .../docker/small_scale_gpu_resources_plan.md | 142 + .../nginx}/proxy_analysis.md | 0 .../server_backup}/README.md | 0 .../server_backup}/geumdo_mirror_backup.sh | 0 .../server_backup}/iact_mirror_backup.sh | 0 .../server_backup}/last_day_of_month.sh | 0 .../server_backup}/server_backup_guide.md | 0 .../server_backup}/source_backup.sh | 0 2_services/1_metaverse/nodam/.gitattributes | 17 + 2_services/1_metaverse/nodam/.gitignore | 44 + 2_services/1_metaverse/nodam/.htaccess | 379 +++ 2_services/1_metaverse/nodam/README.md | 62 + .../1_metaverse/nodam/application/.htaccess | 6 + .../nodam/application/cache/.htaccess | 6 + .../nodam/application/cache/index.html | 11 + .../application/config/admin/dp_config.php | 36 + .../nodam/application/config/admin/index.html | 11 + .../nodam/application/config/autoload.php | 129 + .../application/config/common/dp_config.php | 52 + .../application/config/common/dp_language.php | 8 + .../application/config/common/index.html | 11 + .../nodam/application/config/config.php | 504 +++ .../nodam/application/config/constants.php | 85 + .../nodam/application/config/database.php | 97 + .../nodam/application/config/doctypes.php | 24 + .../application/config/foreign_chars.php | 103 + .../nodam/application/config/hooks.php | 26 + .../nodam/application/config/index.html | 11 + .../nodam/application/config/memcached.php | 19 + .../nodam/application/config/migration.php | 84 + .../nodam/application/config/mimes.php | 184 ++ .../nodam/application/config/profiler.php | 14 + .../application/config/public/index.html | 11 + .../nodam/application/config/routes.php | 58 + .../nodam/application/config/smileys.php | 64 + .../nodam/application/config/user_agents.php | 211 ++ .../nodam/application/controllers/Auth.php | 94 + .../application/controllers/Auth_original.php | 802 +++++ .../nodam/application/controllers/Home.php | 16 + .../application/controllers/_Original.php | 16 + .../controllers/admin/Dashboard.php | 22 + .../controllers/admin/Database.php | 42 + .../application/controllers/admin/Files.php | 79 + .../application/controllers/admin/Fwords.php | 57 + .../application/controllers/admin/Groups.php | 177 ++ .../application/controllers/admin/License.php | 34 + .../application/controllers/admin/Medias.php | 37 + .../controllers/admin/Pictures.php | 29 + .../application/controllers/admin/Prefs.php | 171 + .../controllers/admin/Questions.php | 79 + .../controllers/admin/Resources.php | 34 + .../controllers/admin/Survey_results.php | 46 + .../application/controllers/admin/Surveys.php | 52 + .../application/controllers/admin/Users.php | 72 + .../controllers/admin/_Original.php | 16 + .../application/controllers/admin/index.html | 11 + .../nodam/application/controllers/index.html | 11 + .../nodam/application/core/MY_Controller.php | 128 + .../nodam/application/core/index.html | 11 + .../application/helpers/MY_url_helper.php | 45 + .../nodam/application/helpers/index.html | 11 + .../nodam/application/helpers/menu_helper.php | 25 + .../nodam/application/hooks/index.html | 11 + .../nodam/application/hooks/minify_html.php | 27 + .../1_metaverse/nodam/application/index.html | 11 + .../language/english/admin/actions_lang.php | 26 + .../language/english/admin/database_lang.php | 13 + .../language/english/admin/footer_lang.php | 15 + .../language/english/admin/groups_lang.php | 18 + .../language/english/admin/index.html | 11 + .../english/admin/main_header_lang.php | 24 + .../english/admin/main_sidebar_lang.php | 45 + .../english/admin/preferences_lang.php | 23 + .../language/english/admin/users_lang.php | 32 + .../language/english/auth_lang.php | 23 + .../language/english/auth_lang_Original.php | 142 + .../application/language/english/index.html | 11 + .../language/english/ion_auth_lang.php | 78 + .../language/english/public/index.html | 11 + .../language/french/admin/actions_lang.php | 26 + .../language/french/admin/database_lang.php | 13 + .../language/french/admin/footer_lang.php | 15 + .../language/french/admin/groups_lang.php | 18 + .../language/french/admin/index.html | 11 + .../french/admin/main_header_lang.php | 24 + .../french/admin/main_sidebar_lang.php | 45 + .../french/admin/preferences_lang.php | 23 + .../language/french/admin/users_lang.php | 32 + .../application/language/french/auth_lang.php | 23 + .../application/language/french/index.html | 11 + .../language/french/ion_auth_lang.php | 81 + .../language/french/public/index.html | 11 + .../nodam/application/language/index.html | 11 + .../portuguese/admin/actions_lang.php | 26 + .../portuguese/admin/database_lang.php | 13 + .../language/portuguese/admin/footer_lang.php | 15 + .../language/portuguese/admin/groups_lang.php | 18 + .../language/portuguese/admin/index.html | 11 + .../portuguese/admin/main_header_lang.php | 24 + .../portuguese/admin/main_sidebar_lang.php | 45 + .../portuguese/admin/preferences_lang.php | 23 + .../language/portuguese/admin/users_lang.php | 32 + .../language/portuguese/auth_lang.php | 23 + .../portuguese/auth_lang_Original.php | 142 + .../language/portuguese/index.html | 11 + .../language/portuguese/ion_auth_lang.php | 78 + .../language/portuguese/public/index.html | 11 + .../nodam/application/libraries/Template.php | 50 + .../libraries/admin/Breadcrumbs.php | 85 + .../libraries/admin/Page_title.php | 56 + .../application/libraries/admin/index.html | 11 + .../libraries/common/Mobile_detect.php | 1472 +++++++++ .../application/libraries/common/index.html | 11 + .../nodam/application/libraries/index.html | 11 + .../application/libraries/public/index.html | 11 + .../nodam/application/third_party/index.html | 11 + .../third_party/ion_auth/config/index.html | 11 + .../third_party/ion_auth/config/ion_auth.php | 186 ++ .../third_party/ion_auth/index.html | 11 + .../third_party/ion_auth/libraries/Bcrypt.php | 231 ++ .../ion_auth/libraries/Ion_auth.php | 563 ++++ .../third_party/ion_auth/libraries/index.html | 11 + .../admin/_templates/control_sidebar.php | 72 + .../views/admin/_templates/footer.php | 35 + .../views/admin/_templates/header.php | 60 + .../views/admin/_templates/index.html | 11 + .../views/admin/_templates/main_header.php | 111 + .../views/admin/_templates/main_sidebar.php | 74 + .../views/admin/_templates/template.php | 38 + .../views/admin/dashboard/index.html | 11 + .../views/admin/dashboard/index.php | 224 ++ .../views/admin/database/index.html | 11 + .../views/admin/database/index.php | 74 + .../application/views/admin/files/index.html | 11 + .../application/views/admin/files/index.php | 33 + .../application/views/admin/files/upload.php | 31 + .../application/views/admin/fwords/index.html | 11 + .../application/views/admin/fwords/index.php | 176 ++ .../application/views/admin/groups/create.php | 50 + .../application/views/admin/groups/delete.php | 5 + .../application/views/admin/groups/edit.php | 57 + .../application/views/admin/groups/index.html | 11 + .../application/views/admin/groups/index.php | 45 + .../nodam/application/views/admin/index.html | 11 + .../views/admin/license/index.html | 11 + .../application/views/admin/license/index.php | 153 + .../application/views/admin/medias/index.html | 11 + .../application/views/admin/medias/index.php | 146 + .../views/admin/pictures/index.html | 11 + .../views/admin/pictures/index.php | 64 + .../application/views/admin/prefs/index.html | 11 + .../application/views/admin/prefs/index.php | 21 + .../views/admin/prefs/interfaces/admin.php | 129 + .../views/admin/prefs/interfaces/index.html | 11 + .../views/admin/prefs/interfaces/public.php | 53 + .../views/admin/questions/index.html | 11 + .../views/admin/questions/index.php | 319 ++ .../views/admin/resources/index.html | 11 + .../views/admin/resources/index.php | 28 + .../views/admin/survey_results/index.html | 11 + .../views/admin/survey_results/index.php | 133 + .../views/admin/surveys/index.html | 11 + .../application/views/admin/surveys/index.php | 272 ++ .../application/views/admin/users/create.php | 83 + .../views/admin/users/deactivate.php | 47 + .../application/views/admin/users/delete.php | 5 + .../application/views/admin/users/edit.php | 107 + .../application/views/admin/users/index.html | 11 + .../application/views/admin/users/index.php | 257 ++ .../application/views/admin/users/profile.php | 93 + .../views/auth/_Original/change_password.php | 25 + .../views/auth/_Original/create_group.php | 20 + .../views/auth/_Original/create_user.php | 46 + .../views/auth/_Original/deactivate_user.php | 18 + .../views/auth/_Original/edit_group.php | 20 + .../views/auth/_Original/edit_user.php | 66 + .../auth/_Original/email/activate.tpl.php | 6 + .../_Original/email/forgot_password.tpl.php | 6 + .../views/auth/_Original/email/index.html | 11 + .../auth/_Original/email/new_password.tpl.php | 7 + .../views/auth/_Original/forgot_password.php | 15 + .../views/auth/_Original/index.html | 11 + .../views/auth/_Original/index.php | 31 + .../views/auth/_Original/login.php | 28 + .../views/auth/_Original/reset_password.php | 22 + .../views/auth/_templates/footer.php | 20 + .../views/auth/_templates/header.php | 32 + .../views/auth/_templates/index.html | 11 + .../views/auth/_templates/template.php | 23 + .../nodam/application/views/auth/choice.php | 12 + .../nodam/application/views/auth/index.html | 11 + .../nodam/application/views/auth/index.php | 31 + .../nodam/application/views/auth/login.php | 44 + .../views/errors/cli/error_404.php | 8 + .../application/views/errors/cli/error_db.php | 8 + .../views/errors/cli/error_exception.php | 21 + .../views/errors/cli/error_general.php | 8 + .../views/errors/cli/error_php.php | 21 + .../application/views/errors/cli/index.html | 11 + .../views/errors/html/error_404.php | 64 + .../views/errors/html/error_db.php | 64 + .../views/errors/html/error_exception.php | 32 + .../views/errors/html/error_general.php | 64 + .../views/errors/html/error_php.php | 33 + .../application/views/errors/html/index.html | 11 + .../nodam/application/views/errors/index.html | 11 + .../nodam/application/views/index.html | 11 + .../nodam/application/views/public/home.php | 52 + .../nodam/application/views/public/index.html | 11 + .../frameworks/adminlte/css/adminlte.min.css | 7 + .../assets/frameworks/adminlte/css/index.html | 11 + .../frameworks/adminlte/css/skins/index.html | 11 + .../css/skins/skin-black-light.min.css | 1 + .../adminlte/css/skins/skin-black.min.css | 1 + .../css/skins/skin-blue-light.min.css | 1 + .../adminlte/css/skins/skin-blue.min.css | 1 + .../css/skins/skin-green-light.min.css | 1 + .../adminlte/css/skins/skin-green.min.css | 1 + .../css/skins/skin-purple-light.min.css | 1 + .../adminlte/css/skins/skin-purple.min.css | 1 + .../adminlte/css/skins/skin-red-light.min.css | 1 + .../adminlte/css/skins/skin-red.min.css | 1 + .../css/skins/skin-yellow-light.min.css | 1 + .../adminlte/css/skins/skin-yellow.min.css | 1 + .../assets/frameworks/adminlte/index.html | 11 + .../frameworks/adminlte/js/adminlte.min.js | 13 + .../assets/frameworks/adminlte/js/index.html | 11 + .../frameworks/animsition/animsition.min.css | 7 + .../frameworks/animsition/animsition.min.js | 8 + .../bootstrap/css/bootstrap.min.css | 6 + .../frameworks/bootstrap/css/index.html | 11 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 ++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes .../frameworks/bootstrap/fonts/index.html | 11 + .../assets/frameworks/bootstrap/index.html | 11 + .../frameworks/bootstrap/js/bootstrap.min.js | 7 + .../assets/frameworks/bootstrap/js/index.html | 11 + .../frameworks/domprojects/css/dp.min.css | 2 + .../frameworks/domprojects/css/index.html | 11 + .../assets/frameworks/domprojects/index.html | 11 + .../frameworks/domprojects/js/dp.min.js | 64 + .../frameworks/domprojects/js/index.html | 11 + .../font-awesome/css/font-awesome.min.css | 4 + .../frameworks/font-awesome/css/index.html | 11 + .../font-awesome/fonts/FontAwesome.otf | Bin 0 -> 134808 bytes .../fonts/fontawesome-webfont.eot | Bin 0 -> 165742 bytes .../fonts/fontawesome-webfont.svg | 2671 ++++++++++++++++ .../fonts/fontawesome-webfont.ttf | Bin 0 -> 165548 bytes .../fonts/fontawesome-webfont.woff | Bin 0 -> 98024 bytes .../fonts/fontawesome-webfont.woff2 | Bin 0 -> 77160 bytes .../frameworks/font-awesome/fonts/index.html | 11 + .../assets/frameworks/font-awesome/index.html | 11 + .../nodam/assets/frameworks/index.html | 11 + .../assets/frameworks/ionicons/css/index.html | 11 + .../frameworks/ionicons/css/ionicons.min.css | 11 + .../frameworks/ionicons/fonts/index.html | 11 + .../frameworks/ionicons/fonts/ionicons.eot | Bin 0 -> 120724 bytes .../frameworks/ionicons/fonts/ionicons.svg | 2230 +++++++++++++ .../frameworks/ionicons/fonts/ionicons.ttf | Bin 0 -> 188508 bytes .../frameworks/ionicons/fonts/ionicons.woff | Bin 0 -> 67904 bytes .../assets/frameworks/ionicons/index.html | 11 + .../nodam/assets/frameworks/jquery/index.html | 11 + .../assets/frameworks/jquery/jquery.min.js | 4 + .../1_metaverse/nodam/assets/index.html | 11 + .../plugins/animsition/animsition.min.css | 7 + .../plugins/animsition/animsition.min.js | 8 + .../assets/plugins/animsition/index.html | 11 + .../colorpickersliders.min.css | 16 + .../colorpickersliders.min.js | 15 + .../plugins/colorpickersliders/index.html | 11 + .../assets/plugins/fastclick/fastclick.min.js | 2 + .../nodam/assets/plugins/fastclick/index.html | 11 + .../html5shiv/html5shiv-printshiv.min.js | 4 + .../assets/plugins/html5shiv/html5shiv.min.js | 4 + .../nodam/assets/plugins/html5shiv/index.html | 11 + .../nodam/assets/plugins/icheck/css/blue.css | 59 + .../nodam/assets/plugins/icheck/css/blue.png | Bin 0 -> 2185 bytes .../assets/plugins/icheck/css/blue@2x.png | Bin 0 -> 4485 bytes .../assets/plugins/icheck/css/index.html | 11 + .../nodam/assets/plugins/icheck/index.html | 11 + .../assets/plugins/icheck/js/icheck.min.js | 11 + .../nodam/assets/plugins/icheck/js/index.html | 11 + .../nodam/assets/plugins/index.html | 11 + .../nodam/assets/plugins/limarquee/index.html | 11 + .../assets/plugins/limarquee/limarquee.css | 55 + .../assets/plugins/limarquee/limarquee.js | 1309 ++++++++ .../assets/plugins/multiselect/index.html | 11 + .../plugins/multiselect/multiselect.min.js | 10 + .../assets/plugins/pwstrength/index.html | 11 + .../plugins/pwstrength/pwstrength.min.js | 4 + .../nodam/assets/plugins/respond/index.html | 11 + .../respond.matchmedia.addListener.min.js | 6 + .../assets/plugins/respond/respond.min.js | 6 + .../assets/plugins/slimscroll/index.html | 11 + .../plugins/slimscroll/slimscroll.min.js | 16 + .../nodam/assets/plugins/tinycolor/index.html | 11 + .../assets/plugins/tinycolor/tinycolor.min.js | 4 + 2_services/1_metaverse/nodam/index.php | 315 ++ 2_services/1_metaverse/nodam/install.php | 41 + .../1_metaverse/nodam/install/index.html | 11 + .../nodam/install/sql/ci_adminlte.sql | 172 + .../nodam/install/sql/ci_adminlte_update.sql | 28 + .../1_metaverse/nodam/install/sql/index.html | 11 + 2_services/1_metaverse/nodam/robots.txt | 6 + 2_services/1_metaverse/nodam/system/.htaccess | 6 + .../nodam/system/core/Benchmark.php | 133 + .../nodam/system/core/CodeIgniter.php | 559 ++++ .../1_metaverse/nodam/system/core/Common.php | 849 +++++ .../1_metaverse/nodam/system/core/Config.php | 379 +++ .../nodam/system/core/Controller.php | 96 + .../nodam/system/core/Exceptions.php | 274 ++ .../1_metaverse/nodam/system/core/Hooks.php | 266 ++ .../1_metaverse/nodam/system/core/Input.php | 895 ++++++ .../1_metaverse/nodam/system/core/Lang.php | 203 ++ .../1_metaverse/nodam/system/core/Loader.php | 1415 +++++++++ .../1_metaverse/nodam/system/core/Log.php | 296 ++ .../1_metaverse/nodam/system/core/Model.php | 76 + .../1_metaverse/nodam/system/core/Output.php | 842 +++++ .../1_metaverse/nodam/system/core/Router.php | 515 +++ .../nodam/system/core/Security.php | 1090 +++++++ .../1_metaverse/nodam/system/core/URI.php | 643 ++++ .../1_metaverse/nodam/system/core/Utf8.php | 164 + .../nodam/system/core/compat/hash.php | 254 ++ .../nodam/system/core/compat/index.html | 11 + .../nodam/system/core/compat/mbstring.php | 149 + .../nodam/system/core/compat/password.php | 251 ++ .../nodam/system/core/compat/standard.php | 182 ++ .../1_metaverse/nodam/system/core/index.html | 11 + .../1_metaverse/nodam/system/database/DB.php | 218 ++ .../nodam/system/database/DB_cache.php | 221 ++ .../nodam/system/database/DB_driver.php | 1985 ++++++++++++ .../nodam/system/database/DB_forge.php | 1033 ++++++ .../system/database/DB_query_builder.php | 2808 +++++++++++++++++ .../nodam/system/database/DB_result.php | 665 ++++ .../nodam/system/database/DB_utility.php | 424 +++ .../database/drivers/cubrid/cubrid_driver.php | 405 +++ .../database/drivers/cubrid/cubrid_forge.php | 230 ++ .../database/drivers/cubrid/cubrid_result.php | 177 ++ .../drivers/cubrid/cubrid_utility.php | 79 + .../system/database/drivers/cubrid/index.html | 11 + .../database/drivers/ibase/ibase_driver.php | 413 +++ .../database/drivers/ibase/ibase_forge.php | 251 ++ .../database/drivers/ibase/ibase_result.php | 161 + .../database/drivers/ibase/ibase_utility.php | 69 + .../system/database/drivers/ibase/index.html | 11 + .../nodam/system/database/drivers/index.html | 11 + .../system/database/drivers/mssql/index.html | 11 + .../database/drivers/mssql/mssql_driver.php | 518 +++ .../database/drivers/mssql/mssql_forge.php | 151 + .../database/drivers/mssql/mssql_result.php | 198 ++ .../database/drivers/mssql/mssql_utility.php | 77 + .../system/database/drivers/mysql/index.html | 11 + .../database/drivers/mysql/mysql_driver.php | 494 +++ .../database/drivers/mysql/mysql_forge.php | 243 ++ .../database/drivers/mysql/mysql_result.php | 199 ++ .../database/drivers/mysql/mysql_utility.php | 211 ++ .../system/database/drivers/mysqli/index.html | 11 + .../database/drivers/mysqli/mysqli_driver.php | 546 ++++ .../database/drivers/mysqli/mysqli_forge.php | 244 ++ .../database/drivers/mysqli/mysqli_result.php | 232 ++ .../drivers/mysqli/mysqli_utility.php | 211 ++ .../system/database/drivers/oci8/index.html | 11 + .../database/drivers/oci8/oci8_driver.php | 701 ++++ .../database/drivers/oci8/oci8_forge.php | 187 ++ .../database/drivers/oci8/oci8_result.php | 229 ++ .../database/drivers/oci8/oci8_utility.php | 68 + .../system/database/drivers/odbc/index.html | 11 + .../database/drivers/odbc/odbc_driver.php | 425 +++ .../database/drivers/odbc/odbc_forge.php | 86 + .../database/drivers/odbc/odbc_result.php | 268 ++ .../database/drivers/odbc/odbc_utility.php | 63 + .../system/database/drivers/pdo/index.html | 11 + .../database/drivers/pdo/pdo_driver.php | 329 ++ .../system/database/drivers/pdo/pdo_forge.php | 65 + .../database/drivers/pdo/pdo_result.php | 198 ++ .../database/drivers/pdo/pdo_utility.php | 63 + .../drivers/pdo/subdrivers/index.html | 11 + .../drivers/pdo/subdrivers/pdo_4d_driver.php | 200 ++ .../drivers/pdo/subdrivers/pdo_4d_forge.php | 217 ++ .../pdo/subdrivers/pdo_cubrid_driver.php | 209 ++ .../pdo/subdrivers/pdo_cubrid_forge.php | 230 ++ .../pdo/subdrivers/pdo_dblib_driver.php | 353 +++ .../pdo/subdrivers/pdo_dblib_forge.php | 149 + .../pdo/subdrivers/pdo_firebird_driver.php | 279 ++ .../pdo/subdrivers/pdo_firebird_forge.php | 237 ++ .../drivers/pdo/subdrivers/pdo_ibm_driver.php | 244 ++ .../drivers/pdo/subdrivers/pdo_ibm_forge.php | 154 + .../pdo/subdrivers/pdo_informix_driver.php | 309 ++ .../pdo/subdrivers/pdo_informix_forge.php | 163 + .../pdo/subdrivers/pdo_mysql_driver.php | 379 +++ .../pdo/subdrivers/pdo_mysql_forge.php | 256 ++ .../drivers/pdo/subdrivers/pdo_oci_driver.php | 326 ++ .../drivers/pdo/subdrivers/pdo_oci_forge.php | 176 ++ .../pdo/subdrivers/pdo_odbc_driver.php | 229 ++ .../drivers/pdo/subdrivers/pdo_odbc_forge.php | 70 + .../pdo/subdrivers/pdo_pgsql_driver.php | 384 +++ .../pdo/subdrivers/pdo_pgsql_forge.php | 210 ++ .../pdo/subdrivers/pdo_sqlite_driver.php | 213 ++ .../pdo/subdrivers/pdo_sqlite_forge.php | 238 ++ .../pdo/subdrivers/pdo_sqlsrv_driver.php | 369 +++ .../pdo/subdrivers/pdo_sqlsrv_forge.php | 149 + .../database/drivers/postgre/index.html | 11 + .../drivers/postgre/postgre_driver.php | 619 ++++ .../drivers/postgre/postgre_forge.php | 205 ++ .../drivers/postgre/postgre_result.php | 182 ++ .../drivers/postgre/postgre_utility.php | 78 + .../system/database/drivers/sqlite/index.html | 11 + .../database/drivers/sqlite/sqlite_driver.php | 330 ++ .../database/drivers/sqlite/sqlite_forge.php | 205 ++ .../database/drivers/sqlite/sqlite_result.php | 164 + .../drivers/sqlite/sqlite_utility.php | 61 + .../database/drivers/sqlite3/index.html | 11 + .../drivers/sqlite3/sqlite3_driver.php | 344 ++ .../drivers/sqlite3/sqlite3_forge.php | 225 ++ .../drivers/sqlite3/sqlite3_result.php | 194 ++ .../drivers/sqlite3/sqlite3_utility.php | 61 + .../system/database/drivers/sqlsrv/index.html | 11 + .../database/drivers/sqlsrv/sqlsrv_driver.php | 543 ++++ .../database/drivers/sqlsrv/sqlsrv_forge.php | 149 + .../database/drivers/sqlsrv/sqlsrv_result.php | 193 ++ .../drivers/sqlsrv/sqlsrv_utility.php | 77 + .../nodam/system/database/index.html | 11 + .../1_metaverse/nodam/system/fonts/index.html | 11 + .../1_metaverse/nodam/system/fonts/texb.ttf | Bin 0 -> 143830 bytes .../nodam/system/helpers/array_helper.php | 115 + .../nodam/system/helpers/captcha_helper.php | 341 ++ .../nodam/system/helpers/cookie_helper.php | 113 + .../nodam/system/helpers/date_helper.php | 742 +++++ .../nodam/system/helpers/directory_helper.php | 101 + .../nodam/system/helpers/download_helper.php | 158 + .../nodam/system/helpers/email_helper.php | 84 + .../nodam/system/helpers/file_helper.php | 453 +++ .../nodam/system/helpers/form_helper.php | 1055 +++++++ .../nodam/system/helpers/html_helper.php | 410 +++ .../nodam/system/helpers/index.html | 11 + .../nodam/system/helpers/inflector_helper.php | 287 ++ .../nodam/system/helpers/language_helper.php | 75 + .../nodam/system/helpers/number_helper.php | 94 + .../nodam/system/helpers/path_helper.php | 82 + .../nodam/system/helpers/security_helper.php | 137 + .../nodam/system/helpers/smiley_helper.php | 255 ++ .../nodam/system/helpers/string_helper.php | 304 ++ .../nodam/system/helpers/text_helper.php | 567 ++++ .../system/helpers/typography_helper.php | 104 + .../nodam/system/helpers/url_helper.php | 569 ++++ .../nodam/system/helpers/xml_helper.php | 90 + .../1_metaverse/nodam/system/index.html | 11 + .../system/language/english/calendar_lang.php | 84 + .../system/language/english/date_lang.php | 94 + .../nodam/system/language/english/db_lang.php | 63 + .../system/language/english/email_lang.php | 58 + .../language/english/form_validation_lang.php | 69 + .../system/language/english/ftp_lang.php | 51 + .../system/language/english/imglib_lang.php | 57 + .../nodam/system/language/english/index.html | 11 + .../language/english/migration_lang.php | 47 + .../system/language/english/number_lang.php | 44 + .../language/english/pagination_lang.php | 43 + .../system/language/english/profiler_lang.php | 60 + .../language/english/unit_test_lang.php | 58 + .../system/language/english/upload_lang.php | 55 + .../nodam/system/language/index.html | 11 + .../nodam/system/libraries/Cache/Cache.php | 255 ++ .../libraries/Cache/drivers/Cache_apc.php | 217 ++ .../libraries/Cache/drivers/Cache_dummy.php | 172 + .../libraries/Cache/drivers/Cache_file.php | 286 ++ .../Cache/drivers/Cache_memcached.php | 313 ++ .../libraries/Cache/drivers/Cache_redis.php | 328 ++ .../Cache/drivers/Cache_wincache.php | 217 ++ .../system/libraries/Cache/drivers/index.html | 11 + .../nodam/system/libraries/Cache/index.html | 11 + .../nodam/system/libraries/Calendar.php | 546 ++++ .../nodam/system/libraries/Cart.php | 567 ++++ .../nodam/system/libraries/Driver.php | 342 ++ .../nodam/system/libraries/Email.php | 2490 +++++++++++++++ .../nodam/system/libraries/Encrypt.php | 521 +++ .../nodam/system/libraries/Encryption.php | 941 ++++++ .../system/libraries/Form_validation.php | 1591 ++++++++++ .../nodam/system/libraries/Ftp.php | 667 ++++ .../nodam/system/libraries/Image_lib.php | 1842 +++++++++++ .../nodam/system/libraries/Javascript.php | 856 +++++ .../system/libraries/Javascript/Jquery.php | 1076 +++++++ .../system/libraries/Javascript/index.html | 11 + .../nodam/system/libraries/Migration.php | 477 +++ .../nodam/system/libraries/Pagination.php | 704 +++++ .../nodam/system/libraries/Parser.php | 248 ++ .../nodam/system/libraries/Profiler.php | 574 ++++ .../system/libraries/Session/Session.php | 983 ++++++ .../Session/SessionHandlerInterface.php | 59 + .../libraries/Session/Session_driver.php | 208 ++ .../drivers/Session_database_driver.php | 446 +++ .../Session/drivers/Session_files_driver.php | 426 +++ .../drivers/Session_memcached_driver.php | 397 +++ .../Session/drivers/Session_redis_driver.php | 417 +++ .../libraries/Session/drivers/index.html | 11 + .../nodam/system/libraries/Session/index.html | 11 + .../nodam/system/libraries/Table.php | 538 ++++ .../nodam/system/libraries/Trackback.php | 556 ++++ .../nodam/system/libraries/Typography.php | 424 +++ .../nodam/system/libraries/Unit_test.php | 406 +++ .../nodam/system/libraries/Upload.php | 1326 ++++++++ .../nodam/system/libraries/User_agent.php | 681 ++++ .../nodam/system/libraries/Xmlrpc.php | 1920 +++++++++++ .../nodam/system/libraries/Xmlrpcs.php | 619 ++++ .../nodam/system/libraries/Zip.php | 532 ++++ .../nodam/system/libraries/index.html | 11 + .../nodam/upload/avatar/README.txt | 2 + .../1_metaverse/nodam/upload/avatar/f_001.png | Bin 0 -> 35014 bytes .../1_metaverse/nodam/upload/avatar/f_002.png | Bin 0 -> 35186 bytes .../1_metaverse/nodam/upload/avatar/f_003.png | Bin 0 -> 53559 bytes .../1_metaverse/nodam/upload/avatar/f_004.png | Bin 0 -> 79337 bytes .../1_metaverse/nodam/upload/avatar/f_005.png | Bin 0 -> 32345 bytes .../nodam/upload/avatar/index.html | 11 + .../1_metaverse/nodam/upload/avatar/m_001.png | Bin 0 -> 27431 bytes .../1_metaverse/nodam/upload/avatar/m_002.png | Bin 0 -> 27476 bytes .../1_metaverse/nodam/upload/avatar/m_003.png | Bin 0 -> 39142 bytes .../1_metaverse/nodam/upload/avatar/m_004.png | Bin 0 -> 40403 bytes .../1_metaverse/nodam/upload/avatar/m_005.png | Bin 0 -> 32138 bytes .../1_metaverse/nodam/upload/index.html | 11 + .../nodamLand/resource/css/font.css | 65 + .../resource/css/font/Pretendard-Black.woff | Bin 0 -> 1273472 bytes .../resource/css/font/Pretendard-Bold.woff | Bin 0 -> 1262280 bytes .../css/font/Pretendard-ExtraBold.woff | Bin 0 -> 1266360 bytes .../css/font/Pretendard-ExtraLight.woff | Bin 0 -> 1240428 bytes .../resource/css/font/Pretendard-Light.woff | Bin 0 -> 1254940 bytes .../resource/css/font/Pretendard-Medium.woff | Bin 0 -> 1258312 bytes .../resource/css/font/Pretendard-Regular.woff | Bin 0 -> 1255064 bytes .../css/font/Pretendard-SemiBold.woff | Bin 0 -> 1258452 bytes .../resource/css/font/Pretendard-Thin.woff | Bin 0 -> 1207668 bytes .../nodamLand/resource/css/policy.css | 124 + .../nodamLand/resource/images/t_logo.png | Bin 0 -> 169833 bytes .../nodamLand/resource/page/index.html | 10 + .../nodamLand/resource/page/info_policy.html | 140 + .../nodamLand/resource/page/user_policy.html | 118 + 2_services/README.md | 13 + .../ai_lecture}/.github/workflows/ci.yml | 0 .../ai_lecture}/.gitlab-ci.yml | 0 .../ai_lecture}/AI_CONTENT_UPDATE_POLICY.md | 0 .../ai_lecture}/AI_Expert_Course_Schedule.md | 0 .../ai_lecture}/CONTRIBUTING.md | 0 .../ai_lecture}/Cloud_AI_Services_Guide.md | 0 .../ai_lecture}/Dockerfile.dev | 0 .../ai_lecture}/Dockerfile.gpu | 0 {ai_lecture => 2_services/ai_lecture}/FAQ.md | 0 .../ai_lecture}/INDUSTRY_CASE_STUDIES.md | 0 .../ai_lecture}/Makefile | 0 .../ai_lecture}/ONLINE_COMMUNITY_GUIDE.md | 0 .../ai_lecture}/PAIR_PROGRAMMING_GUIDE.md | 0 .../ai_lecture}/PROGRESS_TRACKING_SYSTEM.md | 0 .../ai_lecture}/README.md | 2 +- .../ai_lecture}/SETUP.md | 0 .../ai_lecture}/TROUBLESHOOTING.md | 0 .../Tooling_Frameworks_Comparison.md | 0 .../ai_lecture}/assets/course_banner.png | Bin .../assets/history_of_ai/alexnet.png | 0 .../history_of_ai/alphago_lee_sedol.jpg | 0 .../assets/history_of_ai/backpropagation.png | 0 .../history_of_ai/deep_blue_kasparov.jpg | 0 .../deep_learning_revolution.png | 0 .../assets/history_of_ai/expert_system.png | 0 .../history_of_ai/gartner_hype_cycle.png | 0 .../history_of_ai/generative_ai_examples.png | 0 .../history_of_ai/mcculloch_pitts_neuron.png | 0 .../assets/history_of_ai/perceptron.png | 0 .../transformer_architecture.png | 0 .../assets/history_of_ai/turing_test.png | 0 .../courses/00_introduction/README.md | 0 .../00_introduction/part_0.1_history_of_ai.md | 0 .../00_introduction/part_0_introduction.md | 0 .../01_ai_development_environment/README.md | 0 .../cursor_advanced_guide.md | 0 .../part_1_ai_development_environment.md | 0 .../courses/02_python_core_syntax/README.md | 0 .../part_2_python_core_syntax.md | 0 .../02_python_core_syntax/quick_review.md | 0 .../courses/03_python_collections/README.md | 0 .../part_3_python_collections.md | 0 .../03_python_collections/quick_review.md | 0 .../04_object_oriented_programming/README.md | 0 .../part_4_object_oriented_programming.md | 0 .../quick_review.md | 0 .../05.5_linear_algebra_with_numpy/README.md | 0 .../part_5.5_linear_algebra_with_numpy.md | 0 .../courses/05.6_calculus_for_ml/README.md | 21 + .../part_5.6_calculus_for_ml.md | 170 + .../courses/05_ai_core_libraries/README.md | 0 .../part_5_ai_core_libraries.md | 0 .../courses/06_machine_learning/README.md | 0 .../part_6_machine_learning.md | 0 .../courses/07_deep_learning/README.md | 0 .../live_coding_transformer_block.md | 0 .../part_7.1_recurrent_neural_networks.md | 0 ...part_7.2_transformer_and_llm_principles.md | 0 ..._application_development_with_langchain.md | 0 .../part_7.4_graph_neural_networks.md | 0 .../part_7.5_reinforcement_learning.md | 0 .../07_deep_learning/part_7_deep_learning.md | 0 .../08_model_serving_with_fastapi/README.md | 0 .../part_8_model_serving_with_fastapi.md | 0 .../courses/09_production_ready_api/README.md | 0 .../part_9_production_ready_api.md | 0 .../courses/10_expert_path/README.md | 0 .../10_expert_path/part_10_expert_path.md | 0 .../10_expert_path/recommended_resources.md | 0 .../ai_lecture}/courses/11_mlops/README.md | 0 .../courses/11_mlops/part_11_mlops.md | 0 .../courses/12_model_optimization/README.md | 0 .../part_12_model_optimization.md | 0 .../courses/13_generative_ai/README.md | 0 .../part_13.1_advanced_rag_techniques.md | 0 .../part_13.2_advanced_ai_agents.md | 0 .../13_generative_ai/part_13_generative_ai.md | 0 .../courses/14_ai_ethics/README.md | 0 .../courses/14_ai_ethics/part_14_ai_ethics.md | 0 .../courses/15_capstone_project/README.md | 0 .../15_capstone_project/capstone_template.md | 0 .../part_15_capstone_project.md | 0 .../ai_lecture}/docker-compose.dev.yml | 0 .../ai_lecture}/docker-compose.gpu.yml | 0 .../ai_lecture}/env.example | 0 .../ai_lecture}/glossary.md | 0 .../ai_lecture}/nginx/dev.conf | 0 .../ai_lecture}/poetry.lock | 0 .../ai_lecture}/pyproject.toml | 0 2_services/ai_lecture/resources/README.md | 144 + .../capstone_milestone_guide.md | 73 + .../capstone_guide/evaluation_rubric.md | 40 + .../mentor_feedback_system_guide.md | 64 + .../capstone_guide/presentation_guide.md | 42 + .../case_studies/1_ecommerce_segmentation.md | 44 + .../case_studies/2_finance_fraud_detection.md | 43 + .../case_studies/3_nlp_sentiment_analysis.md | 48 + .../case_studies/industry_datasets.md | 64 + .../infographics/ai_ml_dl_relationship.md | 17 + .../infographics/python_data_structures.md | 14 + .../ai_lecture/resources/learning_paths.md | 54 + .../.github/workflows/ci-pipeline.yml | 41 + .../model_serving_fastapi_example/Dockerfile | 21 + .../model_serving_fastapi_example/README.md | 85 + .../docker-compose.yml | 10 + .../model_serving_fastapi_example/main.py | 52 + .../requirements.txt | 2 + .../monitoring_retraining/README.md | 44 + .../monitoring_retraining/monitor.py | 49 + .../monitoring_retraining/retrain.py | 58 + .../python_basics_practice.md | 118 + .../ai_lecture}/scripts/format_code.sh | 0 .../ai_lecture}/scripts/progress_checker.py | 0 .../ai_lecture}/scripts/run_tests.sh | 0 .../ai_lecture}/scripts/setup.sh | 0 .../02_python_core_syntax/README.md | 0 .../part_2_python_core_syntax.ipynb | 0 .../part_2_python_core_syntax.py | 0 .../tests/test_part_2.py | 0 .../03_python_collections/README.md | 0 .../part_3_python_collections.ipynb | 0 .../part_3_python_collections.py | 0 .../tests/test_part_3.py | 0 .../04_object_oriented_programming/README.md | 0 .../part_4_object_oriented_programming.ipynb | 0 .../part_4_object_oriented_programming.py | 0 .../tests/test_part_4.py | 0 .../05.5_linear_algebra_with_numpy/README.md | 0 .../part_5.5_linear_algebra_with_numpy.py | 0 .../linear_regression_gradient_descent.py | 83 + .../05_ai_core_libraries/README.md | 0 .../part_5_ai_core_libraries.ipynb | 0 .../part_5_ai_core_libraries.py | 0 .../05_ai_core_libraries/tests/test_part_5.py | 0 .../source_code/06_machine_learning/README.md | 0 .../part_6_machine_learning.ipynb | 0 .../part_6_machine_learning.py | 0 .../06_machine_learning/tests/test_part_6.py | 0 .../.placeholder | 0 .../part_7.3_llm_application_development.py | 0 .../source_code/07_deep_learning/README.md | 0 .../live_coding_transformer_from_scratch.py | 0 .../part_7.1_recurrent_neural_networks.ipynb | 0 .../part_7.1_recurrent_neural_networks.py | 0 ...t_7.2_transformer_and_llm_principles.ipynb | 0 ...part_7.2_transformer_and_llm_principles.py | 0 .../part_7.4_graph_neural_networks.ipynb | 0 .../part_7.4_graph_neural_networks.py | 0 .../part_7.5_reinforcement_learning.ipynb | 0 .../part_7.5_reinforcement_learning.py | 0 .../part_7_deep_learning.ipynb | 0 .../07_deep_learning/part_7_deep_learning.py | 0 .../07_deep_learning/tests/test_part_7.py | 0 .../.placeholder | 0 .../08_model_serving_with_fastapi/README.md | 0 .../08_model_serving_with_fastapi/api.py | 0 .../08_model_serving_with_fastapi/main.py | 0 .../08_model_serving_with_fastapi/schemas.py | 0 .../tests/test_api.py | 0 .../09_production_ready_api/Dockerfile | 0 .../09_production_ready_api/README.md | 0 .../09_production_ready_api/app/__init__.py | 0 .../09_production_ready_api/app/api.py | 0 .../09_production_ready_api/app/main.py | 0 .../09_production_ready_api/app/schemas.py | 0 .../app/tests/test_part_9.py | 0 .../docker-compose.yml | 0 .../10_expert_path/part_10_expert_path.py | 0 .../10_expert_path/tests/test_part_10.py | 0 .../source_code/11_mlops/README.md | 0 .../11_mlops/ab_test_cd_workflow.yml | 0 .../11_mlops/conditional_pipeline.py | 0 .../11_mlops/data_drift_detection.py | 0 .../11_mlops/feature_store_pipeline.py | 0 .../source_code/11_mlops/tests/test_mlops.py | 0 .../12_model_optimization/README.md | 0 .../bert_quantization.py | 0 .../tests/test_part_12.py | 0 .../triton_migration_benchmark.py | 0 .../source_code/13_generative_ai/README.md | 0 .../13_generative_ai/advanced_rag_chatbot.py | 0 .../13_generative_ai/autonomous_agent.py | 0 .../contextual_compression_rag.py | 0 .../langsmith_tracing_debugging.py | 0 .../multi_agent_collaboration.py | 0 .../13_generative_ai/tests/test_part_13.py | 0 .../source_code/14_ai_ethics/README.md | 0 .../14_ai_ethics/bias_detection_mitigation.py | 0 .../14_ai_ethics/xai_report_generator.py | 0 .../source_code/15_capstone_project/README.md | 0 .../part_15_capstone_project.py | 0 .../15_capstone_project/tests/test_part_15.py | 0 .../ai_lecture}/source_code/README.md | 0 .../source_code/integration_tests.py | 0 .../code_evaluation_prototype/Dockerfile | 20 + .../code_evaluation_prototype/README.md | 56 + 2_services/code_evaluation_prototype/main.py | 345 ++ .../requirements.txt | 6 + .../static/index.html | 151 + .../code_evaluation_prototype/test_api.py | 86 + .../test_samples/square.py | 16 + .../part_0_5/quiz_data_analysis.md | 150 + .../part_0_5/quiz_data_visualization.md | 176 ++ .../part_0_5/quiz_machine_learning_basics.md | 170 + .../part_0_5/quiz_python_basics.md | 140 + .../part_6_9/minitest_core_ai_models.md | 187 ++ .../part_6_9/minitest_deep_learning.md | 227 ++ 2_services/course_quizzes/quiz_structure.md | 73 + .../virtual_scenarios/finance_scenario.md | 42 + .../virtual_scenarios/healthcare_scenario.md | 38 + .../virtual_scenarios/retail_scenario.md | 42 + 3_development/README.md | 10 + .../fix_notebook.py | 0 .../rubrics/capstone_project_rubric.md | 93 + .../rubrics/coding_assignment_rubric.md | 81 + .../rubrics/data_analysis_project_rubric.md | 81 + 3_development/rubrics/ml_project_rubric.md | 93 + 3_development/rubrics/rubric_guidelines.md | 80 + 4_documentation/DOCUMENT_INDEX.md | 164 + .../PROJECT_IMPROVEMENT_SUMMARY.md | 207 ++ 4_documentation/README.md | 16 + 4_documentation/analysis_report.md | 109 + .../code_evaluation_system_design.md | 62 + 4_documentation/community_guidelines.md | 40 + 4_documentation/hackathon_plan.md | 45 + 4_documentation/peer_learning_design.md | 38 + 4_documentation/podcast_content_plan.md | 34 + README.md | 269 +- docker/docker_3dp/printer | 1 - docker/docker_fastapi | 1 - docker/docker_fastapi_new | 1 - docker/docker_jenkins/jenkins_config.xml | 7 - .../ssl/gdlab.co.kr/gdlab.co.kr.zip | Bin 7744 -> 0 bytes docker/docker_open_webui | 1 - docker/docker_prusa_exporter | 1 - docker/geumdo-rag-chat-bot | 1 - 2333 files changed, 95952 insertions(+), 274 deletions(-) create mode 100644 1_infrastructure/README.md rename {docker => 1_infrastructure/docker}/.gitignore (100%) rename {docker => 1_infrastructure/docker}/README.md (100%) create mode 100644 1_infrastructure/docker/ai_career_portfolio_guidelines.md create mode 100644 1_infrastructure/docker/ai_industry_case_studies.md create mode 100644 1_infrastructure/docker/cloud_practice_environment_guide.md rename {docker => 1_infrastructure/docker}/deployment_guide.md (100%) rename {docker => 1_infrastructure/docker}/docker-windows-vm/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker-windows-vm/README.md (100%) rename {docker => 1_infrastructure/docker}/docker-windows-vm/Vagrantfile (100%) rename {docker => 1_infrastructure/docker}/docker-windows-vm/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker-windows-vm/startup.sh (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/docker-compose.yml (100%) create mode 100644 1_infrastructure/docker/docker_3dp/printer/.gitignore create mode 100644 1_infrastructure/docker/docker_3dp/printer/README.md create mode 100644 1_infrastructure/docker/docker_3dp/printer/app.bak.py create mode 100644 1_infrastructure/docker/docker_3dp/printer/app.py create mode 100644 1_infrastructure/docker/docker_3dp/printer/requirements.txt create mode 100644 1_infrastructure/docker/docker_3dp/printer/slicer_test.py rename {docker => 1_infrastructure/docker}/docker_3dp/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/sites-available/default (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/sites-available/nextcloud.conf (100%) rename {docker => 1_infrastructure/docker}/docker_3dp/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_all/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_all/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_all/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_all/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_all/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_all/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_centos/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_centos/Dockerfile_centos (100%) rename {docker => 1_infrastructure/docker}/docker_centos/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_centos/docker-compose-centos.yml (100%) rename {docker => 1_infrastructure/docker}/docker_centos/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_centos/httpd.conf (100%) rename {docker => 1_infrastructure/docker}/docker_centos/my.cnf (100%) rename {docker => 1_infrastructure/docker}/docker_centos/php.ini (100%) rename {docker => 1_infrastructure/docker}/docker_centos/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_centos/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_centos/sshd_config (100%) rename {docker => 1_infrastructure/docker}/docker_centos/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/httpd.conf (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/my.cnf (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/php.ini (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/sshd_config (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/ssl.conf (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_centos_desktop/test-installation.pl (100%) rename {docker => 1_infrastructure/docker}/docker_crowling/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_crowling/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_crowling/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_crowling/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_db/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_db/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_db/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_db/make_root_remote_host.sh (100%) rename {docker => 1_infrastructure/docker}/docker_db/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_db/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/make_root_remote_host.sh (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_db_new/setting.sql (100%) create mode 100644 1_infrastructure/docker/docker_fastapi/.gitignore create mode 100644 1_infrastructure/docker/docker_fastapi/Dockerfile create mode 100644 1_infrastructure/docker/docker_fastapi/README.md create mode 100644 1_infrastructure/docker/docker_fastapi/docker-compose.yml create mode 100644 1_infrastructure/docker/docker_fastapi_new/.gitignore create mode 100644 1_infrastructure/docker/docker_fastapi_new/Dockerfile create mode 100644 1_infrastructure/docker/docker_fastapi_new/README.md create mode 100644 1_infrastructure/docker/docker_fastapi_new/docker-compose.yml rename {docker => 1_infrastructure/docker}/docker_flask_proxy/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/app.py (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/proxy.geumdo.net/README (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/proxy.geumdo.net/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/proxy.geumdo.net/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/proxy.geumdo.net/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/proxy.geumdo.net/privkey.pem (100%) rename {docker => 1_infrastructure/docker}/docker_flask_proxy/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_gitlab/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_gitlab/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_java/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_java/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_java/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_java/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_java/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/gbmax.or.kr_ssl/TrustedRootG2.crt (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.key (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/max.or.kr_ssl/DigiCertCAG1.crt (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/max.or.kr_ssl/TrustedRootG2.crt (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/max.or.kr_ssl/max.or.kr.key (100%) rename {docker => 1_infrastructure/docker}/docker_java/ssl/max.or.kr_ssl/max.or.kr.p7b (100%) rename {docker => 1_infrastructure/docker}/docker_java/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_jenkins/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_jenkins/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_jenkins/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_jenkins/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_jenkins/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/files/Untitled 1.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/files/Untitled.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/files/Untitled1.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/files/Untitled2.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/files/llama3.1_koalpaca.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/Untitled 1.ipynb.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/Untitled Folder.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/Untitled.ipynb.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/Untitled1.ipynb.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/Untitled2.ipynb.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/.Trash-0/info/llama3.1_koalpaca.ipynb.trashinfo (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/Untitled.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/bi-lstm-1.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/gpucheck.ipynb (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/notebooks/test.txt (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/requirements.txt (100%) rename {docker => 1_infrastructure/docker}/docker_jupyter/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/ca.crt (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/dh4096.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/README (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/_account/private.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/_account/public.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/last.csr (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/private.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/mail.geumdo.net/public.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/letsencrypt/privkey.pem (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/server.crt (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/certs/server.key (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_mailserver/rebuild.sh (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/etc/nginx/sites-available/default (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/index.js (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/m_fword.js (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/socket.js (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/test_chat.html (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/test_socket_chat.html (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/home/ubuntu/node/test_upload.html (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/nodam.sql (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/readme.txt (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_metaverse/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/.updated-options-ssl-nginx-conf-digest.txt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/.updated-ssl-dhparams-pem-digest.txt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey2.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey3.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/cert1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/chain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/fullchain1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/privkey1.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/cli.ini (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0000_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0001_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0002_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0003_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0004_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0005_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0006_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0007_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0008_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0009_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0010_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0011_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0012_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0013_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0014_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0015_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0016_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0017_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0018_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0019_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0020_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0021_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0022_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0023_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0024_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0025_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0026_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0027_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0028_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0029_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0030_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0031_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0032_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0033_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0034_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0035_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0036_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0037_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0038_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0039_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0040_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0041_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0042_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0043_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0044_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0045_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0046_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0047_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0048_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0049_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0050_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0051_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0052_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0053_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0054_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0055_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0056_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0057_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0058_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0059_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0060_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0061_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0062_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0063_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0064_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0065_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0066_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0067_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0068_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0069_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0070_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0071_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0072_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0073_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0074_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0075_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0076_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0077_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0078_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0079_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0080_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0081_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0082_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0083_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0084_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0085_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0086_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0087_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0088_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0089_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0090_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0091_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0092_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0093_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0094_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0095_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0096_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0097_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0098_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0099_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0100_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0101_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0102_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0103_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0104_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0105_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0106_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0107_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0108_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0109_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0110_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0111_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0112_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0113_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0114_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0115_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0116_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0117_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0118_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0119_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0120_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0121_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0122_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0123_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0124_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0125_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0126_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0127_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0128_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0129_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0130_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0131_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0132_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0133_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0134_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0135_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0136_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0137_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0138_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0139_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0140_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0141_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0142_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0143_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0144_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0145_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0146_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0147_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0148_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0149_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0150_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0151_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0152_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0153_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0154_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0155_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0156_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0157_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0158_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0159_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0160_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0161_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0162_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0163_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0164_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0165_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0166_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0167_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0168_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0169_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0170_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0171_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0172_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0173_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0174_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0175_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0176_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0177_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0178_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0179_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0180_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0181_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0182_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0183_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0184_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0185_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0186_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0187_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0188_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0189_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0190_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0191_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0192_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0193_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0194_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0195_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0196_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0197_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0198_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0199_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0200_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0201_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0202_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0203_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0204_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0205_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0206_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0207_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0208_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0209_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0210_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0211_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0212_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0213_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0214_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0215_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0216_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0217_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0218_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0219_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0220_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0221_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0222_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0223_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0224_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0225_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0226_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0227_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0228_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0229_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0230_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0231_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0232_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0233_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0234_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0235_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0236_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0237_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0238_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0239_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0240_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0241_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0242_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0243_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0244_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0245_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0246_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0247_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0248_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0249_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0250_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0251_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0252_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0253_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0254_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0255_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0256_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0257_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0258_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0259_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0260_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0261_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0262_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0263_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0264_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0265_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0266_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0267_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0268_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0269_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0270_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0271_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0272_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0273_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0274_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0275_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0276_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0277_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0278_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0279_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0280_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0281_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0282_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0283_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0284_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0285_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0286_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0287_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0288_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0289_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0290_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0291_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0292_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0293_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0294_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0295_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0296_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0297_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0298_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0299_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0300_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0301_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0302_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0303_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0304_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0305_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0306_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0307_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0308_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0309_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0310_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0311_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0312_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0313_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0314_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0315_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0316_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0317_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0318_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0319_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0320_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0321_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0322_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0323_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0324_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0325_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0326_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0327_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0328_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0329_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0330_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0331_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0332_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0333_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0334_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0335_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0336_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0337_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0338_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0339_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0340_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0341_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0342_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0343_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0344_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0345_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0346_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0347_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0348_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0349_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0350_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0351_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0352_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0353_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0354_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0355_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0356_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0357_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0358_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0359_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0360_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0361_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0362_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0363_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0364_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0365_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0366_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0367_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0368_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0369_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0370_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0371_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0372_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0373_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0374_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0375_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0376_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0377_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0378_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0379_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0380_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0381_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0382_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0383_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0384_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0385_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0386_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0387_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0388_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0389_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0390_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0391_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0392_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0393_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0394_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0395_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0396_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0397_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0398_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0399_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0400_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0401_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0402_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0403_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0404_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0405_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0406_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0407_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0408_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0409_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0410_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0411_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0412_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0413_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0414_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0415_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0416_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0417_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0418_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0419_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0420_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0421_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0422_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0423_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0424_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0425_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0426_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0427_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0428_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0429_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0430_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0431_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0432_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0433_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0434_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0435_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0436_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0437_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0438_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0439_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0440_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0441_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0442_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0443_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0444_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0445_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0446_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0447_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0448_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0449_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0450_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0451_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0452_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0453_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0454_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0455_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0456_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0457_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0458_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0459_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0460_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0461_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0462_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0463_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0464_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0465_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0466_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0467_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0468_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0469_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0470_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0471_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0472_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0473_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0474_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0475_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0476_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0477_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0478_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0479_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0480_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0481_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0482_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0483_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0484_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0485_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0486_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0487_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0488_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0489_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0490_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0491_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0492_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0493_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0494_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0495_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0496_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0497_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0498_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0499_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0500_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0501_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0502_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0503_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0504_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0505_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0506_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0507_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0508_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0509_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0510_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0511_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0512_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0513_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0514_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0515_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0516_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0517_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0518_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0519_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0520_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0521_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0522_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0523_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0524_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0525_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0526_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0527_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0528_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0529_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0530_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0531_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0532_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0533_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0534_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0535_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0536_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0537_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0538_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0539_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0540_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0541_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0542_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0543_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0544_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0545_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0546_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0547_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0548_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0549_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0550_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0551_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0552_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0553_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0554_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0555_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0556_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0557_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0558_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0559_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0560_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0561_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0562_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0563_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0564_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0565_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0566_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0567_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0568_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0569_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0570_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0571_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0572_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0573_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0574_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0575_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0576_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0577_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0578_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0579_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0580_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0581_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0582_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0583_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0584_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0585_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0586_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0587_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0588_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0589_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0590_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0591_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0592_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0593_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0594_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0595_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0596_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0597_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0598_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0599_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0600_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0601_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0602_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0603_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0604_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0605_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0606_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0607_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0608_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0609_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0610_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0611_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0612_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0613_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0614_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0615_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0616_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0617_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0618_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0619_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0620_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0621_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0622_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0623_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0624_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0625_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0626_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0627_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0628_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0629_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0630_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0631_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0632_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0633_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0634_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0635_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0636_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0637_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0638_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0639_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0640_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0641_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0642_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0643_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0644_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0645_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0646_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0647_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0648_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0649_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0650_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0651_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0652_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0653_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0654_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0655_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0656_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0657_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0658_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0659_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0660_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0661_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0662_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0663_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0664_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0665_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0666_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0667_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0668_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0669_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0670_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0671_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0672_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0673_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0674_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0675_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0676_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0677_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0678_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0679_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0680_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0681_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0682_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0683_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0684_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0685_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0686_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0687_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0688_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0689_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0690_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0691_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0692_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0693_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0694_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0695_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0696_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0697_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0698_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0699_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0700_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0701_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0702_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0703_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0704_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0705_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0706_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0707_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0708_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0709_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0710_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0711_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0712_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0713_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0714_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0715_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0716_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0717_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0718_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0719_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0720_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0721_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0722_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0723_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0724_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0725_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0726_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0727_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0728_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0729_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0730_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0731_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0732_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0733_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0734_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0735_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0736_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0737_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0738_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0739_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0740_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0741_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0742_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0743_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0744_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0745_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0746_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0747_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0748_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0749_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0750_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0751_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0752_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0753_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0754_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0755_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0756_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0757_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0758_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0759_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0760_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0761_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0762_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0763_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0764_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0765_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0766_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0767_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0768_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0769_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0770_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0771_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0772_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0773_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0774_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0775_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0776_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0777_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0778_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0779_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0780_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0781_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0782_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0783_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0784_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0785_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0786_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0787_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0788_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0789_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0790_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0791_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0792_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0793_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0794_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0795_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0796_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0797_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0798_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0799_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0800_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0801_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0802_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0803_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0804_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0805_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0806_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0807_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0808_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0809_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0810_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0811_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0812_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0813_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0814_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0815_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0816_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0817_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0818_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0819_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0820_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0821_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0822_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0823_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0824_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0825_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0826_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0827_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0828_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0829_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0830_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0831_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0832_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0833_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0834_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0835_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0836_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0837_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0838_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0839_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0840_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0841_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0842_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0843_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0844_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0845_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0846_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0847_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0848_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0849_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0850_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0851_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0852_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0853_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0854_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0855_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0856_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0857_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0858_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0859_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0860_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0861_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0862_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0863_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0864_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0865_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0866_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0867_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0868_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0869_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0870_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0871_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0872_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0873_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0874_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0875_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0876_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0877_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0878_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0879_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0880_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0881_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0882_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0883_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0884_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0885_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0886_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0887_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0888_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0889_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0890_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0891_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0892_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0893_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0894_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0895_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0896_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0897_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0898_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0899_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0900_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0901_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0902_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0903_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0904_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0905_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0906_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0907_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0908_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0909_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0910_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0911_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0912_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0913_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0914_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0915_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0916_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0917_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0918_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0919_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0920_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0921_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0922_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0923_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0924_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0925_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0926_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0927_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0928_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0929_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0930_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0931_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0932_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0933_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0934_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0935_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0936_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0937_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0938_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0939_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0940_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0941_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0942_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0943_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0944_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0945_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0946_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0947_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0948_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0949_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0950_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0951_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0952_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0953_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0954_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0955_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0956_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0957_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0958_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0959_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0960_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0961_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0962_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0963_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0964_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0965_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0966_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0967_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0968_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0969_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0970_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0971_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0972_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0973_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0974_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0975_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0976_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0977_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0978_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0979_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0980_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0981_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0982_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0983_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0984_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0985_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0986_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0987_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0988_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0989_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0990_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0991_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0992_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0993_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0994_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0995_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0996_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0997_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0998_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/0999_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1000_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1001_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1002_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1003_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1004_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1005_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1006_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1007_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1008_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1009_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1010_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1011_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1012_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1013_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1014_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1015_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1016_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1017_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1018_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1019_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1020_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1021_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1022_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1023_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1024_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1025_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1026_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1027_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1028_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1029_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1030_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1031_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1032_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1033_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1034_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1035_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1036_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1037_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1038_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1039_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1040_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1041_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1042_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1043_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1044_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1045_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1046_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1047_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1048_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1049_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1050_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1051_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1052_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1053_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1054_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1055_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1056_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1057_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1058_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1059_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1060_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1061_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1062_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1063_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1064_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1065_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1066_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1067_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1068_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1069_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1070_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1071_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1072_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1073_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1074_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1075_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1076_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1077_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1078_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1079_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1080_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1081_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1082_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1083_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1084_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1085_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1086_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1087_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1088_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1089_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1090_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1091_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1092_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1093_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1094_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1095_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1096_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1097_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1098_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1099_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1100_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1101_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1102_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1103_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1104_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1105_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1106_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1107_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1108_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1109_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1110_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1111_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1112_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1113_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1114_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1115_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1116_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1117_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1118_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1119_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1120_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1121_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1122_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1123_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1124_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1125_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1126_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1127_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1128_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1129_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1130_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1131_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1132_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1133_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1134_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1135_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1136_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1137_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1138_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1139_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1140_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1141_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1142_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1143_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1144_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1145_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1146_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1147_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1148_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1149_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1150_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1151_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1152_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1153_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1154_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1155_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1156_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1157_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1158_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1159_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1160_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1161_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1162_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1163_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1164_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1165_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1166_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1167_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1168_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1169_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1170_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1171_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1172_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1173_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1174_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1175_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1176_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1177_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1178_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1179_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1180_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1181_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1182_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1183_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1184_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1185_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1186_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1187_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1188_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1189_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1190_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1191_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1192_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1193_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1194_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1195_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1196_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1197_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1198_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1199_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1200_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/csr/1201_csr-certbot.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/README (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/README (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/privkey.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/README (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/privkey.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/README (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/cert.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/chain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/fullchain.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/privkey.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/options-ssl-nginx.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/renewal/dip-zero.geumdo.net.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/renewal/mail.geumdo.net.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/renewal/proxy.geumdo.net.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/letsencrypt/ssl-dhparams.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/nginx.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/3dp_nextcloud.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/ai_was.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/default (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/dmi.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/fastapi.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/flask_proxy.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/flaskapi.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/geumdo_java_upgrade.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/geumdo_java_upgrade_http.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/geumdo_ollama_docker.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/geumdo_ollamaui_docker.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/jupyter.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/posteio.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/sites-available/sw3d-dev.conf (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl-certs/nginx.crt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl-certs/nginx.key (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.key (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.p7b (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.private.key (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/gdlab.co.kr/key.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/DigiCertCAG1.crt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/TrustedRootG2.crt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/bundle.pem (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.crt (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.csr (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.key (100%) rename {docker => 1_infrastructure/docker}/docker_nginx_proxy/start_service.sh (100%) create mode 100644 1_infrastructure/docker/docker_open_webui/.gitignore create mode 100644 1_infrastructure/docker/docker_open_webui/Dockerfile create mode 100644 1_infrastructure/docker/docker_open_webui/README.md create mode 100644 1_infrastructure/docker/docker_open_webui/docker-compose.yaml rename {docker => 1_infrastructure/docker}/docker_posivibes/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_posivibes/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_posivibes/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_posivibes/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_posivibes/start_service.sh (100%) create mode 100644 1_infrastructure/docker/docker_prusa_exporter/.gitignore create mode 100644 1_infrastructure/docker/docker_prusa_exporter/Dockerfile create mode 100644 1_infrastructure/docker/docker_prusa_exporter/README.md create mode 100644 1_infrastructure/docker/docker_prusa_exporter/docker-compose.yaml rename {docker => 1_infrastructure/docker}/docker_registry/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_registry/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_securedb/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_securedb/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_securedb/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_securedb/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_securedb/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_ssl_setup_guide.md (100%) rename {docker => 1_infrastructure/docker}/docker_ubuntu_ssh/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_ubuntu_ssh/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_ubuntu_ssh/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_ubuntu_ssh/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/app/app.py (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/app/requirements.txt (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_vnexa_api/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_was/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_was/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_was/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_was/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/README.md (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/setting.sql (100%) rename {docker => 1_infrastructure/docker}/docker_was_upgrade_http/start_service.sh (100%) rename {docker => 1_infrastructure/docker}/examples/.gitkeep (100%) rename {docker => 1_infrastructure/docker}/examples/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/examples/README.md (100%) rename {docker => 1_infrastructure/docker}/examples/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/examples/rebuild_docker.sh (100%) rename {docker => 1_infrastructure/docker}/examples/start_service.sh (100%) create mode 100644 1_infrastructure/docker/geumdo-rag-chat-bot/.gitignore create mode 100644 1_infrastructure/docker/geumdo-rag-chat-bot/Dockerfile create mode 100644 1_infrastructure/docker/geumdo-rag-chat-bot/README.md create mode 100644 1_infrastructure/docker/geumdo-rag-chat-bot/docker-compose.yml rename {docker => 1_infrastructure/docker}/geumdo_docker_report_240611.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/.cursor/rules/clean-code.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/.cursor/rules/global-rules.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/.cursor/rules/user-guide.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/README.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/check_system.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/grafana/provisioning/dashboards/dashboards.yml (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/grafana/provisioning/datasources/influxdb.yml (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/requirement.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/requirements.txt (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/sensors.conf (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/__init__.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/api.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/config/__init__.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/config/config.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/cooling_monitor.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/implementation_plan.md (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/main.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/monitors/__init__.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/monitors/cooling_monitor.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/monitors/gpu_monitor.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/notifications/__init__.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/notifications/alert_manager.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/notifications/slack_notifier.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/utils/influxdb_client.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/utils/system_checker.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/web/app.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/web/run.py (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/web/static/css/style.css (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/web/static/js/dashboard.js (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/src/web/templates/index.html (100%) rename {docker => 1_infrastructure/docker}/gpu_cooling_monitor/start.sh (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/.cursorrules (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/.dockerignore (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/.gitignore (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/README.md (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/backup-cronjob.yaml (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/config.yaml (100%) rename {docker => 1_infrastructure/docker}/jupyter_geumdo_lab/jupyter-hub-nginx.conf (100%) rename {docker => 1_infrastructure/docker}/jupyter_gpu_docker/Dockerfile (100%) rename {docker => 1_infrastructure/docker}/jupyter_gpu_docker/README.md (100%) rename {docker => 1_infrastructure/docker}/jupyter_gpu_docker/docker-compose.yml (100%) rename {docker => 1_infrastructure/docker}/jupyter_gpu_docker/rebuild_with_fix.sh (100%) rename {docker => 1_infrastructure/docker}/jupyter_gpu_docker/requirements.txt (100%) create mode 100644 1_infrastructure/docker/potential_industry_partners.md create mode 100644 1_infrastructure/docker/small_scale_gpu_resources_plan.md rename {nginx => 1_infrastructure/nginx}/proxy_analysis.md (100%) rename {server_backup => 1_infrastructure/server_backup}/README.md (100%) rename {server_backup => 1_infrastructure/server_backup}/geumdo_mirror_backup.sh (100%) rename {server_backup => 1_infrastructure/server_backup}/iact_mirror_backup.sh (100%) rename {server_backup => 1_infrastructure/server_backup}/last_day_of_month.sh (100%) rename {server_backup => 1_infrastructure/server_backup}/server_backup_guide.md (100%) rename {server_backup => 1_infrastructure/server_backup}/source_backup.sh (100%) create mode 100644 2_services/1_metaverse/nodam/.gitattributes create mode 100644 2_services/1_metaverse/nodam/.gitignore create mode 100644 2_services/1_metaverse/nodam/.htaccess create mode 100644 2_services/1_metaverse/nodam/README.md create mode 100644 2_services/1_metaverse/nodam/application/.htaccess create mode 100644 2_services/1_metaverse/nodam/application/cache/.htaccess create mode 100644 2_services/1_metaverse/nodam/application/cache/index.html create mode 100644 2_services/1_metaverse/nodam/application/config/admin/dp_config.php create mode 100644 2_services/1_metaverse/nodam/application/config/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/config/autoload.php create mode 100644 2_services/1_metaverse/nodam/application/config/common/dp_config.php create mode 100644 2_services/1_metaverse/nodam/application/config/common/dp_language.php create mode 100644 2_services/1_metaverse/nodam/application/config/common/index.html create mode 100644 2_services/1_metaverse/nodam/application/config/config.php create mode 100644 2_services/1_metaverse/nodam/application/config/constants.php create mode 100644 2_services/1_metaverse/nodam/application/config/database.php create mode 100644 2_services/1_metaverse/nodam/application/config/doctypes.php create mode 100644 2_services/1_metaverse/nodam/application/config/foreign_chars.php create mode 100644 2_services/1_metaverse/nodam/application/config/hooks.php create mode 100644 2_services/1_metaverse/nodam/application/config/index.html create mode 100644 2_services/1_metaverse/nodam/application/config/memcached.php create mode 100644 2_services/1_metaverse/nodam/application/config/migration.php create mode 100644 2_services/1_metaverse/nodam/application/config/mimes.php create mode 100644 2_services/1_metaverse/nodam/application/config/profiler.php create mode 100644 2_services/1_metaverse/nodam/application/config/public/index.html create mode 100644 2_services/1_metaverse/nodam/application/config/routes.php create mode 100644 2_services/1_metaverse/nodam/application/config/smileys.php create mode 100644 2_services/1_metaverse/nodam/application/config/user_agents.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/Auth.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/Auth_original.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/Home.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/_Original.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Dashboard.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Database.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Files.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Fwords.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Groups.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/License.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Medias.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Pictures.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Prefs.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Questions.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Resources.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Survey_results.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Surveys.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/Users.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/_Original.php create mode 100644 2_services/1_metaverse/nodam/application/controllers/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/controllers/index.html create mode 100644 2_services/1_metaverse/nodam/application/core/MY_Controller.php create mode 100644 2_services/1_metaverse/nodam/application/core/index.html create mode 100644 2_services/1_metaverse/nodam/application/helpers/MY_url_helper.php create mode 100644 2_services/1_metaverse/nodam/application/helpers/index.html create mode 100644 2_services/1_metaverse/nodam/application/helpers/menu_helper.php create mode 100644 2_services/1_metaverse/nodam/application/hooks/index.html create mode 100644 2_services/1_metaverse/nodam/application/hooks/minify_html.php create mode 100644 2_services/1_metaverse/nodam/application/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/actions_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/database_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/footer_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/groups_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/main_header_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/main_sidebar_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/preferences_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/admin/users_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/auth_lang_Original.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/english/ion_auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/english/public/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/actions_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/database_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/footer_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/groups_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/main_header_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/main_sidebar_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/preferences_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/admin/users_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/french/ion_auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/french/public/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/actions_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/database_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/footer_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/groups_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/main_header_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/main_sidebar_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/preferences_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/admin/users_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/auth_lang_Original.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/index.html create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/ion_auth_lang.php create mode 100644 2_services/1_metaverse/nodam/application/language/portuguese/public/index.html create mode 100644 2_services/1_metaverse/nodam/application/libraries/Template.php create mode 100644 2_services/1_metaverse/nodam/application/libraries/admin/Breadcrumbs.php create mode 100644 2_services/1_metaverse/nodam/application/libraries/admin/Page_title.php create mode 100644 2_services/1_metaverse/nodam/application/libraries/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/libraries/common/Mobile_detect.php create mode 100644 2_services/1_metaverse/nodam/application/libraries/common/index.html create mode 100644 2_services/1_metaverse/nodam/application/libraries/index.html create mode 100644 2_services/1_metaverse/nodam/application/libraries/public/index.html create mode 100644 2_services/1_metaverse/nodam/application/third_party/index.html create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/config/index.html create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/config/ion_auth.php create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/index.html create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Bcrypt.php create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Ion_auth.php create mode 100644 2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/control_sidebar.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/footer.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/header.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/main_header.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/main_sidebar.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/_templates/template.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/dashboard/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/dashboard/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/database/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/database/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/files/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/files/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/files/upload.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/fwords/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/fwords/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/groups/create.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/groups/delete.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/groups/edit.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/groups/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/groups/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/license/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/license/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/medias/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/medias/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/pictures/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/pictures/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/prefs/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/prefs/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/admin.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/public.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/questions/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/questions/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/resources/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/resources/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/survey_results/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/survey_results/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/surveys/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/surveys/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/create.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/deactivate.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/delete.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/edit.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/admin/users/profile.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/change_password.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/create_group.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/create_user.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/deactivate_user.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/edit_group.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/edit_user.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/email/activate.tpl.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/email/forgot_password.tpl.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/email/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/email/new_password.tpl.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/forgot_password.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/login.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_Original/reset_password.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_templates/footer.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_templates/header.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_templates/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/auth/_templates/template.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/choice.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/auth/index.php create mode 100644 2_services/1_metaverse/nodam/application/views/auth/login.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/error_404.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/error_db.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/error_exception.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/error_general.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/error_php.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/cli/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/error_404.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/error_db.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/error_exception.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/error_general.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/error_php.php create mode 100644 2_services/1_metaverse/nodam/application/views/errors/html/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/errors/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/index.html create mode 100644 2_services/1_metaverse/nodam/application/views/public/home.php create mode 100644 2_services/1_metaverse/nodam/application/views/public/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/adminlte.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-black-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-black.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-blue-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-blue.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-green-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-green.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-purple-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-purple.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-red-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-red.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-yellow-light.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/css/skins/skin-yellow.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/js/adminlte.min.js create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/adminlte/js/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/animsition/animsition.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/animsition/animsition.min.js create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/css/bootstrap.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/glyphicons-halflings-regular.eot create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/glyphicons-halflings-regular.svg create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/glyphicons-halflings-regular.ttf create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/glyphicons-halflings-regular.woff create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/glyphicons-halflings-regular.woff2 create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/fonts/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/js/bootstrap.min.js create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/bootstrap/js/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/dp.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/domprojects/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/dp.min.js create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/font-awesome.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/FontAwesome.otf create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.eot create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.svg create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.ttf create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.woff create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.woff2 create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/font-awesome/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/ionicons.min.css create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.eot create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.svg create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.ttf create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.woff create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/ionicons/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/jquery/index.html create mode 100644 2_services/1_metaverse/nodam/assets/frameworks/jquery/jquery.min.js create mode 100644 2_services/1_metaverse/nodam/assets/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/animsition/animsition.min.css create mode 100644 2_services/1_metaverse/nodam/assets/plugins/animsition/animsition.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/animsition/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/colorpickersliders/colorpickersliders.min.css create mode 100644 2_services/1_metaverse/nodam/assets/plugins/colorpickersliders/colorpickersliders.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/colorpickersliders/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/fastclick/fastclick.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/fastclick/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/html5shiv/html5shiv-printshiv.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/html5shiv/html5shiv.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/html5shiv/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/css/blue.css create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/css/blue.png create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/css/blue@2x.png create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/css/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/js/icheck.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/icheck/js/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/limarquee/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/limarquee/limarquee.css create mode 100644 2_services/1_metaverse/nodam/assets/plugins/limarquee/limarquee.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/multiselect/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/multiselect/multiselect.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/pwstrength/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/pwstrength/pwstrength.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/respond/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/respond/respond.matchmedia.addListener.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/respond/respond.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/slimscroll/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/slimscroll/slimscroll.min.js create mode 100644 2_services/1_metaverse/nodam/assets/plugins/tinycolor/index.html create mode 100644 2_services/1_metaverse/nodam/assets/plugins/tinycolor/tinycolor.min.js create mode 100644 2_services/1_metaverse/nodam/index.php create mode 100644 2_services/1_metaverse/nodam/install.php create mode 100644 2_services/1_metaverse/nodam/install/index.html create mode 100644 2_services/1_metaverse/nodam/install/sql/ci_adminlte.sql create mode 100644 2_services/1_metaverse/nodam/install/sql/ci_adminlte_update.sql create mode 100644 2_services/1_metaverse/nodam/install/sql/index.html create mode 100644 2_services/1_metaverse/nodam/robots.txt create mode 100644 2_services/1_metaverse/nodam/system/.htaccess create mode 100644 2_services/1_metaverse/nodam/system/core/Benchmark.php create mode 100644 2_services/1_metaverse/nodam/system/core/CodeIgniter.php create mode 100644 2_services/1_metaverse/nodam/system/core/Common.php create mode 100644 2_services/1_metaverse/nodam/system/core/Config.php create mode 100644 2_services/1_metaverse/nodam/system/core/Controller.php create mode 100644 2_services/1_metaverse/nodam/system/core/Exceptions.php create mode 100644 2_services/1_metaverse/nodam/system/core/Hooks.php create mode 100644 2_services/1_metaverse/nodam/system/core/Input.php create mode 100644 2_services/1_metaverse/nodam/system/core/Lang.php create mode 100644 2_services/1_metaverse/nodam/system/core/Loader.php create mode 100644 2_services/1_metaverse/nodam/system/core/Log.php create mode 100644 2_services/1_metaverse/nodam/system/core/Model.php create mode 100644 2_services/1_metaverse/nodam/system/core/Output.php create mode 100644 2_services/1_metaverse/nodam/system/core/Router.php create mode 100644 2_services/1_metaverse/nodam/system/core/Security.php create mode 100644 2_services/1_metaverse/nodam/system/core/URI.php create mode 100644 2_services/1_metaverse/nodam/system/core/Utf8.php create mode 100644 2_services/1_metaverse/nodam/system/core/compat/hash.php create mode 100644 2_services/1_metaverse/nodam/system/core/compat/index.html create mode 100644 2_services/1_metaverse/nodam/system/core/compat/mbstring.php create mode 100644 2_services/1_metaverse/nodam/system/core/compat/password.php create mode 100644 2_services/1_metaverse/nodam/system/core/compat/standard.php create mode 100644 2_services/1_metaverse/nodam/system/core/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/DB.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_cache.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_query_builder.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/DB_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/cubrid/cubrid_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/cubrid/cubrid_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/cubrid/cubrid_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/cubrid/cubrid_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/cubrid/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/ibase/ibase_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/ibase/ibase_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/ibase/ibase_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/ibase/ibase_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/ibase/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mssql/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mssql/mssql_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mssql/mssql_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mssql/mssql_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mssql/mssql_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysql/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysql/mysql_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysql/mysql_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysql/mysql_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysql/mysql_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysqli/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysqli/mysqli_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysqli/mysqli_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysqli/mysqli_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/mysqli/mysqli_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/oci8/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/oci8/oci8_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/oci8/oci8_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/oci8/oci8_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/oci8/oci8_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/odbc/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/odbc/odbc_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/odbc/odbc_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/odbc/odbc_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/odbc/odbc_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/pdo_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/pdo_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/pdo_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/pdo_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_4d_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_4d_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_cubrid_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_cubrid_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_dblib_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_dblib_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_firebird_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_firebird_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_ibm_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_ibm_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_informix_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_informix_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_mysql_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_mysql_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_oci_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_oci_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_odbc_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_odbc_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_pgsql_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_pgsql_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_sqlite_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_sqlite_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/pdo/subdrivers/pdo_sqlsrv_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/postgre/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/postgre/postgre_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/postgre/postgre_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/postgre/postgre_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/postgre/postgre_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite/sqlite_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite/sqlite_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite/sqlite_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite/sqlite_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite3/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite3/sqlite3_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite3/sqlite3_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite3/sqlite3_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlite3/sqlite3_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlsrv/index.html create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlsrv/sqlsrv_driver.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlsrv/sqlsrv_forge.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlsrv/sqlsrv_result.php create mode 100644 2_services/1_metaverse/nodam/system/database/drivers/sqlsrv/sqlsrv_utility.php create mode 100644 2_services/1_metaverse/nodam/system/database/index.html create mode 100644 2_services/1_metaverse/nodam/system/fonts/index.html create mode 100644 2_services/1_metaverse/nodam/system/fonts/texb.ttf create mode 100644 2_services/1_metaverse/nodam/system/helpers/array_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/captcha_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/cookie_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/date_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/directory_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/download_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/email_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/file_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/form_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/html_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/index.html create mode 100644 2_services/1_metaverse/nodam/system/helpers/inflector_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/language_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/number_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/path_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/security_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/smiley_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/string_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/text_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/typography_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/url_helper.php create mode 100644 2_services/1_metaverse/nodam/system/helpers/xml_helper.php create mode 100644 2_services/1_metaverse/nodam/system/index.html create mode 100644 2_services/1_metaverse/nodam/system/language/english/calendar_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/date_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/db_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/email_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/form_validation_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/ftp_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/imglib_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/index.html create mode 100644 2_services/1_metaverse/nodam/system/language/english/migration_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/number_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/pagination_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/profiler_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/unit_test_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/english/upload_lang.php create mode 100644 2_services/1_metaverse/nodam/system/language/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/Cache.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_apc.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_dummy.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_file.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_memcached.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_redis.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/Cache_wincache.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/drivers/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cache/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Calendar.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Cart.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Email.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Encrypt.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Encryption.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Form_validation.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Ftp.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Image_lib.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Javascript.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Javascript/Jquery.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Javascript/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Migration.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Pagination.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Parser.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Profiler.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/Session.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/SessionHandlerInterface.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/Session_driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/drivers/Session_database_driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/drivers/Session_files_driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/drivers/Session_memcached_driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/drivers/Session_redis_driver.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/drivers/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Session/index.html create mode 100644 2_services/1_metaverse/nodam/system/libraries/Table.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Trackback.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Typography.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Unit_test.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Upload.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/User_agent.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Xmlrpc.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Xmlrpcs.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/Zip.php create mode 100644 2_services/1_metaverse/nodam/system/libraries/index.html create mode 100644 2_services/1_metaverse/nodam/upload/avatar/README.txt create mode 100644 2_services/1_metaverse/nodam/upload/avatar/f_001.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/f_002.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/f_003.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/f_004.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/f_005.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/index.html create mode 100644 2_services/1_metaverse/nodam/upload/avatar/m_001.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/m_002.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/m_003.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/m_004.png create mode 100644 2_services/1_metaverse/nodam/upload/avatar/m_005.png create mode 100644 2_services/1_metaverse/nodam/upload/index.html create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font.css create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Black.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Bold.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-ExtraBold.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-ExtraLight.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Light.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Medium.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Regular.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-SemiBold.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/font/Pretendard-Thin.woff create mode 100644 2_services/1_metaverse/nodamLand/resource/css/policy.css create mode 100644 2_services/1_metaverse/nodamLand/resource/images/t_logo.png create mode 100644 2_services/1_metaverse/nodamLand/resource/page/index.html create mode 100644 2_services/1_metaverse/nodamLand/resource/page/info_policy.html create mode 100644 2_services/1_metaverse/nodamLand/resource/page/user_policy.html create mode 100644 2_services/README.md rename {ai_lecture => 2_services/ai_lecture}/.github/workflows/ci.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/.gitlab-ci.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/AI_CONTENT_UPDATE_POLICY.md (100%) rename {ai_lecture => 2_services/ai_lecture}/AI_Expert_Course_Schedule.md (100%) rename {ai_lecture => 2_services/ai_lecture}/CONTRIBUTING.md (100%) rename {ai_lecture => 2_services/ai_lecture}/Cloud_AI_Services_Guide.md (100%) rename {ai_lecture => 2_services/ai_lecture}/Dockerfile.dev (100%) rename {ai_lecture => 2_services/ai_lecture}/Dockerfile.gpu (100%) rename {ai_lecture => 2_services/ai_lecture}/FAQ.md (100%) rename {ai_lecture => 2_services/ai_lecture}/INDUSTRY_CASE_STUDIES.md (100%) rename {ai_lecture => 2_services/ai_lecture}/Makefile (100%) rename {ai_lecture => 2_services/ai_lecture}/ONLINE_COMMUNITY_GUIDE.md (100%) rename {ai_lecture => 2_services/ai_lecture}/PAIR_PROGRAMMING_GUIDE.md (100%) rename {ai_lecture => 2_services/ai_lecture}/PROGRESS_TRACKING_SYSTEM.md (100%) rename {ai_lecture => 2_services/ai_lecture}/README.md (99%) rename {ai_lecture => 2_services/ai_lecture}/SETUP.md (100%) rename {ai_lecture => 2_services/ai_lecture}/TROUBLESHOOTING.md (100%) rename {ai_lecture => 2_services/ai_lecture}/Tooling_Frameworks_Comparison.md (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/course_banner.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/alexnet.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/alphago_lee_sedol.jpg (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/backpropagation.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/deep_blue_kasparov.jpg (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/deep_learning_revolution.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/expert_system.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/gartner_hype_cycle.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/generative_ai_examples.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/mcculloch_pitts_neuron.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/perceptron.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/transformer_architecture.png (100%) rename {ai_lecture => 2_services/ai_lecture}/assets/history_of_ai/turing_test.png (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/00_introduction/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/00_introduction/part_0.1_history_of_ai.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/00_introduction/part_0_introduction.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/01_ai_development_environment/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/01_ai_development_environment/cursor_advanced_guide.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/01_ai_development_environment/part_1_ai_development_environment.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/02_python_core_syntax/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/02_python_core_syntax/part_2_python_core_syntax.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/02_python_core_syntax/quick_review.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/03_python_collections/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/03_python_collections/part_3_python_collections.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/03_python_collections/quick_review.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/04_object_oriented_programming/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/04_object_oriented_programming/part_4_object_oriented_programming.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/04_object_oriented_programming/quick_review.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/05.5_linear_algebra_with_numpy/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/05.5_linear_algebra_with_numpy/part_5.5_linear_algebra_with_numpy.md (100%) create mode 100644 2_services/ai_lecture/courses/05.6_calculus_for_ml/README.md create mode 100644 2_services/ai_lecture/courses/05.6_calculus_for_ml/part_5.6_calculus_for_ml.md rename {ai_lecture => 2_services/ai_lecture}/courses/05_ai_core_libraries/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/05_ai_core_libraries/part_5_ai_core_libraries.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/06_machine_learning/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/06_machine_learning/part_6_machine_learning.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/live_coding_transformer_block.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7.1_recurrent_neural_networks.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7.2_transformer_and_llm_principles.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7.3_llm_application_development_with_langchain.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7.4_graph_neural_networks.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7.5_reinforcement_learning.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/07_deep_learning/part_7_deep_learning.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/08_model_serving_with_fastapi/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/08_model_serving_with_fastapi/part_8_model_serving_with_fastapi.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/09_production_ready_api/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/09_production_ready_api/part_9_production_ready_api.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/10_expert_path/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/10_expert_path/part_10_expert_path.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/10_expert_path/recommended_resources.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/11_mlops/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/11_mlops/part_11_mlops.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/12_model_optimization/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/12_model_optimization/part_12_model_optimization.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/13_generative_ai/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/13_generative_ai/part_13.1_advanced_rag_techniques.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/13_generative_ai/part_13.2_advanced_ai_agents.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/13_generative_ai/part_13_generative_ai.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/14_ai_ethics/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/14_ai_ethics/part_14_ai_ethics.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/15_capstone_project/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/15_capstone_project/capstone_template.md (100%) rename {ai_lecture => 2_services/ai_lecture}/courses/15_capstone_project/part_15_capstone_project.md (100%) rename {ai_lecture => 2_services/ai_lecture}/docker-compose.dev.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/docker-compose.gpu.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/env.example (100%) rename {ai_lecture => 2_services/ai_lecture}/glossary.md (100%) rename {ai_lecture => 2_services/ai_lecture}/nginx/dev.conf (100%) rename {ai_lecture => 2_services/ai_lecture}/poetry.lock (100%) rename {ai_lecture => 2_services/ai_lecture}/pyproject.toml (100%) create mode 100644 2_services/ai_lecture/resources/README.md create mode 100644 2_services/ai_lecture/resources/capstone_guide/capstone_milestone_guide.md create mode 100644 2_services/ai_lecture/resources/capstone_guide/evaluation_rubric.md create mode 100644 2_services/ai_lecture/resources/capstone_guide/mentor_feedback_system_guide.md create mode 100644 2_services/ai_lecture/resources/capstone_guide/presentation_guide.md create mode 100644 2_services/ai_lecture/resources/case_studies/1_ecommerce_segmentation.md create mode 100644 2_services/ai_lecture/resources/case_studies/2_finance_fraud_detection.md create mode 100644 2_services/ai_lecture/resources/case_studies/3_nlp_sentiment_analysis.md create mode 100644 2_services/ai_lecture/resources/case_studies/industry_datasets.md create mode 100644 2_services/ai_lecture/resources/infographics/ai_ml_dl_relationship.md create mode 100644 2_services/ai_lecture/resources/infographics/python_data_structures.md create mode 100644 2_services/ai_lecture/resources/learning_paths.md create mode 100644 2_services/ai_lecture/resources/mlops_examples/.github/workflows/ci-pipeline.yml create mode 100644 2_services/ai_lecture/resources/mlops_examples/model_serving_fastapi_example/Dockerfile create mode 100644 2_services/ai_lecture/resources/mlops_examples/model_serving_fastapi_example/README.md create mode 100644 2_services/ai_lecture/resources/mlops_examples/model_serving_fastapi_example/docker-compose.yml create mode 100644 2_services/ai_lecture/resources/mlops_examples/model_serving_fastapi_example/main.py create mode 100644 2_services/ai_lecture/resources/mlops_examples/model_serving_fastapi_example/requirements.txt create mode 100644 2_services/ai_lecture/resources/mlops_examples/monitoring_retraining/README.md create mode 100644 2_services/ai_lecture/resources/mlops_examples/monitoring_retraining/monitor.py create mode 100644 2_services/ai_lecture/resources/mlops_examples/monitoring_retraining/retrain.py create mode 100644 2_services/ai_lecture/resources/practice_exercises/python_basics_practice.md rename {ai_lecture => 2_services/ai_lecture}/scripts/format_code.sh (100%) rename {ai_lecture => 2_services/ai_lecture}/scripts/progress_checker.py (100%) rename {ai_lecture => 2_services/ai_lecture}/scripts/run_tests.sh (100%) rename {ai_lecture => 2_services/ai_lecture}/scripts/setup.sh (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/02_python_core_syntax/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/02_python_core_syntax/part_2_python_core_syntax.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/02_python_core_syntax/part_2_python_core_syntax.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/02_python_core_syntax/tests/test_part_2.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/03_python_collections/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/03_python_collections/part_3_python_collections.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/03_python_collections/part_3_python_collections.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/03_python_collections/tests/test_part_3.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/04_object_oriented_programming/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/04_object_oriented_programming/part_4_object_oriented_programming.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/04_object_oriented_programming/part_4_object_oriented_programming.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/04_object_oriented_programming/tests/test_part_4.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/05.5_linear_algebra_with_numpy/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/05.5_linear_algebra_with_numpy/part_5.5_linear_algebra_with_numpy.py (100%) create mode 100644 2_services/ai_lecture/source_code/05.6_calculus_for_ml/linear_regression_gradient_descent.py rename {ai_lecture => 2_services/ai_lecture}/source_code/05_ai_core_libraries/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/05_ai_core_libraries/part_5_ai_core_libraries.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/05_ai_core_libraries/part_5_ai_core_libraries.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/05_ai_core_libraries/tests/test_part_5.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/06_machine_learning/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/06_machine_learning/part_6_machine_learning.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/06_machine_learning/part_6_machine_learning.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/06_machine_learning/tests/test_part_6.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/7.3_llm_application_development_with_langchain/.placeholder (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/7.3_llm_application_development_with_langchain/part_7.3_llm_application_development.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/live_coding_transformer_from_scratch.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.1_recurrent_neural_networks.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.1_recurrent_neural_networks.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.2_transformer_and_llm_principles.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.2_transformer_and_llm_principles.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.4_graph_neural_networks.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.4_graph_neural_networks.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.5_reinforcement_learning.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7.5_reinforcement_learning.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7_deep_learning.ipynb (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/part_7_deep_learning.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/07_deep_learning/tests/test_part_7.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/.placeholder (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/api.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/main.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/schemas.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/08_model_serving_with_fastapi/tests/test_api.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/Dockerfile (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/app/__init__.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/app/api.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/app/main.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/app/schemas.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/app/tests/test_part_9.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/09_production_ready_api/docker-compose.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/10_expert_path/part_10_expert_path.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/10_expert_path/tests/test_part_10.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/ab_test_cd_workflow.yml (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/conditional_pipeline.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/data_drift_detection.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/feature_store_pipeline.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/11_mlops/tests/test_mlops.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/12_model_optimization/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/12_model_optimization/bert_quantization.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/12_model_optimization/tests/test_part_12.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/12_model_optimization/triton_migration_benchmark.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/advanced_rag_chatbot.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/autonomous_agent.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/contextual_compression_rag.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/langsmith_tracing_debugging.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/multi_agent_collaboration.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/13_generative_ai/tests/test_part_13.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/14_ai_ethics/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/14_ai_ethics/bias_detection_mitigation.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/14_ai_ethics/xai_report_generator.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/15_capstone_project/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/15_capstone_project/part_15_capstone_project.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/15_capstone_project/tests/test_part_15.py (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/README.md (100%) rename {ai_lecture => 2_services/ai_lecture}/source_code/integration_tests.py (100%) create mode 100644 2_services/code_evaluation_prototype/Dockerfile create mode 100644 2_services/code_evaluation_prototype/README.md create mode 100644 2_services/code_evaluation_prototype/main.py create mode 100644 2_services/code_evaluation_prototype/requirements.txt create mode 100644 2_services/code_evaluation_prototype/static/index.html create mode 100644 2_services/code_evaluation_prototype/test_api.py create mode 100644 2_services/code_evaluation_prototype/test_samples/square.py create mode 100644 2_services/course_quizzes/part_0_5/quiz_data_analysis.md create mode 100644 2_services/course_quizzes/part_0_5/quiz_data_visualization.md create mode 100644 2_services/course_quizzes/part_0_5/quiz_machine_learning_basics.md create mode 100644 2_services/course_quizzes/part_0_5/quiz_python_basics.md create mode 100644 2_services/course_quizzes/part_6_9/minitest_core_ai_models.md create mode 100644 2_services/course_quizzes/part_6_9/minitest_deep_learning.md create mode 100644 2_services/course_quizzes/quiz_structure.md create mode 100644 2_services/virtual_scenarios/finance_scenario.md create mode 100644 2_services/virtual_scenarios/healthcare_scenario.md create mode 100644 2_services/virtual_scenarios/retail_scenario.md create mode 100644 3_development/README.md rename fix_notebook.py => 3_development/fix_notebook.py (100%) create mode 100644 3_development/rubrics/capstone_project_rubric.md create mode 100644 3_development/rubrics/coding_assignment_rubric.md create mode 100644 3_development/rubrics/data_analysis_project_rubric.md create mode 100644 3_development/rubrics/ml_project_rubric.md create mode 100644 3_development/rubrics/rubric_guidelines.md create mode 100644 4_documentation/DOCUMENT_INDEX.md create mode 100644 4_documentation/PROJECT_IMPROVEMENT_SUMMARY.md create mode 100644 4_documentation/README.md create mode 100644 4_documentation/analysis_report.md create mode 100644 4_documentation/code_evaluation_system_design.md create mode 100644 4_documentation/community_guidelines.md create mode 100644 4_documentation/hackathon_plan.md create mode 100644 4_documentation/peer_learning_design.md create mode 100644 4_documentation/podcast_content_plan.md delete mode 160000 docker/docker_3dp/printer delete mode 160000 docker/docker_fastapi delete mode 160000 docker/docker_fastapi_new delete mode 100644 docker/docker_jenkins/jenkins_config.xml delete mode 100644 docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.zip delete mode 160000 docker/docker_open_webui delete mode 160000 docker/docker_prusa_exporter delete mode 160000 docker/geumdo-rag-chat-bot diff --git a/1_infrastructure/README.md b/1_infrastructure/README.md new file mode 100644 index 0000000..ab6fb3d --- /dev/null +++ b/1_infrastructure/README.md @@ -0,0 +1,11 @@ +# 1. 인프라 (Infrastructure) + +이 디렉터리는 서버, 네트워크, 배포 등 금도의 인프라와 관련된 모든 설정과 문서를 포함합니다. + +## 📁 하위 디렉터리 + +- **[docker/](./docker/)**: Docker 관련 설정, Docker Compose 파일 및 관련 스크립트를 포함합니다. +- **[nginx/](./nginx/)**: Nginx 웹 서버의 설정 파일 및 관련 문서를 포함합니다. +- **[server_backup/](./server_backup/)**: 서버 데이터 백업을 위한 스크립트 및 가이드를 포함합니다. + +각 디렉터리로 이동하여 필요한 설정과 문서를 찾아보세요. \ No newline at end of file diff --git a/docker/.gitignore b/1_infrastructure/docker/.gitignore similarity index 100% rename from docker/.gitignore rename to 1_infrastructure/docker/.gitignore diff --git a/docker/README.md b/1_infrastructure/docker/README.md similarity index 100% rename from docker/README.md rename to 1_infrastructure/docker/README.md diff --git a/1_infrastructure/docker/ai_career_portfolio_guidelines.md b/1_infrastructure/docker/ai_career_portfolio_guidelines.md new file mode 100644 index 0000000..11aa502 --- /dev/null +++ b/1_infrastructure/docker/ai_career_portfolio_guidelines.md @@ -0,0 +1,219 @@ +# AI 분야 취업 포트폴리오 가이드라인 + +## 개요 +이 가이드라인은 AI 전문가 양성 과정 학생들이 산업 현장에서 경쟁력 있는 취업 포트폴리오를 구성하는데 도움을 주기 위해 작성되었습니다. 실제 기업 채용 담당자들의 피드백을 바탕으로, AI 엔지니어, 데이터 사이언티스트, ML 연구원 등 다양한 직무에 맞는 포트폴리오 구성 방법을 안내합니다. + +## 목차 +1. [포트폴리오의 중요성과 목적](#1-포트폴리오의-중요성과-목적) +2. [직무별 포트폴리오 차별화 전략](#2-직무별-포트폴리오-차별화-전략) +3. [포트폴리오 구성 요소](#3-포트폴리오-구성-요소) +4. [프로젝트 기획 및 선정](#4-프로젝트-기획-및-선정) +5. [기술적 깊이 입증하기](#5-기술적-깊이-입증하기) +6. [실무 역량 강조하기](#6-실무-역량-강조하기) +7. [효과적인 포트폴리오 발표 방법](#7-효과적인-포트폴리오-발표-방법) +8. [포트폴리오 체크리스트](#8-포트폴리오-체크리스트) + +## 1. 포트폴리오의 중요성과 목적 + +### 왜 포트폴리오가 중요한가? +AI 분야는 단순한 이론적 지식보다 **실질적인 문제 해결 능력**과 **코드 구현 역량**이 중요합니다. 포트폴리오는 이러한 능력을 채용 담당자에게 직접적으로 보여줄 수 있는 강력한 증거입니다. + +### 포트폴리오의 주요 목적 +1. **기술적 역량 증명**: 실제 코드와 결과물을 통한 기술력 입증 +2. **문제 해결 과정 공유**: 도전 과제를 어떻게 해결했는지 보여주는 사고 과정 전시 +3. **지속적 학습 의지 표현**: 최신 기술 트렌드를 따라가는 학습 의지 증명 +4. **실무 적응력 제시**: 실제 업무 환경과 유사한 프로젝트 경험 공유 + +### 채용 담당자가 포트폴리오에서 보고 싶은 것 +- **실용적 접근법**: 학문적 접근보다 실질적인 비즈니스 문제 해결 능력 +- **코드 품질**: 깔끔하고 유지보수 가능한 코드 작성 능력 +- **의사소통 능력**: 복잡한 기술적 개념을 명확하게 설명하는 능력 +- **프로젝트 완성도**: 시작부터 끝까지 프로젝트를 완료하는 끈기와 실행력 + +## 2. 직무별 포트폴리오 차별화 전략 + +### AI/ML 엔지니어 +- **강조점**: 모델 구현, 파이프라인 구축, 시스템 통합, 성능 최적화 +- **추천 프로젝트**: + - 엔드투엔드 ML 파이프라인 구축 + - 모델 서빙 API 개발 + - 분산 학습 시스템 구현 + - MLOps 도구 활용 사례 +- **필수 기술**: Docker, Kubernetes, CI/CD, 클라우드 서비스, REST API + +### 데이터 사이언티스트 +- **강조점**: 데이터 분석, 통계적 모델링, 비즈니스 인사이트 도출 +- **추천 프로젝트**: + - 탐색적 데이터 분석(EDA) 및 시각화 + - A/B 테스트 설계 및 분석 + - 예측 모델링 및 비즈니스 영향 평가 + - 데이터 기반 의사결정 사례 +- **필수 기술**: 통계 분석, 데이터 시각화, 가설 검정, SQL, Pandas/NumPy + +### 머신러닝 연구원 +- **강조점**: 알고리즘 이해, 논문 구현, 새로운 방법론 개발 +- **추천 프로젝트**: + - 최신 논문 구현 및 개선 + - 알고리즘 벤치마킹 및 성능 비교 + - 새로운 모델 아키텍처 제안 + - 실험 설계 및 결과 분석 +- **필수 기술**: 수학적 모델링, 딥러닝 프레임워크, 논문 리서치, 실험 설계 + +### 컴퓨터 비전 전문가 +- **강조점**: 이미지/비디오 처리, 객체 인식, 이미지 생성 +- **추천 프로젝트**: + - 객체 검출 및 세그먼테이션 + - 이미지 분류 및 검색 시스템 + - 얼굴 인식 또는 감정 분석 + - 생성형 모델(GAN, Diffusion) 응용 +- **필수 기술**: OpenCV, 이미지 전처리, CNN 아키텍처, 컴퓨터 비전 라이브러리 + +### 자연어처리(NLP) 전문가 +- **강조점**: 텍스트 처리, 언어 모델링, 정보 추출 +- **추천 프로젝트**: + - 감성 분석 또는 텍스트 분류 + - 챗봇 또는 대화 시스템 + - 정보 추출 및 요약 + - 대규모 언어 모델(LLM) 미세 조정 +- **필수 기술**: 텍스트 전처리, 임베딩 기법, Transformer 아키텍처, 토크나이저 + +## 3. 포트폴리오 구성 요소 + +### 필수 포함 요소 +1. **개인 소개**: 자신의 전문 분야, 관심사, 커리어 목표 (1-2 문단) +2. **기술 스택**: 프로그래밍 언어, 프레임워크, 도구 등 (시각적 요소 활용) +3. **주요 프로젝트** (3-5개): + - 프로젝트명과 한 줄 요약 + - 해결하고자 한 문제 + - 사용한 기술과 방법론 + - 결과 및 성과 + - 배운 점과 개선 사항 + - GitHub 링크 +4. **교육 및 자격증**: 관련 학위, 코스, 자격증 (간결하게) +5. **연락처 및 소셜 링크**: GitHub, LinkedIn, 개인 블로그/웹사이트 + +### 포트폴리오 형식 옵션 +1. **개인 웹사이트**: 가장 전문적이고 커스터마이징 자유도 높음 +2. **GitHub 프로필**: 코드 중심 포트폴리오, README.md 활용 +3. **노션(Notion)**: 문서와 멀티미디어 통합 용이, 공유 간편 +4. **PDF 문서**: 전통적 형식, 이메일 첨부 및 출력 용이 +5. **인터랙티브 노트북**: Jupyter Notebook 또는 Colab, 코드와 결과 시각화 + +## 4. 프로젝트 기획 및 선정 + +### 좋은 프로젝트의 기준 +- **실제 문제 해결**: 실생활 또는 비즈니스 문제 해결에 중점 +- **기술적 깊이**: 단순 튜토리얼 이상의 깊이 있는 구현 +- **완성도**: 시작부터 끝까지 완료된 프로젝트 +- **독창성**: 남들과 차별화되는 아이디어나 접근법 +- **확장성**: 추가 기능이나 개선 가능성 제시 + +### 추천 프로젝트 유형 +1. **산업 문제 해결형**: 특정 산업의 실제 문제 해결 (예: 의료 영상 진단, 금융 사기 탐지) +2. **서비스 개발형**: 실제 사용 가능한 서비스 구현 (예: 추천 시스템, 챗봇) +3. **데이터 분석형**: 흥미로운 데이터셋에 대한 심층 분석 (예: 소비자 행동 분석, 트렌드 예측) +4. **알고리즘 개선형**: 기존 알고리즘 개선 또는 새로운 접근법 제안 +5. **복제 및 확장형**: 유명 논문/서비스 복제 후 자체 아이디어로 확장 + +### 피해야 할 프로젝트 +- 너무 단순한 분류 문제 (예: MNIST, Iris 데이터셋만 사용) +- 튜토리얼을 그대로 따라한 프로젝트 +- 데이터 수집 및 전처리 과정이 없는 프로젝트 +- 목표와 평가 지표가 불분명한 프로젝트 +- 비즈니스/실용적 가치를 설명하지 못하는 프로젝트 + +## 5. 기술적 깊이 입증하기 + +### 코드 품질 향상 방법 +- **클린 코드 원칙**: 읽기 쉽고 유지보수 가능한 코드 작성 +- **모듈화**: 재사용 가능한 컴포넌트로 구조화 +- **문서화**: 함수, 클래스, 모듈에 대한 명확한 주석 및 문서 +- **테스트**: 단위 테스트, 통합 테스트 구현 +- **버전 관리**: 의미 있는 커밋 메시지와 브랜치 전략 + +### 기술적 의사결정 설명하기 +- 선택한 알고리즘/모델의 이유 +- 대안 기술과의 비교 및 트레이드오프 +- 성능 최적화를 위한 접근법 +- 직면한 기술적 도전과 해결 방법 +- 확장성 및 유지보수성 고려사항 + +### 실험 및 검증 방법 +- 명확한 평가 지표 설정 +- 교차 검증 및 통계적 유의성 테스트 +- 베이스라인 모델과의 비교 +- 하이퍼파라미터 최적화 과정 +- 모델 해석 및 설명 가능성 + +## 6. 실무 역량 강조하기 + +### 프로젝트 관리 능력 보여주기 +- GitHub Issues, Project 보드 활용 +- 명확한 프로젝트 목표 및 마일스톤 설정 +- 일정 관리 및 작업 우선순위 설정 +- 문제 해결 과정의 체계적 기록 + +### 협업 및 의사소통 능력 +- 오픈소스 프로젝트 기여 내역 +- 팀 프로젝트에서의 역할과 기여도 +- 코드 리뷰 경험 및 피드백 수용 사례 +- 기술적 내용의 명확한 문서화 및 설명 + +### 산업 표준 및 도구 활용 +- 개발환경: Docker, Git, IDE 설정 +- CI/CD: GitHub Actions, Jenkins +- 모니터링: TensorBoard, MLflow, Weights & Biases +- 배포: 클라우드 서비스(AWS, GCP, Azure) +- 협업 도구: Jira, Confluence, Slack + +## 7. 효과적인 포트폴리오 발표 방법 + +### 발표 자료 준비 +- 명확한 문제 정의로 시작 +- 핵심 기술적 도전과 해결책 강조 +- 결과를 시각적으로 효과적으로 표현 +- 실제 데모 또는 시연 영상 준비 +- 간결하고 전문적인 슬라이드 디자인 + +### 기술 인터뷰 대비 +- 프로젝트 관련 심층 질문 예상 및 준비 +- 기술적 결정의 이유와 대안 설명 가능 +- 사용한 알고리즘/모델의 원리 설명 준비 +- 발생 가능한 엣지 케이스와 한계점 인지 +- 확장 및 개선 방향에 대한 아이디어 준비 + +### 비전공자를 위한 설명 전략 +- 전문 용어를 줄이고 일상 언어로 설명 +- 비유와 시각적 요소 활용 +- 비즈니스 가치와 실용적 측면 강조 +- 중요 개념은 간결하게 정의 제공 +- 스토리텔링 방식으로 흥미 유발 + +## 8. 포트폴리오 체크리스트 + +### 내용적 측면 +- [ ] 3-5개의 다양한 깊이/복잡도를 가진 프로젝트 포함 +- [ ] 각 프로젝트가 특정 기술/역량을 보여줌 +- [ ] 문제 정의, 접근법, 결과, 배운 점이 명확히 설명됨 +- [ ] 코드와 프로젝트가 적절히 문서화됨 +- [ ] 실제 사용자/비즈니스 가치를 설명함 + +### 기술적 측면 +- [ ] GitHub 저장소가 잘 정리되어 있음 (README, .gitignore 등) +- [ ] 코드 스타일과 구조가 일관적이고 깔끔함 +- [ ] 적절한 테스트와 검증 과정이 포함됨 +- [ ] 데이터 처리 및 모델링 파이프라인이 명확함 +- [ ] 결과의 시각화와 해석이 포함됨 + +### 형식적 측면 +- [ ] 오타나 문법 오류가 없음 +- [ ] 일관된 시각적 스타일과 구조 +- [ ] 간결하고 전문적인 어조 +- [ ] 쉽게 탐색 가능한 구조 +- [ ] 모든 링크와 참조가 작동함 + +## 결론 + +효과적인 AI 분야 취업 포트폴리오는 단순한 프로젝트 나열이 아니라, 지원자의 기술적 역량과 문제 해결 능력, 그리고 실무 적응력을 종합적으로 보여주는 도구입니다. 이 가이드라인을 참고하여 자신만의 강점을 효과적으로 드러내는 포트폴리오를 구성하시기 바랍니다. + +무엇보다 포트폴리오는 자신의 열정과 지속적인 학습 의지를 보여주는 살아있는 문서입니다. 정기적으로 업데이트하고 발전시켜 나가는 것이 중요합니다. \ No newline at end of file diff --git a/1_infrastructure/docker/ai_industry_case_studies.md b/1_infrastructure/docker/ai_industry_case_studies.md new file mode 100644 index 0000000..a6a4902 --- /dev/null +++ b/1_infrastructure/docker/ai_industry_case_studies.md @@ -0,0 +1,255 @@ +# 산업별 AI 적용 사례 연구 + +## 개요 +이 문서는 다양한 산업 분야에서 AI가 어떻게 적용되고 있는지에 대한 사례 연구를 제공합니다. 각 산업별로 대표적인 AI 활용 사례, 구현 방법, 사용된 기술, 비즈니스 성과 등을 포함하고 있으며, 학생들이 실제 산업 환경에서의 AI 적용에 대한 이해를 높이고 자신의 프로젝트에 활용할 수 있도록 구성되었습니다. + +## 목차 +1. [헬스케어 산업](#1-헬스케어-산업) +2. [금융 산업](#2-금융-산업) +3. [제조 산업](#3-제조-산업) +4. [유통/소매 산업](#4-유통소매-산업) +5. [농업 산업](#5-농업-산업) + +## 1. 헬스케어 산업 + +### 1.1 의료 영상 진단 - 서울아산병원 & VUNO + +#### 배경 및 과제 +서울아산병원은 방대한 양의 X-ray, MRI, CT 영상 데이터를 처리하고 진단 정확도를 높이는 것이 주요 과제였습니다. 특히 방사선 전문의의 업무 부담이 높아 진단 시간 단축이 필요한 상황이었습니다. + +#### AI 적용 솔루션 +- **기술:** 딥러닝 기반 의료 영상 분석 (VUNO Med-Chest X-ray) +- **주요 알고리즘:** + - CNN (Convolutional Neural Networks) 기반 이미지 분석 + - 앙상블 학습을 통한 정확도 향상 + - GradCAM을 활용한 판독 근거 시각화 + +#### 구현 방법 +1. 10만 건 이상의 흉부 X-ray 데이터 학습 +2. 다양한 폐 질환에 대한 다중 레이블 분류 모델 구축 +3. 병원 PACS(의료영상저장전송시스템)과 통합 + +#### 성과 및 결과 +- 폐결절, 기흉 등 주요 폐질환 탐지 정확도 95% 이상 +- 진단 시간 평균 30% 단축 +- 방사선과 의사의 업무 효율성 20% 향상 +- 특히 야간/응급 상황에서 신속한 의사결정 지원 + +### 1.2 개인 맞춤형 치료 - 삼성서울병원 정밀의료 프로젝트 + +#### 배경 및 과제 +암 환자들은 같은 유형의 암이라도 유전적 특성과 환경에 따라 치료 반응이 다양합니다. 삼성서울병원은 이러한 차이를 고려한 맞춤형 치료법 개발이 필요했습니다. + +#### AI 적용 솔루션 +- **기술:** 유전체 데이터 분석 및 AI 기반 치료법 예측 +- **주요 알고리즘:** + - 유전체 시퀀싱 데이터 분석을 위한 딥러닝 + - 약물 반응 예측을 위한 그래프 신경망(GNN) + - 환자 군집화를 위한 비지도 학습 + +#### 구현 방법 +1. 1만 명 이상의 한국인 암 환자 유전체 및 임상 데이터 수집 +2. 유전자 변이와 약물 반응 간의 상관관계 분석 +3. 환자별 최적 치료 옵션 예측 모델 개발 + +#### 성과 및 결과 +- 위암 환자 항암제 반응 예측 정확도 78% +- 불필요한 약물 처방 20% 감소 +- 치료 성공률 15% 향상 +- 환자별 맞춤형 항암치료 프로토콜 수립 + +## 2. 금융 산업 + +### 2.1 이상 금융거래 탐지 - 신한은행 FDS(Fraud Detection System) + +#### 배경 및 과제 +금융 사기 기법이 갈수록 정교해지면서 기존의 규칙 기반 탐지 시스템으로는 새로운 유형의 사기를 탐지하기 어려워졌습니다. 신한은행은 이를 개선하기 위해 AI 기반 시스템을 도입했습니다. + +#### AI 적용 솔루션 +- **기술:** 실시간 이상 거래 탐지 시스템 +- **주요 알고리즘:** + - LSTM(Long Short-Term Memory) 네트워크 + - 오토인코더(Autoencoder) 기반 이상 탐지 + - XGBoost를 활용한 특성 중요도 분석 + +#### 구현 방법 +1. 3년간의 거래 데이터와 사기 사례 5만 건 학습 +2. 고객별 거래 패턴 프로파일링 +3. 실시간 거래 모니터링 및 점수화 시스템 구축 + +#### 성과 및 결과 +- 사기 거래 탐지율 76%에서 92%로 향상 +- 오탐(false positive) 비율 40% 감소 +- 연간 2,500억원 규모의 사기 피해 방지 +- 고객 신뢰도 증가 및 브랜드 가치 향상 + +### 2.2 로보어드바이저 - NH투자증권 QV로보어드바이저 + +#### 배경 및 과제 +개인 투자자들은 전문적인 자산 관리 서비스를 높은 비용으로만 이용할 수 있었습니다. NH투자증권은 AI를 활용해 저비용으로 맞춤형 자산관리 서비스를 제공하고자 했습니다. + +#### AI 적용 솔루션 +- **기술:** 머신러닝 기반 자산 배분 및 투자 추천 엔진 +- **주요 알고리즘:** + - 강화학습을 통한 자산 배분 최적화 + - 시계열 예측 모델(ARIMA, Prophet) + - 클러스터링을 통한 투자자 유형 분류 + +#### 구현 방법 +1. 30년간의 글로벌 자산 가격 데이터 학습 +2. 투자자 위험 성향 분석 알고리즘 개발 +3. 최적 포트폴리오 구성 및 정기 리밸런싱 자동화 + +#### 성과 및 결과 +- 서비스 출시 2년 내 10만 명 이상의 고객 확보 +- 평균 운용 수익률 벤치마크 대비 2.5% 초과 달성 +- 자산관리 서비스 민주화 실현 +- 자산관리 수수료 70% 절감 효과 + +## 3. 제조 산업 + +### 3.1 스마트 팩토리 - 포스코 인공지능 용광로 + +#### 배경 및 과제 +제철 공정에서 용광로는 높은 에너지를 소비하며, 품질 유지를 위해 전문가의 지속적인 모니터링이 필요했습니다. 포스코는 AI를 도입해 공정을 최적화하고 에너지 효율을 높이고자 했습니다. + +#### AI 적용 솔루션 +- **기술:** AI 기반 용광로 자동 제어 시스템 +- **주요 알고리즘:** + - 디지털 트윈 기반 시뮬레이션 + - 강화학습을 통한 최적 제어 전략 + - 다변량 시계열 분석 + +#### 구현 방법 +1. 용광로 센서 네트워크 구축 (온도, 압력, 가스 조성 등) +2. 5년간의 운영 데이터를 활용한 AI 모델 학습 +3. 실시간 모니터링 및 자동 제어 시스템 통합 + +#### 성과 및 결과 +- 에너지 소비 10% 절감 +- 철강 품질 일관성 15% 향상 +- 연간 2,000억원의 비용 절감 +- 탄소 배출량 8% 감소 + +### 3.2 예지 정비 - 현대자동차 스마트 공장 + +#### 배경 및 과제 +자동차 생산 라인의 장비 고장은 생산 중단과 막대한 경제적 손실로 이어집니다. 현대자동차는 예방적 정비에서 AI 기반 예지 정비로 전환하고자 했습니다. + +#### AI 적용 솔루션 +- **기술:** IoT 센서 및 머신러닝 기반 예지 정비 시스템 +- **주요 알고리즘:** + - RNN 기반 시계열 이상 탐지 + - 생존 분석(Survival Analysis)을 통한 잔여 수명 예측 + - 다중 센서 융합 분석 + +#### 구현 방법 +1. 생산 설비에 IoT 센서 설치 (진동, 소음, 온도 등) +2. 설비별 정상 작동 패턴 학습 및 이상 징후 감지 모델 개발 +3. 유지보수 일정 최적화 시스템 구축 + +#### 성과 및 결과 +- 계획되지 않은 설비 중단 시간 67% 감소 +- 유지보수 비용 35% 절감 +- 설비 수명 20% 연장 +- 생산성 8% 향상 + +## 4. 유통/소매 산업 + +### 4.1 개인화된 추천 시스템 - 쿠팡 제품 추천 엔진 + +#### 배경 및 과제 +온라인 쇼핑몰에서 고객이 관심을 가질 만한 제품을 효과적으로 추천하는 것은 매출 증대의 핵심 요소입니다. 쿠팡은 방대한 제품군과 고객층에 맞는 고도화된 추천 시스템이 필요했습니다. + +#### AI 적용 솔루션 +- **기술:** 딥러닝 기반 하이브리드 추천 시스템 +- **주요 알고리즘:** + - 협업 필터링(Collaborative Filtering) + - BERT 기반 상품 설명 텍스트 분석 + - 세션 기반 추천을 위한 GNN(Graph Neural Networks) + +#### 구현 방법 +1. 구매 이력, 검색 기록, 제품 리뷰 등 다양한 데이터 소스 통합 +2. 제품간 연관성 및 사용자-제품 상호작용 그래프 구축 +3. 실시간 개인화된 추천 API 개발 및 A/B 테스트 + +#### 성과 및 결과 +- 추천 클릭률(CTR) 32% 증가 +- 장바구니 추가율 25% 상승 +- 교차 판매(Cross-selling) 45% 증가 +- 개인화된 이메일 마케팅 효과 60% 향상 + +### 4.2 수요 예측 및 재고 관리 - 롯데마트 SCM 최적화 + +#### 배경 및 과제 +롯데마트는 다양한 제품군에 대한 정확한 수요 예측과 효율적인 재고 관리가 필요했습니다. 특히 신선식품의 경우 과잉 재고는 폐기 비용을, 재고 부족은 기회 손실을 초래합니다. + +#### AI 적용 솔루션 +- **기술:** 머신러닝 기반 수요 예측 및 재고 최적화 +- **주요 알고리즘:** + - LightGBM을 활용한 수요 예측 + - 베이지안 최적화를 통한 재고 수준 결정 + - 시공간적 패턴 분석을 위한 CNN-LSTM 하이브리드 모델 + +#### 구현 방법 +1. 5년간의 판매 데이터, 프로모션 기록, 날씨 데이터 등 통합 +2. 지역별, 상품별 수요 패턴 모델링 +3. 자동화된 발주 제안 시스템 구축 + +#### 성과 및 결과 +- 신선식품 폐기율 35% 감소 +- 재고 부족으로 인한 기회 손실 25% 감소 +- 재고 유지 비용 18% 절감 +- 전체 공급망 비용 12% 절감 + +## 5. 농업 산업 + +### 5.1 정밀 농업 - 농촌진흥청 스마트팜 + +#### 배경 및 과제 +한국의 농업은 고령화와 인력 부족으로 어려움을 겪고 있습니다. 농촌진흥청은 AI와 IoT를 활용한 정밀 농업을 통해 생산성을 높이고 인력 의존도를 줄이고자 했습니다. + +#### AI 적용 솔루션 +- **기술:** AI 기반 작물 모니터링 및 환경 제어 시스템 +- **주요 알고리즘:** + - 컴퓨터 비전을 통한 작물 상태 분석 + - 강화학습 기반 최적 환경 제어 + - 시계열 예측을 통한 수확량 예측 + +#### 구현 방법 +1. 온실 내 센서 네트워크 구축 (온도, 습도, 조도, CO2 등) +2. 드론 이미지와 근접 센서를 활용한 작물 상태 모니터링 +3. 통합 제어 시스템을 통한 자동화된 환경 관리 + +#### 성과 및 결과 +- 토마토 재배 수확량 23% 증가 +- 물 사용량 30% 절감 +- 농약 및 비료 사용 25% 감소 +- 인력 투입 시간 40% 절감 + +### 5.2 병충해 조기 감지 - 경상북도 사과농가 AI 방제 시스템 + +#### 배경 및 과제 +사과 농가는 매년 병충해로 인한 막대한 손실을 입고 있으며, 기존의 정기적 방제는 비효율적이고 환경에도 부담을 주었습니다. 경상북도는 AI를 활용한 정밀 방제 시스템을 개발하고자 했습니다. + +#### AI 적용 솔루션 +- **기술:** 이미지 인식 기반 병충해 조기 감지 시스템 +- **주요 알고리즘:** + - 객체 탐지를 위한 YOLOv5 기반 모델 + - 전이학습을 통한 적은 데이터로 높은 성능 달성 + - 환경 센서 데이터와 영상 정보의 다중 모달 분석 + +#### 구현 방법 +1. 드론 및 고정 카메라를 통한 정기적 이미지 수집 +2. 주요 병충해 10종에 대한 학습 데이터셋 구축 +3. 위험도 분석 및 정밀 방제 권고 시스템 개발 + +#### 성과 및 결과 +- 병충해 조기 발견율 65% 향상 +- 농약 사용량 40% 감소 +- 수확량 손실률 50% 감소 +- 친환경 사과 인증 비율 증가 + +## 결론 + +이상의 사례 연구들은 AI가 다양한 산업 분야에서 실질적인 문제를 해결하고 비즈니스 가치를 창출하는 방식을 보여줍니다. 이러한 사례들은 학생들이 자신의 분야에서 AI를 적용할 수 있는 영감과 실질적인 지침을 제공할 수 있을 것입니다. 향후 더 많은 사례 연구가 추가될 예정이며, 각 산업별로 더 심층적인 기술 구현 방법과 데이터 처리 방식에 대한 내용도 확충될 것입니다. \ No newline at end of file diff --git a/1_infrastructure/docker/cloud_practice_environment_guide.md b/1_infrastructure/docker/cloud_practice_environment_guide.md new file mode 100644 index 0000000..c463c5f --- /dev/null +++ b/1_infrastructure/docker/cloud_practice_environment_guide.md @@ -0,0 +1,231 @@ +# AWS/GCP/Azure 무료 티어 활용 AI 실습 환경 구축 가이드 + +## 개요 +이 문서는 주요 클라우드 서비스인 AWS, Google Cloud Platform(GCP), Microsoft Azure의 무료 티어 서비스를 활용하여 AI 학습 및 실습 환경을 구축하는 방법을 안내합니다. 각 클라우드 서비스별로 무료로 사용할 수 있는 리소스와 설정 방법, 그리고 주의사항을 포함하고 있습니다. + +## 목차 +1. [클라우드 서비스 선택 가이드](#1-클라우드-서비스-선택-가이드) +2. [AWS 무료 티어 활용 가이드](#2-aws-무료-티어-활용-가이드) +3. [GCP 무료 티어 활용 가이드](#3-gcp-무료-티어-활용-가이드) +4. [Azure 무료 티어 활용 가이드](#4-azure-무료-티어-활용-가이드) +5. [공통 Docker 배포 방법](#5-공통-docker-배포-방법) +6. [비용 관리 및 모니터링](#6-비용-관리-및-모니터링) + +## 1. 클라우드 서비스 선택 가이드 + +| 고려사항 | AWS | GCP | Azure | +|---------|-----|-----|-------| +| **초기 크레딧** | 1년간 무료 티어 | $300 크레딧 (90일) | $200 크레딧 (30일) | +| **ML 특화 서비스** | SageMaker | Vertex AI | Azure ML | +| **GPU 가용성** | 제한적 (무료 티어에 없음) | Colab 무료 (제한적) | 제한적 (무료 티어에 없음) | +| **사용 난이도** | 복잡함 | 중간 | 사용자 친화적 | +| **문서화 수준** | 매우 상세함 | 상세함 | 매우 상세함 | +| **교육용 적합성** | 높음 (AWS Academy) | 높음 (Qwiklabs) | 높음 (MS Learn) | + +### 추천 조합 +- **초보자**: Azure 또는 GCP +- **중급자**: 모든 서비스 적합 +- **고급자**: AWS (특히 MLOps 관점) +- **무료 GPU 필요시**: GCP (Colab) + +## 2. AWS 무료 티어 활용 가이드 + +### AWS 무료 티어 개요 +AWS 무료 티어는 12개월 무료, 항상 무료, 단기 무료 평가판의 세 가지 유형으로 제공됩니다. + +### AI/ML 학습에 유용한 AWS 무료 서비스 +1. **EC2** (12개월 무료) + - t2.micro 또는 t3.micro 인스턴스 750시간/월 + - Python, Jupyter, TensorFlow 등 설치 가능 + +2. **S3** (12개월 무료) + - 5GB 스토리지, 데이터셋 저장에 활용 + +3. **Amazon SageMaker** (항상 무료) + - SageMaker Studio Lab - 무료 GPU 제한적 제공 + +4. **AWS Lambda** (항상 무료) + - 매월 100만 건의 요청, 간단한 ML 추론 API 구현 가능 + +### AWS 환경 설정 가이드 +1. **계정 생성** + ```bash + # AWS 계정 생성: https://aws.amazon.com + # 신용카드 등록 필요 (청구되지 않음) + ``` + +2. **EC2 인스턴스 시작** + ```bash + # AWS 콘솔 > EC2 > 인스턴스 시작 + # Amazon Linux 2 선택 + # t2.micro 또는 t3.micro 선택 (무료 티어 적격) + ``` + +3. **Docker로 AI 개발환경 설정** + ```bash + # EC2 접속 후 + sudo yum update -y + sudo amazon-linux-extras install docker -y + sudo systemctl start docker + sudo systemctl enable docker + sudo usermod -a -G docker ec2-user + + # 재로그인 후 + # 도커 컨테이너 실행 (JupyterLab) + docker run -d -p 8888:8888 -v $PWD:/home/jovyan/work jupyter/datascience-notebook + ``` + +### 무료 티어 한도 모니터링 +- AWS Billing 대시보드 활용 +- 비용 알림 설정: CloudWatch > 결제 알림 + +## 3. GCP 무료 티어 활용 가이드 + +### GCP 무료 티어 개요 +GCP는 $300 무료 크레딧 (90일)과 일부 항상 무료 제품을 제공합니다. + +### AI/ML 학습에 유용한 GCP 무료 서비스 +1. **Google Colab** (별도 계정) + - 무료 GPU/TPU 액세스 (세션 시간 제한) + - 노트북 형태로 개발 가능 + +2. **Compute Engine** (무료 크레딧 사용) + - e2-micro 인스턴스 (vCPU 2개, 1GB 메모리) + +3. **Cloud Storage** (항상 무료) + - 5GB 스토리지 + +4. **BigQuery** (항상 무료) + - 매월 1TB 쿼리 처리, 데이터 분석 학습에 유용 + +### GCP 환경 설정 가이드 +1. **계정 생성** + ```bash + # GCP 계정 생성: https://cloud.google.com + # 신용카드 등록 필요 (청구되지 않음) + ``` + +2. **Compute Engine VM 인스턴스 생성** + ```bash + # GCP 콘솔 > Compute Engine > VM 인스턴스 + # e2-micro 선택 + # Ubuntu 20.04 LTS 선택 + ``` + +3. **Docker로 AI 개발환경 설정** + ```bash + # VM 접속 후 + sudo apt-get update + sudo apt-get install -y docker.io + sudo systemctl start docker + sudo systemctl enable docker + sudo usermod -a -G docker $USER + + # 재로그인 후 + # 도커 컨테이너 실행 (JupyterLab) + docker run -d -p 8888:8888 -v $PWD:/home/jovyan/work jupyter/datascience-notebook + ``` + +### Google Colab 활용 +1. https://colab.research.google.com 접속 +2. 새 노트북 생성 +3. 런타임 > 런타임 유형 변경 > GPU 또는 TPU 선택 + +## 4. Azure 무료 티어 활용 가이드 + +### Azure 무료 티어 개요 +Azure는 $200 무료 크레딧 (30일)과 40개 이상의 항상 무료 서비스를 제공합니다. + +### AI/ML 학습에 유용한 Azure 무료 서비스 +1. **Azure Virtual Machines** (무료 크레딧 사용) + - B1s 인스턴스 (1 vCPU, 1GB 메모리) + +2. **Azure Storage** (항상 무료) + - 5GB 스토리지 + +3. **Azure Machine Learning** (무료 크레딧 사용) + - 워크스페이스 생성 및 간단한 모델 학습 + +4. **Azure Cognitive Services** (항상 무료) + - 일정량 내 API 호출 무료 + +### Azure 환경 설정 가이드 +1. **계정 생성** + ```bash + # Azure 계정 생성: https://azure.microsoft.com + # 신용카드 등록 필요 (청구되지 않음) + ``` + +2. **가상머신 생성** + ```bash + # Azure 포털 > 가상 머신 > 추가 + # B1s 또는 B1ls 선택 + # Ubuntu 20.04 LTS 선택 + ``` + +3. **Docker로 AI 개발환경 설정** + ```bash + # VM 접속 후 + sudo apt-get update + sudo apt-get install -y docker.io + sudo systemctl start docker + sudo systemctl enable docker + sudo usermod -a -G docker $USER + + # 재로그인 후 + # 도커 컨테이너 실행 (JupyterLab) + docker run -d -p 8888:8888 -v $PWD:/home/jovyan/work jupyter/datascience-notebook + ``` + +## 5. 공통 Docker 배포 방법 + +AI 강의 도커 환경을 각 클라우드 서비스에 일관되게 배포하기 위한 방법입니다. + +### 준비 사항 +1. 클라우드 인스턴스 접속 권한 +2. Docker 설치 완료 +3. `docker-compose.yml` 파일 준비 + +### 배포 단계 +1. **프로젝트 클론** + ```bash + git clone https://github.com/your-org/ai-course.git + cd ai-course + ``` + +2. **도커 컴포즈 실행** + ```bash + # CPU 버전 (무료 티어에 적합) + docker-compose -f docker-compose.yml up -d + + # GPU 버전 (유료 인스턴스에서만) + docker-compose -f docker-compose.gpu.yml up -d + ``` + +3. **포트포워딩 설정** + - 클라우드 콘솔에서 인바운드 포트 허용 (8888, 8000, 5000) + +4. **접속 방법** + - 브라우저에서 `http://<클라우드_인스턴스_IP>:8888` + - 토큰: `ai_course_token` + +## 6. 비용 관리 및 모니터링 + +### AWS 비용 관리 +- AWS Budgets 설정 +- AWS Cost Explorer 활용 +- 미사용 리소스 정리 (EBS 볼륨, 탄력적 IP 등) + +### GCP 비용 관리 +- 결제 알림 설정 +- 결제 내보내기 설정 +- 할당량 한도 설정 + +### Azure 비용 관리 +- Azure Cost Management 활용 +- 예산 알림 설정 +- 미사용 리소스 자동 종료 설정 + +## 결론 + +각 클라우드 서비스의 무료 티어는 AI 학습을 시작하기에 충분한 자원을 제공합니다. 실습 목적에 가장 맞는 서비스를 선택하고, 비용 모니터링을 통해 예상치 못한 청구가 발생하지 않도록 주의하세요. 더 높은 성능이 필요한 딥러닝 작업의 경우 GCP Colab이나 유료 서비스를 고려하는 것이 좋습니다. \ No newline at end of file diff --git a/docker/deployment_guide.md b/1_infrastructure/docker/deployment_guide.md similarity index 100% rename from docker/deployment_guide.md rename to 1_infrastructure/docker/deployment_guide.md diff --git a/docker/docker-windows-vm/Dockerfile b/1_infrastructure/docker/docker-windows-vm/Dockerfile similarity index 100% rename from docker/docker-windows-vm/Dockerfile rename to 1_infrastructure/docker/docker-windows-vm/Dockerfile diff --git a/docker/docker-windows-vm/README.md b/1_infrastructure/docker/docker-windows-vm/README.md similarity index 100% rename from docker/docker-windows-vm/README.md rename to 1_infrastructure/docker/docker-windows-vm/README.md diff --git a/docker/docker-windows-vm/Vagrantfile b/1_infrastructure/docker/docker-windows-vm/Vagrantfile similarity index 100% rename from docker/docker-windows-vm/Vagrantfile rename to 1_infrastructure/docker/docker-windows-vm/Vagrantfile diff --git a/docker/docker-windows-vm/docker-compose.yml b/1_infrastructure/docker/docker-windows-vm/docker-compose.yml similarity index 100% rename from docker/docker-windows-vm/docker-compose.yml rename to 1_infrastructure/docker/docker-windows-vm/docker-compose.yml diff --git a/docker/docker-windows-vm/startup.sh b/1_infrastructure/docker/docker-windows-vm/startup.sh similarity index 100% rename from docker/docker-windows-vm/startup.sh rename to 1_infrastructure/docker/docker-windows-vm/startup.sh diff --git a/docker/docker_3dp/Dockerfile b/1_infrastructure/docker/docker_3dp/Dockerfile similarity index 100% rename from docker/docker_3dp/Dockerfile rename to 1_infrastructure/docker/docker_3dp/Dockerfile diff --git a/docker/docker_3dp/README.md b/1_infrastructure/docker/docker_3dp/README.md similarity index 100% rename from docker/docker_3dp/README.md rename to 1_infrastructure/docker/docker_3dp/README.md diff --git a/docker/docker_3dp/docker-compose.yml b/1_infrastructure/docker/docker_3dp/docker-compose.yml similarity index 100% rename from docker/docker_3dp/docker-compose.yml rename to 1_infrastructure/docker/docker_3dp/docker-compose.yml diff --git a/1_infrastructure/docker/docker_3dp/printer/.gitignore b/1_infrastructure/docker/docker_3dp/printer/.gitignore new file mode 100644 index 0000000..91efda1 --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/.gitignore @@ -0,0 +1,6 @@ +gcode/ +stl/ +venv/ +log/ +.env +fff_option.txt diff --git a/1_infrastructure/docker/docker_3dp/printer/README.md b/1_infrastructure/docker/docker_3dp/printer/README.md new file mode 100644 index 0000000..aaa8614 --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/README.md @@ -0,0 +1,131 @@ +# 3D 프린터 슬라이싱 API + +이 프로젝트는 [Flask](https://flask.palletsprojects.com/)를 사용하여 구축된 웹 API로, [PrusaSlicer](https://www.prusa3d.com/page/prusaslicer_424/)를 이용해 STL 3D 모델 파일을 G-code로 변환하는 기능을 제공합니다. Prusa MK4 3D 프린터에 최적화된 설정을 포함하고 있습니다. + +## 주요 기능 + +- **STL to G-code 변환**: `/slice` 엔드포인트를 통해 STL 파일을 G-code로 슬라이싱합니다. +- **상세한 파라미터 설정**: PrusaSlicer에서 제공하는 거의 모든 슬라이싱 파라미터를 API 요청 시점에 커스터마이징할 수 있습니다. +- **오류 처리**: 슬라이싱 과정에서 발생할 수 있는 일반적인 오류들을 감지하고, 구체적인 오류 코드와 메시지를 반환합니다. +- **파일 관리 및 프록시**: 생성된 G-code 파일을 다운로드하고, Prusa 프린터의 웹 인터페이스인 PrusaLink로 요청을 전달하는 프록시 기능을 제공합니다. + +## API 엔드포인트 + +### `POST /slice` + +STL 파일을 업로드하고 슬라이싱 옵션을 지정하여 G-code를 생성합니다. + +- **Request Body (`multipart/form-data`):** + - `file` (file, optional): 슬라이싱할 `.stl` 파일. 서버에 파일이 이미 존재하는 경우 `orignlFileNm`으로 대체할 수 있습니다. + - `orignlFileNm` (string, optional): 서버에 미리 업로드된 파일의 이름. + - `...options`: PrusaSlicer에 전달할 키-값 형태의 슬라이싱 옵션들. (자세한 내용은 아래의 '슬라이싱 옵션' 섹션 참조) + +- **Success Response (200 OK):** + ```json + { + "success": true, + "message": "모델이 성공적으로 슬라이스되었습니다." + } + ``` + +- **Error Response:** + - **파일 관련 오류:** + - `100`: 업로드된 파일이 없음. + - `200`: `orignlFileNm`으로 지정된 파일이 서버 경로에 없음. + - `300`: STL 파일이 아닌 다른 확장자 파일 업로드. + - **슬라이싱 오류 (PrusaSlicer):** + - `401`: 첫 레이어에 압출이 없는 객체가 존재. + - `402`: 객체에 대한 압출이 생성되지 않음. + - `403`: 현재 설정으로 모델을 인쇄할 수 없음. + - `404`: 지지대(support) 없이 인쇄할 수 없는 객체가 있음. + - `405`: 레이어가 감지되지 않음 (STL 파일 복구 필요). + - `406`: 현재 설정으로 패드(pad)를 생성할 수 없음. + - `407`: 인쇄할 수 없는 객체가 있음 (지지대 설정 조정 필요). + - `400`: 그 외의 알 수 없는 슬라이싱 오류. + +### `GET /getGCodeFile` + +서버에 생성된 G-code 파일을 다운로드합니다. + +- **Query Parameters:** + - `fileName` (string, required): 다운로드할 G-code 파일의 이름. + +- **Success Response (200 OK):** + - `Content-Type: application/octet-stream` + - G-code 파일 데이터 스트림. + +### `GET /getPrusaConfig` + +서버에 저장된 PrusaSlicer 설정 파일(`fff_option.txt`)의 내용을 반환합니다. + +### `ANY /proxy` + +PrusaLink 장비로 API 요청을 전달하는 프록시 역할을 합니다. PrusaLink API의 엔드포인트와 파라미터를 그대로 사용합니다. + +## 설치 및 실행 + +### 요구사항 + +- Python 3.x +- PrusaSlicer +- Flask 및 기타 Python 패키지 + +### 설정 + +1. **소스 코드 클론:** + ```bash + git clone + cd + ``` + +2. **환경 변수 설정:** + 프로젝트 루트에 `.env` 파일을 생성하고 아래 내용을 채웁니다. 이 프로젝트는 하드코딩된 경로를 사용하므로, 환경에 맞게 소스 코드(`app.py`) 수정이 필요할 수 있습니다. + ``` + # .env + PRUSA_LINK_URL=http:// + PRUSA_LINK_API_KEY= + ``` + +3. **Python 의존성 설치:** + 가상 환경을 생성하고 필요한 패키지를 설치합니다. + ```bash + python -m venv venv + source venv/bin/activate + pip install Flask Flask-Cors python-dotenv requests + ``` + (프로젝트에 `requirements.txt` 파일을 생성하여 관리하는 것을 권장합니다.) + +4. **PrusaSlicer 설치:** + PrusaSlicer를 시스템에 설치해야 합니다. `app.py`에서는 실행 경로가 `/usr/bin/PrusaSlicer`로 하드코딩되어 있으므로, 실제 설치 경로가 다를 경우 코드를 수정해야 합니다. + +5. **애플리케이션 실행:** + ```bash + flask run + ``` + +## 슬라이싱 옵션 + +API를 통해 PrusaSlicer의 다양한 설정을 제어할 수 있습니다. `slicer_test.py` 파일에 거의 모든 사용 가능한 옵션이 정의되어 있습니다. + +
+전체 옵션 목록 보기 (예시) + +```python +options = { + 'layer-height': '0.1', + 'first-layer-height': '0.2', + 'perimeters': '3', + 'top-solid-layers': '8', + 'bottom-solid-layers': '6', + 'fill-density': '15%', + 'fill-pattern': 'grid', + 'support-material': '', + 'support-material-auto': '', + # ... and many more options +} +``` +
+ +## 커스텀 G-code + +이 API는 Prusa MK4 프린터에 최적화된 시작(`start_gcode`) 및 종료(`end_gcode`) G-code를 슬라이싱 결과물에 자동으로 삽입합니다. 이 코드는 `app.py` 내에 변수로 정의되어 있으며, 필요에 따라 수정할 수 있습니다. \ No newline at end of file diff --git a/1_infrastructure/docker/docker_3dp/printer/app.bak.py b/1_infrastructure/docker/docker_3dp/printer/app.bak.py new file mode 100644 index 0000000..529a3b5 --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/app.bak.py @@ -0,0 +1,265 @@ +import logging +from flask import Flask, request, jsonify, Response, stream_with_context +from flask_cors import CORS +from dotenv import load_dotenv +import os +import subprocess +import requests + +app = Flask(__name__) +load_dotenv('/home/gds/printer/.env') # .env 파일 경로 +CORS(app, resources={r"/*": {"origins": "*"}}) # 모든 출처에 대해 CORS를 활성화합니다. + +# 로그 디렉토리와 파일 설정 +log_dir = '/home/gds/printer/log' +if not os.path.exists(log_dir): + os.makedirs(log_dir) +log_file = os.path.join(log_dir, 'app.log') + +# 로깅 설정 +logging.basicConfig(filename=log_file, level=logging.DEBUG, + format='%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s') +app.logger.addHandler(logging.StreamHandler()) +app.logger.setLevel(logging.DEBUG) + +def slice_stl(file_path, output_dir, options=None): + """ + STL 파일을 PrusaSlicer를 사용하여 슬라이스하는 함수 + """ + # PrusaSlicer 명령어 생성 + prusa_slicer_path = '/usr/bin/PrusaSlicer' + + command = [ + prusa_slicer_path, '-g', + '--filament-type', options.get('filament_type'), + '--idle-temperature', options.get('idle_temperature'), + '--first-layer-temperature', options.get('first_layer_temperature'), + '--temperature', options.get('temperature'), + '--first-layer-bed-temperature', options.get('first_layer_bed_temperature'), + '--bed-temperature', options.get('bed_temperature'), + '--fill-density', options.get('fill_density')+"%", + '--fill-pattern', options.get('fill_pattern'), + '--infill-anchor', options.get('infill_anchor'), + '--infill-anchor-max', options.get('infill_anchor_max'), + '--top-fill-pattern', options.get('top_fill_pattern'), + '--bottom-fill-pattern', options.get('bottom_fill_pattern'), + '--skirts', options.get('skirts'), + '--skirt-distance', options.get('skirt_distance'), + '--skirt-height', options.get('skirt_height'), + '--draft-shield', options.get('draft_shield'), + '--min-skirt-length', options.get('min_skirt_length'), + '--brim-type', options.get('brim_type'), + '--brim-width', options.get('brim_width'), + '--brim-separation', options.get('brim_separation'), + '--support-material', options.get('support_material'), + '--support-material-auto', options.get('support_material_auto'), + '--support-material-threshold', options.get('support_material_threshold'), + '--support-material-extrusion-width', options.get('support_material_extrusion_width'), + '--raft-first-layer-density', options.get('raft_first_layer_density'), + '--raft-first-layer-expansion', options.get('raft_first_layer_expansion'), + '--perimeter-speed', options.get('perimeter_speed'), + '--small-perimeter-speed', options.get('small_perimeter_speed'), + '--external-perimeter-speed', options.get('external_perimeter_speed'), + '--infill-speed', options.get('infill_speed'), + '--solid-infill-speed', options.get('solid_infill_speed'), + '--top-solid-infill-speed', options.get('top_solid_infill_speed'), + '--support-material-speed', options.get('support_material_speed'), + '--support-material-interface-speed', options.get('support_material_interface_speed'), + '--bridge-speed', options.get('bridge_speed'), + '--gap-fill-speed', options.get('gap_fill_speed'), + '--travel-speed', options.get('travel_speed'), + '--first-layer-speed', options.get('first_layer_speed'), + '--first-layer-speed-over-raft', options.get('first_layer_speed_over_raft'), + f'"{file_path}"' + ] + + # 출력 디렉토리는 PrusaSlicer가 인식할 수 있는 형식으로 설정 + command.extend(['-o', output_dir]) + + # skirts가 0일 때 관련 옵션 제거 + if options.get('skirts') == '0': + command = [opt for idx, opt in enumerate(command) if 'skirt' not in opt and (idx == 0 or 'skirt' not in command[idx - 1])] + command = [opt for idx, opt in enumerate(command) if 'skirts' not in opt and (idx == 0 or 'skirts' not in command[idx - 1])] + + # brim-type이 no_brim일 때 관련 옵션 제거 + if options.get('brim_type') == 'no_brim': + command = [opt for idx, opt in enumerate(command) if 'brim' not in opt and (idx == 0 or 'brim' not in command[idx - 1])] + command = [opt for idx, opt in enumerate(command) if 'draft' not in opt and (idx == 0 or 'draft' not in command[idx - 1])] + + + # 이 코드 처리 중에 --support-material 이나 --support-material-auto가 true,false에 따라서 다르게 동작해야 되는데, 둘중 하나 통과하는 부분에서 + # command option이 사라진것 같아 확인 필요 + i = 0 + while i < len(command): + if command[i] == '--support-material' and options.get('support_material') == 'true': + command[i + 1] = '' # Set the next index to empty string + i += 1 # Move to the next index to skip removing '--support-material' + continue + + if command[i] == '--support-material-auto' and options.get('support_material_auto') == 'true': + command[i + 1] = '' # Set the next index to empty string + i += 1 # Move to the next index to skip removing '--support-material-auto' + continue + + if command[i] == '--support-material' and options.get('support_material') == 'false': + command.pop(i) # Remove '--support-material' + command.pop(i) # Remove the value after '--support-material' + continue + + if command[i] == '--support-material-auto' and options.get('support_material_auto') == 'false': + command.pop(i) # Remove '--support-material-auto' + command.pop(i) # Remove the value after '--support-material-auto' + continue + + i += 1 + + app.logger.debug("command : %s", command) + + try: + result = subprocess.run(' '.join(command), shell=True, capture_output=True, text=True, check=True) + app.logger.debug("PrusaSlicer output: %s", result.stdout) + return True + except subprocess.CalledProcessError as e: + app.logger.error("PrusaSlicer error: %s", e.stderr) + return False + +@app.route('/slice', methods=['POST']) +def slice_model(): + if 'file' not in request.files: + app.logger.error('No file part') + return jsonify({'error': 'No file part'}) + + file = request.files['file'] + if file.filename == '': + app.logger.error('No selected file') + return jsonify({'error': 'No selected file'}) + + # STL 파일을 저장할 경로 설정 + upload_dir = '/home/gds/printer/stl' + if not os.path.exists(upload_dir): + os.makedirs(upload_dir) + + file_path = os.path.join(upload_dir, file.filename) + file.save(file_path) + app.logger.debug('File saved to %s', file_path) + + options = { + 'filament_type': request.form.get('filament_type'), + 'idle_temperature': request.form.get('idle_temperature'), + 'first_layer_temperature': request.form.get('first_layer_temperature'), + 'temperature': request.form.get('temperature'), + 'first_layer_bed_temperature': request.form.get('first_layer_bed_temperature'), + 'bed_temperature': request.form.get('bed_temperature'), + 'fill_density': request.form.get('fill_density'), + 'fill_pattern': request.form.get('fill_pattern'), + 'infill_anchor': request.form.get('infill_anchor'), + 'infill_anchor_max': request.form.get('infill_anchor_max'), + 'top_fill_pattern': request.form.get('top_fill_pattern'), + 'bottom_fill_pattern': request.form.get('bottom_fill_pattern'), + 'skirts': request.form.get('skirts'), + 'skirt_distance': request.form.get('skirt_distance'), + 'skirt_height': request.form.get('skirt_height'), + 'draft_shield': request.form.get('draft_shield'), + 'min_skirt_length': request.form.get('min_skirt_length'), + 'brim_type': request.form.get('brim_type'), + 'brim_width': request.form.get('brim_width'), + 'brim_separation': request.form.get('brim_separation'), + 'support_material': request.form.get('support_material'), + 'support_material_auto': request.form.get('support_material_auto'), + 'support_material_threshold': request.form.get('support_material_threshold'), + 'support_material_extrusion_width': request.form.get('support_material_extrusion_width'), + 'raft_first_layer_density': request.form.get('raft_first_layer_density'), + 'raft_first_layer_expansion': request.form.get('raft_first_layer_expansion'), + 'perimeter_speed': request.form.get('perimeter_speed'), + 'small_perimeter_speed': request.form.get('small_perimeter_speed'), + 'external_perimeter_speed': request.form.get('external_perimeter_speed'), + 'infill_speed': request.form.get('infill_speed'), + 'solid_infill_speed': request.form.get('solid_infill_speed'), + 'top_solid_infill_speed': request.form.get('top_solid_infill_speed'), + 'support_material_speed': request.form.get('support_material_speed'), + 'support_material_interface_speed': request.form.get('support_material_interface_speed'), + 'bridge_speed': request.form.get('bridge_speed'), + 'gap_fill_speed': request.form.get('gap_fill_speed'), + 'travel_speed': request.form.get('travel_speed'), + 'first_layer_speed': request.form.get('first_layer_speed'), + 'first_layer_speed_over_raft': request.form.get('first_layer_speed_over_raft') + } + + # PrusaSlicer를 사용하여 STL 파일 슬라이스 + output_dir = '/home/gds/printer/gcode/' + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + success = slice_stl(file_path, output_dir, options) + + if success: + # G-code 파일 경로 + gcode_file_path = os.path.join(output_dir, os.path.splitext(file.filename)[0] + '.gcode') + return jsonify({'gcode_file_path': gcode_file_path}) + else: + return jsonify({'error': 'Failed to slice the model'}) + +@app.route('/getGCodeFile', methods=['GET']) +def get_gcode_file(): + gcode_file_path = request.args.get('gcodeFilePath') + if not gcode_file_path: + return jsonify({'error': 'Missing gcode_file_path parameter'}) + + try: + with open(gcode_file_path, 'r') as file: + gcode_string = file.read() + + return gcode_string + except FileNotFoundError: + return jsonify({'error': 'File not found'}) + +@app.route('/getPrusaConfig', methods=['GET']) +def get_prusa_config(): + config = { + 'printer1': { + 'url': os.getenv('PRUSA_PRINTER1_API_URL'), + 'api_key': os.getenv('PRUSA_PRINTER1_API_KEY') + }, + 'printer2': { + 'url': os.getenv('PRUSA_PRINTER2_API_URL'), + 'api_key': os.getenv('PRUSA_PRINTER2_API_KEY') + } + } + return jsonify(config) + +@app.route('/proxy', methods=['GET', 'POST', 'PUT', 'DELETE']) +def proxy_prusa_link(): + try: + # 요청 URL과 파라미터 설정 + url = request.args.get('url') + if not url: + return Response("URL is required", status=400) + + # PrusaLink에 보낼 요청 설정 + headers = {key: value for key, value in request.headers.items() if key != 'Host'} + response = requests.request( + method=request.method, + url=url, + headers=headers, + data=request.get_data(), + cookies=request.cookies, + stream=True # 스트리밍 응답 처리 + ) + + # PrusaLink에서 받은 스트리밍 응답을 클라이언트에 전달 + def generate(): + for chunk in response.iter_content(chunk_size=8192): + yield chunk + + proxy_response = Response(stream_with_context(generate()), status=response.status_code) + for key, value in response.headers.items(): + if key.lower() != 'content-encoding' and key.lower() != 'transfer-encoding': + proxy_response.headers[key] = value + + return proxy_response + except Exception as e: + return Response(f"An error occurred: {str(e)}", status=500) + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=3000, debug=True) \ No newline at end of file diff --git a/1_infrastructure/docker/docker_3dp/printer/app.py b/1_infrastructure/docker/docker_3dp/printer/app.py new file mode 100644 index 0000000..fad973d --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/app.py @@ -0,0 +1,339 @@ +import logging +from flask import Flask, request, jsonify, Response, stream_with_context +from flask_cors import CORS +from dotenv import load_dotenv +import os +import subprocess +import requests + +app = Flask(__name__) +load_dotenv('/home/gds/printer/.env') # .env 파일 경로 +CORS(app, resources={r"/*": {"origins": "*"}}) # 모든 출처에 대해 CORS를 활성화합니다. + +# 로그 디렉토리와 파일 설정 +log_dir = '/home/gds/printer/log' +if not os.path.exists(log_dir): + os.makedirs(log_dir) +log_file = os.path.join(log_dir, 'app.log') + +# 로깅 설정 +logging.basicConfig(filename=log_file, level=logging.DEBUG, + format='%(asctime)s %(levelname)s %(name)s %(threadName)s : %(message)s') +app.logger.addHandler(logging.StreamHandler()) +app.logger.setLevel(logging.DEBUG) + +# start_gcode, end_gcode 변수 선언 +start_gcode = """ +M17 +M862.1 P[nozzle_diameter] +M862.3 P "MK4" +M862.5 P2 +M862.6 P "Input shaper" +M115 U6.0.1+14848 +M555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} +W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))} +G90 +M83 +M140 S[first_layer_bed_temperature] + +{if filament_notes[0]=~/.*HT_MBL10.*/} +M104 T0 S{first_layer_temperature[0] - 10} +M109 T0 R{first_layer_temperature[0] - 10} +{endif} + +{if filament_type[0] == "PC" or filament_type[0] == "PA"} +M104 T0 S{first_layer_temperature[0] - 25} +M109 T0 R{first_layer_temperature[0] - 25} +{endif} + +{if filament_type[0] == "FLEX"} +M104 T0 S210 +M109 T0 R210 +{endif} + +{if filament_type[0]=~/.*PET.*/} +M104 T0 S175 +M109 T0 R175 +{endif} + +{if not (filament_notes[0]=~/.*HT_MBL10.*/ or filament_type[0] == "PC" or filament_type[0] == "PA" or filament_type[0] == "FLEX" or filament_type[0]=~/.*PET.*/)} +M104 T0 S170 +M109 T0 R170 +{endif} + +M84 E +G28 +G1 X{10 + 32} Y-4 Z5 F4800 +M302 S160 +{if filament_type[initial_tool]=="FLEX"} +G1 E-4 F2400 +{else} +G1 E-2 F2400 +{endif} +M84 E +G29 P9 X10 Y-4 W32 H4 +{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif} +G0 Z40 F10000 +M190 S[first_layer_bed_temperature] +M107 +M84 E +G29 P1 +G29 P1 X0 Y0 W50 H20 C +G29 P3.2 +G29 P3.13 +G29 A +M104 S{first_layer_temperature[0]} +G0 X0 Y-4 Z15 F4800 +M109 S{first_layer_temperature[0]} +G92 E0 +M569 S0 E +G92 E0 +G1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 +G0 E7 X15 Z0.2 F500 +G0 X25 E4 F500 +G0 X35 E4 F650 +G0 X45 E4 F800 +G0 X{45 + 3} Z{0.05} F{8000} +G0 X{45 + 3 * 2} Z0.2 F{8000} +G92 E0 +M221 S100 +""" + +end_gcode = """ +{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720{endif} +M104 S0 +M140 S0 +M107 +G1 X241 Y170 F3600 +{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300{endif} +G4 +M572 S0 +M593 X T2 F0 +M593 Y T2 F0 +M84 X Y E +""" + +error_code = '' +err_code ='' + +def slice_stl(file_path, output_dir, options=None): + """ + STL 파일을 PrusaSlicer를 사용하여 슬라이스하는 함수 + """ + # PrusaSlicer 명령어 생성 + prusa_slicer_path = '/usr/bin/PrusaSlicer' + + command = [ + prusa_slicer_path, '-g', + ] + + # 옵션 추가 + for key, value in options.items(): + command.extend([f'--{key}', value]) + + # 파일 경로 추가 + command.append(f'"{file_path}"') + + # 출력 디렉토리는 PrusaSlicer가 인식할 수 있는 형식으로 설정 + command.extend(['-o', output_dir]) + + # skirts가 0일 때 관련 옵션 제거 + if options.get('skirts') == '0': + command = [opt for idx, opt in enumerate(command) if 'skirt' not in opt and (idx == 0 or 'skirt' not in command[idx - 1])] + command = [opt for idx, opt in enumerate(command) if 'skirts' not in opt and (idx == 0 or 'skirts' not in command[idx - 1])] + + # brim-type이 no_brim일 때 관련 옵션 제거 + if options.get('brim_type') == 'no_brim': + command = [opt for idx, opt in enumerate(command) if 'brim' not in opt and (idx == 0 or 'brim' not in command[idx - 1])] + command = [opt for idx, opt in enumerate(command) if 'draft' not in opt and (idx == 0 or 'draft' not in command[idx - 1])] + + + # 이 코드 처리 중에 --support-material 이나 --support-material-auto가 true,false에 따라서 다르게 동작해야 되는데, 둘중 하나 통과하는 부분에서 + # command option이 사라진것 같아 확인 필요 + i = 0 + while i < len(command): + if command[i] == '--support-material' and options.get('support_material') == 'true': + command[i + 1] = '' # Set the next index to empty string + i += 1 # Move to the next index to skip removing '--support-material' + continue + + if command[i] == '--support-material-auto' and options.get('support_material_auto') == 'true': + command[i + 1] = '' # Set the next index to empty string + i += 1 # Move to the next index to skip removing '--support-material-auto' + continue + + if command[i] == '--support-material' and options.get('support_material') == 'false': + command.pop(i) # Remove '--support-material' + command.pop(i) # Remove the value after '--support-material' + continue + + + if command[i] == '--support-material-auto' and options.get('support_material_auto') == 'false': + command.pop(i) # Remove '--support-material-auto' + command.pop(i) # Remove the value after '--support-material-auto' + continue + + i += 1 + + #app.logger.debug("command : %s", ' '.join(command)) + + try: + result = subprocess.run(' '.join(command), shell=True, capture_output=True, text=True, check=True) + app.logger.debug("PrusaSlicer output: %s", result.stdout) + return True + except subprocess.CalledProcessError as e: + app.logger.error("PrusaSlicer error: %s", e.stderr) + global error_code + error_code = e.stderr + return False + +def parse_slicing_error(error_code): + error_patterns = { + "There is an object with no extrusions in the first layer.": (401, "첫 번째 레이어에 압출물이 없는 객체가 있습니다."), + "No extrusions were generated for objects.": (402, "객체에 대한 압출물이 생성되지 않았습니다."), + "The print is empty. The model is not printable with current print settings.": (403, "출력이 비어 있습니다. 현재 인쇄 설정으로는 모델을 인쇄할 수 없습니다."), + "Levitating objects cannot be printed without supports.": (404, "떠있는 객체는 지지대 없이 인쇄할 수 없습니다."), + "No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.": (405, "레이어가 감지되지 않았습니다. STL 파일을 수리하거나 크기 또는 두께를 확인하고 다시 시도해 보십시오."), + "No pad can be generated for this model with the current configuration": (406, "현재 설정으로는 이 모델에 대해 패드를 생성할 수 없습니다."), + "There are unprintable objects. Try to adjust support settings to make the objects printable.": (407, "인쇄할 수 없는 객체가 있습니다. 객체를 인쇄 가능하게 만들기 위해 지지대 설정을 조정해 보십시오.") + } + + for pattern, (code, message) in error_patterns.items(): + if pattern in error_code: + return code, message + + # 기본 에러 메시지 + return 400, "모델 슬라이스에 실패했습니다." + +@app.route('/slice', methods=['POST']) +def slice_model(): + global error_code + upload_dir = '/home/gds/printer/stl' + if not os.path.exists(upload_dir): + os.makedirs(upload_dir) + # 1. file 없을 시 에러 발생 + file = request.files.get('file') + if not file: + # STL 파일을 저장할 경로 설정 + #2. file이 없어도 was에서 저장시킨 원래 파일명이 있을시 + if 'orignlFileNm' in request.form and request.form['orignlFileNm']: + file_path = os.path.join(upload_dir, request.form['orignlFileNm']) + #3. 저장 경로 + 파일명이 존재하지 않을 시 + if not os.path.exists(file_path): + app.logger.error('No file in filepath') + return jsonify({'err_code': '200','err_title':'경로상 파일 존재하지 않음','err_msg':'파일이 현재 경로 상에 존재하지 않습니다(/home/gds/printer)'}) + else: + app.logger.error('No file part') + return jsonify({'err_code': '100','err_title':'업로드 파일 없음','err_msg':'업로드될 파일이 존재하지 않습니다.'}) + else: + file_extension = os.path.splitext(file.filename)[1].lower() + if file_extension != '.stl': + app.logger.error('Invalid file type: %s', file_extension) + return jsonify({'err_code': '300','err_title':'확장자가 다름','err_msg':'STL 파일만 업로드 가능합니다.'}) + + file_path = os.path.join(upload_dir, file.filename) + file.save(file_path) + app.logger.debug('File saved to %s', file_path) + + #form으로 부터 dictionary 형태로 가지고 옴 + options = request.form.to_dict() + + keys_to_remove = ['options_select_printer','options_select_filament', 'preset-options','wipe-tower-adjustment','menuId','orId','prId','atchFileId1','pageIndex','_csrf','orignlFileNm','atchFileId'] + for key in keys_to_remove: + if key in options: + del options[key] + + options['filament-colour'] = '"'+options['filament-colour']+'"' + options['fill-density'] = options['fill-density'] + "%" + + # 값이 "on"인 항목을 ""로 변경 + for key, value in options.items(): + if value == 'on' or value == 'true' or value == 'false' : + options[key] = '' + + #start-gcode, end-gcode 추가 + options['start-gcode'] = f"'{start_gcode}'" + options['end-gcode'] = f"'{end_gcode}'" + + # PrusaSlicer를 사용하여 STL 파일 슬라이스 + output_dir = '/home/gds/printer/gcode/' + if not os.path.exists(output_dir): + os.makedirs(output_dir) + + success = slice_stl(file_path, output_dir, options) + + if success: + # G-code 파일 경로 + if not file: + gcode_file_path = os.path.join(output_dir,os.path.splitext(request.form['orignlFileNm'])[0]+ '.gcode') + return jsonify({'gcode_file_path': gcode_file_path}) + else: + gcode_file_path = os.path.join(output_dir, os.path.splitext(file.filename)[0] + '.gcode') + return jsonify({'gcode_file_path': gcode_file_path}) + else: + error_code, error_message = parse_slicing_error(error_code) + return jsonify({'err_code': error_code,'err_title':'슬라이스 에러','err_msg': error_message}) + +@app.route('/getGCodeFile', methods=['GET']) +def get_gcode_file(): + gcode_file_path = request.args.get('gcodeFilePath') + if not gcode_file_path: + return jsonify({'error': 'Missing gcode_file_path parameter'}) + + try: + with open(gcode_file_path, 'r') as file: + gcode_string = file.read() + + return gcode_string + except FileNotFoundError: + return jsonify({'error': 'File not found'}) + +@app.route('/getPrusaConfig', methods=['GET']) +def get_prusa_config(): + config = { + 'printer1': { + 'url': os.getenv('PRUSA_PRINTER1_API_URL'), + 'api_key': os.getenv('PRUSA_PRINTER1_API_KEY') + }, + 'printer2': { + 'url': os.getenv('PRUSA_PRINTER2_API_URL'), + 'api_key': os.getenv('PRUSA_PRINTER2_API_KEY') + } + } + return jsonify(config) + +@app.route('/proxy', methods=['GET', 'POST', 'PUT', 'DELETE']) +def proxy_prusa_link(): + try: + # 요청 URL과 파라미터 설정 + url = request.args.get('url') + if not url: + return Response("URL is required", status=400) + + # PrusaLink에 보낼 요청 설정 + headers = {key: value for key, value in request.headers.items() if key != 'Host'} + response = requests.request( + method=request.method, + url=url, + headers=headers, + data=request.get_data(), + cookies=request.cookies, + stream=True # 스트리밍 응답 처리 + ) + + # PrusaLink에서 받은 스트리밍 응답을 클라이언트에 전달 + def generate(): + for chunk in response.iter_content(chunk_size=8192): + yield chunk + + proxy_response = Response(stream_with_context(generate()), status=response.status_code) + for key, value in response.headers.items(): + if key.lower() != 'content-encoding' and key.lower() != 'transfer-encoding': + proxy_response.headers[key] = value + + return proxy_response + except Exception as e: + return Response(f"An error occurred: {str(e)}", status=500) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=3000, debug=True) \ No newline at end of file diff --git a/1_infrastructure/docker/docker_3dp/printer/requirements.txt b/1_infrastructure/docker/docker_3dp/printer/requirements.txt new file mode 100644 index 0000000..77b8482 --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/requirements.txt @@ -0,0 +1,4 @@ +Flask +Flask-Cors +python-dotenv +requests \ No newline at end of file diff --git a/1_infrastructure/docker/docker_3dp/printer/slicer_test.py b/1_infrastructure/docker/docker_3dp/printer/slicer_test.py new file mode 100644 index 0000000..8982145 --- /dev/null +++ b/1_infrastructure/docker/docker_3dp/printer/slicer_test.py @@ -0,0 +1,337 @@ +import subprocess + +def slice_stl(file_path, output_dir, options=None): + """ + STL 파일을 PrusaSlicer를 사용하여 슬라이스하는 함수 + """ + + command = [ + 'PrusaSlicer', '-g' + ] + + # 옵션 추가 + for key, value in options.items(): + command.extend([f'--{key}', value]) + + # 파일 경로 추가 + command.append(' '+file_path) + + # 출력 디렉토리는 PrusaSlicer가 인식할 수 있는 형식으로 설정 + command.extend(['-o', output_dir]) + + try: + result = subprocess.run(' '.join(command), shell=True, capture_output=True, text=True, check=True) + print("PrusaSlicer output:", result.stdout) + return True + except subprocess.CalledProcessError as e: + print("PrusaSlicer error:", e.stderr) + return False + +# STL 파일 경로 및 출력 디렉토리 설정 +stl_file = '/home/gds/printer/stl/A30_3D_Flexi_Dragon.stl' +output_directory = '/home/gds/printer/gcode' + +start_gcode = """ +M17 +M862.1 P[nozzle_diameter] +M862.3 P "MK4" +M862.5 P2 +M862.6 P "Input shaper" +M115 U6.0.1+14848 +M555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} +W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))} +G90 +M83 +M140 S[first_layer_bed_temperature] + +{if filament_notes[0]=~/.*HT_MBL10.*/} +M104 T0 S{first_layer_temperature[0] - 10} +M109 T0 R{first_layer_temperature[0] - 10} +{endif} + +{if filament_type[0] == "PC" or filament_type[0] == "PA"} +M104 T0 S{first_layer_temperature[0] - 25} +M109 T0 R{first_layer_temperature[0] - 25} +{endif} + +{if filament_type[0] == "FLEX"} +M104 T0 S210 +M109 T0 R210 +{endif} + +{if filament_type[0]=~/.*PET.*/} +M104 T0 S175 +M109 T0 R175 +{endif} + +{if not (filament_notes[0]=~/.*HT_MBL10.*/ or filament_type[0] == "PC" or filament_type[0] == "PA" or filament_type[0] == "FLEX" or filament_type[0]=~/.*PET.*/)} +M104 T0 S170 +M109 T0 R170 +{endif} + +M84 E +G28 +G1 X{10 + 32} Y-4 Z5 F4800 +M302 S160 +{if filament_type[initial_tool]=="FLEX"} +G1 E-4 F2400 +{else} +G1 E-2 F2400 +{endif} +M84 E +G29 P9 X10 Y-4 W32 H4 +{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif} +G0 Z40 F10000 +M190 S[first_layer_bed_temperature] +M107 +M84 E +G29 P1 +G29 P1 X0 Y0 W50 H20 C +G29 P3.2 +G29 P3.13 +G29 A +M104 S{first_layer_temperature[0]} +G0 X0 Y-4 Z15 F4800 +M109 S{first_layer_temperature[0]} +G92 E0 +M569 S0 E +G92 E0 +G1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 +G0 E7 X15 Z0.2 F500 +G0 X25 E4 F500 +G0 X35 E4 F650 +G0 X45 E4 F800 +G0 X{45 + 3} Z{0.05} F{8000} +G0 X{45 + 3 * 2} Z0.2 F{8000} +G92 E0 +M221 S100 +""" + +end_gcode = """ +{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720{endif} +M104 S0 +M140 S0 +M107 +G1 X241 Y170 F3600 +{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300{endif} +G4 +M572 S0 +M593 X T2 F0 +M593 Y T2 F0 +M84 X Y E +""" + +# PrusaSlicer 슬라이스 옵션 설정 +options = { + 'start-gcode': f"'{start_gcode}'", + 'end-gcode': f"'{end_gcode}'", + 'layer-height': '0.1', + 'first-layer-height': '0.2', + 'perimeters': '3', + 'top-solid-layers': '8', + 'bottom-solid-layers': '6', + 'top-solid-min-thickness': '0.7', + 'bottom-solid-min-thickness': '0.5', + 'extra-perimeters': '', + 'extra-perimeters-on-overhangs': '', + 'avoid-crossing-perimeters': '', + 'avoid-crossing-perimeters-max-detour': '1', + 'thick-bridges': '', + 'overhangs': '', + 'seam-position': 'aligned', + 'staggered-inner-seams': '', + 'external-perimeters-first': '', + 'gap-fill-enabled': '', + 'perimeter-generator': 'arachne', + 'fuzzy-skin': 'none', + 'fuzzy-skin-thickness': '0.3', + 'fuzzy-skin-point-dist': '0.8', + 'fill-density': '15%', + 'fill-pattern': 'grid', + 'infill-anchor': '2', + 'infill-anchor-max': '12', + 'top-fill-pattern': 'monotoniclines', + 'bottom-fill-pattern': 'monotoniclines', + 'ironing': '', + 'ironing-type': 'top', + 'ironing-flowrate': '15', + 'ironing-spacing': '0.1', + 'infill-every-layers': '1', + 'solid-infill-every-layers': '0', + 'fill-angle': '45', + 'solid-infill-below-area': '0', + 'bridge-angle': '0', + 'only-retract-when-crossing-perimeters': '', + 'infill-first': '', + 'skirts': '1', + 'skirt-distance': '6', + 'skirt-height': '1', + 'draft-shield': 'limited', + 'min-skirt-length': '4', + 'brim-type': 'outer_only', + 'brim-width': '0', + 'brim-separation': '0.1', + 'support-material': '', + 'support-material-auto': '', + 'support-material-threshold': '40', + 'support-material-enforce-layers': '0', + 'raft-first-layer-density': '80', + 'raft-first-layer-expansion': '3.5', + 'raft-layers': '0', + 'raft-contact-distance': '0.15', + 'raft-expansion': '1.5', + 'support-material-style': 'snug', + 'support-material-contact-distance': '0.17', + 'support-material-bottom-contact-distance': '0.17', + 'support-material-pattern': 'rectilinear', + 'support-material-with-sheath': '', + 'support-material-spacing': '2', + 'support-material-angle': '0', + 'support-material-closing-radius': '2', + 'support-material-interface-layers': '5', + 'support-material-bottom-interface-layers': '5', + 'support-material-interface-pattern': 'auto', + 'support-material-interface-spacing': '0.2', + 'support-material-interface-contact-loops': '', + 'support-material-buildplate-only': '', + 'support-material-xy-spacing': '0.8', + 'dont-support-bridges': '', + 'support-material-synchronize-layers': '', + 'support-tree-angle': '40', + 'support-tree-angle-slow': '25', + 'support-tree-branch-diameter': '2', + 'support-tree-branch-diameter-angle': '5', + 'support-tree-branch-diameter-double-wall': '3', + 'support-tree-tip-diameter': '0.8', + 'support-tree-branch-distance': '1', + 'support-tree-top-rate': '30', + 'perimeter-speed': '140', + 'small-perimeter-speed': '140', + 'external-perimeter-speed': '140', + 'infill-speed': '140', + 'solid-infill-speed': '200', + 'top-solid-infill-speed': '100', + 'support-material-speed': '120', + 'support-material-interface-speed': '50', + 'bridge-speed': '40', + 'gap-fill-speed': '120', + 'ironing-speed': '15', + 'enable-dynamic-overhang-speeds': '', + 'overhang-speed-0': '15', + 'overhang-speed-1': '25', + 'overhang-speed-2': '30', + 'overhang-speed-3': '80', + 'travel-speed': '300', + 'travel-speed-z': '12', + 'first-layer-speed': '40', + 'first-layer-speed-over-raft': '150', + 'external-perimeter-acceleration': '2000', + 'perimeter-acceleration': '2500', + 'top-solid-infill-acceleration': '1500', + 'solid-infill-acceleration': '3500', + 'infill-acceleration': '4000', + 'bridge-acceleration': '3500', + 'first-layer-acceleration': '500', + 'wipe-tower-acceleration': '0', + 'travel-acceleration': '4000', + 'default-acceleration': '3000', + 'max-print-speed': '200', + 'max-volumetric-speed': '0', + 'max-volumetric-extrusion-rate-slope-positive': '0', + 'max-volumetric-extrusion-rate-slope-negative': '0', + 'perimeter-extruder': '1', + 'infill-extruder': '1', + 'solid-infill-extruder': '1', + 'support-material-extruder': '0', + 'support-material-interface-extruder': '0', + 'ooze-prevention': '', + 'standby-temperature-delta': '-5', + 'wipe-tower-x': '180', + 'wipe-tower-y': '140', + 'wipe-tower-width': '60', + 'wipe-tower-rotation-angle': '0', + 'wipe-tower-brim-width': '2', + 'wipe-tower-bridging': '10', + 'wipe-tower-cone-angle': '25', + 'wipe-tower-extra-spacing': '110', + 'wipe-tower-extra-flow': '250', + 'wipe-tower-no-sparse-layers': '', + 'interface-shells': '', + 'mmu-segmented-region-max-width': '0', + 'mmu-segmented-region-interlocking-depth': '0', + 'extrusion-width': '0.45', + 'first-layer-extrusion-width': '0.5', + 'perimeter-extrusion-width': '0.45', + 'external-perimeter-extrusion-width': '0.45', + 'infill-extrusion-width': '0.45', + 'solid-infill-extrusion-width': '0.45', + 'top-infill-extrusion-width': '0.4', + 'support-material-extrusion-width': '0.39', + 'infill-overlap': '0.15', + 'bridge-flow-ratio': '1', + 'slice-closing-radius': '0.049', + 'slicing-mode': 'regular', + 'resolution': '0', + 'gcode-resolution': '0.008', + 'arc-fitting': 'emit_center', + 'xy-size-compensation': '0', + 'elefant-foot-compensation': '0.2', + 'wall-transition-angle': '10', + 'wall-transition-filter-deviation': '25%', + 'wall-transition-length': '100%', + 'wall-distribution-count': '1', + 'min-bead-width': '85%', + 'min-feature-size': '25%', + 'filament-colour': '"#29B2B2"', + 'filament-diameter': '1.75', + 'extrusion-multiplier': '1', + 'filament-density': '1.24', + 'filament-cost': '25.4', + 'filament-spool-weight': '0', + 'idle-temperature': '70', + 'first-layer-temperature': '230', + 'temperature': '220', + 'first-layer-bed-temperature': '60', + 'bed-temperature': '60', + 'fan-always-on': '', + 'cooling': '', + 'min-fan-speed': '100', + 'max-fan-speed': '100', + 'bridge-fan-speed': '100', + 'disable-fan-first-layers': '1', + 'full-fan-speed-layer': '0', + 'enable-dynamic-fan-speeds': '', + 'overhang-fan-speed-0': '0', + 'overhang-fan-speed-1': '0', + 'overhang-fan-speed-2': '0', + 'overhang-fan-speed-3': '0', + 'fan-below-layer-time': '100', + 'slowdown-below-layer-time': '8', + 'min-print-speed': '15', + 'filament-max-volumetric-speed': '15', + 'filament-minimal-purge-on-wipe-tower': '15', + 'filament-loading-speed-start': '50', + 'filament-loading-speed': '10', + 'filament-unloading-speed-start': '100', + 'filament-unloading-speed': '100', + 'filament-load-time': '10.5', + 'filament-unload-time': '8.5', + 'filament-toolchange-delay': '0', + 'filament-cooling-moves': '2', + 'filament-cooling-initial-speed': '10', + 'filament-cooling-final-speed': '3.5', + 'filament-stamping-loading-speed': '29', + 'filament-stamping-distance': '45', + 'filament-purge-multiplier': '81.25', + 'filament-multitool-ramming': '', + 'filament-multitool-ramming-volume': '10', + 'filament-multitool-ramming-flow': '10', + } + +# STL 파일 슬라이스 실행 +success = slice_stl(stl_file, output_directory,options=options) + +if success: + print("STL 파일을 성공적으로 슬라이스했습니다.") +else: + print("STL 파일 슬라이스 중 오류가 발생했습니다.") \ No newline at end of file diff --git a/docker/docker_3dp/rebuild_docker.sh b/1_infrastructure/docker/docker_3dp/rebuild_docker.sh similarity index 100% rename from docker/docker_3dp/rebuild_docker.sh rename to 1_infrastructure/docker/docker_3dp/rebuild_docker.sh diff --git a/docker/docker_3dp/setting.sql b/1_infrastructure/docker/docker_3dp/setting.sql similarity index 100% rename from docker/docker_3dp/setting.sql rename to 1_infrastructure/docker/docker_3dp/setting.sql diff --git a/docker/docker_3dp/sites-available/default b/1_infrastructure/docker/docker_3dp/sites-available/default similarity index 100% rename from docker/docker_3dp/sites-available/default rename to 1_infrastructure/docker/docker_3dp/sites-available/default diff --git a/docker/docker_3dp/sites-available/nextcloud.conf b/1_infrastructure/docker/docker_3dp/sites-available/nextcloud.conf similarity index 100% rename from docker/docker_3dp/sites-available/nextcloud.conf rename to 1_infrastructure/docker/docker_3dp/sites-available/nextcloud.conf diff --git a/docker/docker_3dp/start_service.sh b/1_infrastructure/docker/docker_3dp/start_service.sh similarity index 100% rename from docker/docker_3dp/start_service.sh rename to 1_infrastructure/docker/docker_3dp/start_service.sh diff --git a/docker/docker_all/Dockerfile b/1_infrastructure/docker/docker_all/Dockerfile similarity index 100% rename from docker/docker_all/Dockerfile rename to 1_infrastructure/docker/docker_all/Dockerfile diff --git a/docker/docker_all/README.md b/1_infrastructure/docker/docker_all/README.md similarity index 100% rename from docker/docker_all/README.md rename to 1_infrastructure/docker/docker_all/README.md diff --git a/docker/docker_all/docker-compose.yml b/1_infrastructure/docker/docker_all/docker-compose.yml similarity index 100% rename from docker/docker_all/docker-compose.yml rename to 1_infrastructure/docker/docker_all/docker-compose.yml diff --git a/docker/docker_all/rebuild_docker.sh b/1_infrastructure/docker/docker_all/rebuild_docker.sh similarity index 100% rename from docker/docker_all/rebuild_docker.sh rename to 1_infrastructure/docker/docker_all/rebuild_docker.sh diff --git a/docker/docker_all/setting.sql b/1_infrastructure/docker/docker_all/setting.sql similarity index 100% rename from docker/docker_all/setting.sql rename to 1_infrastructure/docker/docker_all/setting.sql diff --git a/docker/docker_all/start_service.sh b/1_infrastructure/docker/docker_all/start_service.sh similarity index 100% rename from docker/docker_all/start_service.sh rename to 1_infrastructure/docker/docker_all/start_service.sh diff --git a/docker/docker_centos/Dockerfile b/1_infrastructure/docker/docker_centos/Dockerfile similarity index 100% rename from docker/docker_centos/Dockerfile rename to 1_infrastructure/docker/docker_centos/Dockerfile diff --git a/docker/docker_centos/Dockerfile_centos b/1_infrastructure/docker/docker_centos/Dockerfile_centos similarity index 100% rename from docker/docker_centos/Dockerfile_centos rename to 1_infrastructure/docker/docker_centos/Dockerfile_centos diff --git a/docker/docker_centos/README.md b/1_infrastructure/docker/docker_centos/README.md similarity index 100% rename from docker/docker_centos/README.md rename to 1_infrastructure/docker/docker_centos/README.md diff --git a/docker/docker_centos/docker-compose-centos.yml b/1_infrastructure/docker/docker_centos/docker-compose-centos.yml similarity index 100% rename from docker/docker_centos/docker-compose-centos.yml rename to 1_infrastructure/docker/docker_centos/docker-compose-centos.yml diff --git a/docker/docker_centos/docker-compose.yml b/1_infrastructure/docker/docker_centos/docker-compose.yml similarity index 100% rename from docker/docker_centos/docker-compose.yml rename to 1_infrastructure/docker/docker_centos/docker-compose.yml diff --git a/docker/docker_centos/httpd.conf b/1_infrastructure/docker/docker_centos/httpd.conf similarity index 100% rename from docker/docker_centos/httpd.conf rename to 1_infrastructure/docker/docker_centos/httpd.conf diff --git a/docker/docker_centos/my.cnf b/1_infrastructure/docker/docker_centos/my.cnf similarity index 100% rename from docker/docker_centos/my.cnf rename to 1_infrastructure/docker/docker_centos/my.cnf diff --git a/docker/docker_centos/php.ini b/1_infrastructure/docker/docker_centos/php.ini similarity index 100% rename from docker/docker_centos/php.ini rename to 1_infrastructure/docker/docker_centos/php.ini diff --git a/docker/docker_centos/rebuild_docker.sh b/1_infrastructure/docker/docker_centos/rebuild_docker.sh similarity index 100% rename from docker/docker_centos/rebuild_docker.sh rename to 1_infrastructure/docker/docker_centos/rebuild_docker.sh diff --git a/docker/docker_centos/setting.sql b/1_infrastructure/docker/docker_centos/setting.sql similarity index 100% rename from docker/docker_centos/setting.sql rename to 1_infrastructure/docker/docker_centos/setting.sql diff --git a/docker/docker_centos/sshd_config b/1_infrastructure/docker/docker_centos/sshd_config similarity index 100% rename from docker/docker_centos/sshd_config rename to 1_infrastructure/docker/docker_centos/sshd_config diff --git a/docker/docker_centos/start_service.sh b/1_infrastructure/docker/docker_centos/start_service.sh similarity index 100% rename from docker/docker_centos/start_service.sh rename to 1_infrastructure/docker/docker_centos/start_service.sh diff --git a/docker/docker_centos_desktop/Dockerfile b/1_infrastructure/docker/docker_centos_desktop/Dockerfile similarity index 100% rename from docker/docker_centos_desktop/Dockerfile rename to 1_infrastructure/docker/docker_centos_desktop/Dockerfile diff --git a/docker/docker_centos_desktop/README.md b/1_infrastructure/docker/docker_centos_desktop/README.md similarity index 100% rename from docker/docker_centos_desktop/README.md rename to 1_infrastructure/docker/docker_centos_desktop/README.md diff --git a/docker/docker_centos_desktop/docker-compose.yml b/1_infrastructure/docker/docker_centos_desktop/docker-compose.yml similarity index 100% rename from docker/docker_centos_desktop/docker-compose.yml rename to 1_infrastructure/docker/docker_centos_desktop/docker-compose.yml diff --git a/docker/docker_centos_desktop/httpd.conf b/1_infrastructure/docker/docker_centos_desktop/httpd.conf similarity index 100% rename from docker/docker_centos_desktop/httpd.conf rename to 1_infrastructure/docker/docker_centos_desktop/httpd.conf diff --git a/docker/docker_centos_desktop/my.cnf b/1_infrastructure/docker/docker_centos_desktop/my.cnf similarity index 100% rename from docker/docker_centos_desktop/my.cnf rename to 1_infrastructure/docker/docker_centos_desktop/my.cnf diff --git a/docker/docker_centos_desktop/php.ini b/1_infrastructure/docker/docker_centos_desktop/php.ini similarity index 100% rename from docker/docker_centos_desktop/php.ini rename to 1_infrastructure/docker/docker_centos_desktop/php.ini diff --git a/docker/docker_centos_desktop/rebuild_docker.sh b/1_infrastructure/docker/docker_centos_desktop/rebuild_docker.sh similarity index 100% rename from docker/docker_centos_desktop/rebuild_docker.sh rename to 1_infrastructure/docker/docker_centos_desktop/rebuild_docker.sh diff --git a/docker/docker_centos_desktop/setting.sql b/1_infrastructure/docker/docker_centos_desktop/setting.sql similarity index 100% rename from docker/docker_centos_desktop/setting.sql rename to 1_infrastructure/docker/docker_centos_desktop/setting.sql diff --git a/docker/docker_centos_desktop/sshd_config b/1_infrastructure/docker/docker_centos_desktop/sshd_config similarity index 100% rename from docker/docker_centos_desktop/sshd_config rename to 1_infrastructure/docker/docker_centos_desktop/sshd_config diff --git a/docker/docker_centos_desktop/ssl.conf b/1_infrastructure/docker/docker_centos_desktop/ssl.conf similarity index 100% rename from docker/docker_centos_desktop/ssl.conf rename to 1_infrastructure/docker/docker_centos_desktop/ssl.conf diff --git a/docker/docker_centos_desktop/start_service.sh b/1_infrastructure/docker/docker_centos_desktop/start_service.sh similarity index 100% rename from docker/docker_centos_desktop/start_service.sh rename to 1_infrastructure/docker/docker_centos_desktop/start_service.sh diff --git a/docker/docker_centos_desktop/test-installation.pl b/1_infrastructure/docker/docker_centos_desktop/test-installation.pl similarity index 100% rename from docker/docker_centos_desktop/test-installation.pl rename to 1_infrastructure/docker/docker_centos_desktop/test-installation.pl diff --git a/docker/docker_crowling/Dockerfile b/1_infrastructure/docker/docker_crowling/Dockerfile similarity index 100% rename from docker/docker_crowling/Dockerfile rename to 1_infrastructure/docker/docker_crowling/Dockerfile diff --git a/docker/docker_crowling/README.md b/1_infrastructure/docker/docker_crowling/README.md similarity index 100% rename from docker/docker_crowling/README.md rename to 1_infrastructure/docker/docker_crowling/README.md diff --git a/docker/docker_crowling/docker-compose.yml b/1_infrastructure/docker/docker_crowling/docker-compose.yml similarity index 100% rename from docker/docker_crowling/docker-compose.yml rename to 1_infrastructure/docker/docker_crowling/docker-compose.yml diff --git a/docker/docker_crowling/rebuild.sh b/1_infrastructure/docker/docker_crowling/rebuild.sh similarity index 100% rename from docker/docker_crowling/rebuild.sh rename to 1_infrastructure/docker/docker_crowling/rebuild.sh diff --git a/docker/docker_db/Dockerfile b/1_infrastructure/docker/docker_db/Dockerfile similarity index 100% rename from docker/docker_db/Dockerfile rename to 1_infrastructure/docker/docker_db/Dockerfile diff --git a/docker/docker_db/README.md b/1_infrastructure/docker/docker_db/README.md similarity index 100% rename from docker/docker_db/README.md rename to 1_infrastructure/docker/docker_db/README.md diff --git a/docker/docker_db/docker-compose.yml b/1_infrastructure/docker/docker_db/docker-compose.yml similarity index 100% rename from docker/docker_db/docker-compose.yml rename to 1_infrastructure/docker/docker_db/docker-compose.yml diff --git a/docker/docker_db/make_root_remote_host.sh b/1_infrastructure/docker/docker_db/make_root_remote_host.sh similarity index 100% rename from docker/docker_db/make_root_remote_host.sh rename to 1_infrastructure/docker/docker_db/make_root_remote_host.sh diff --git a/docker/docker_db/rebuild.sh b/1_infrastructure/docker/docker_db/rebuild.sh similarity index 100% rename from docker/docker_db/rebuild.sh rename to 1_infrastructure/docker/docker_db/rebuild.sh diff --git a/docker/docker_db/setting.sql b/1_infrastructure/docker/docker_db/setting.sql similarity index 100% rename from docker/docker_db/setting.sql rename to 1_infrastructure/docker/docker_db/setting.sql diff --git a/docker/docker_db_new/Dockerfile b/1_infrastructure/docker/docker_db_new/Dockerfile similarity index 100% rename from docker/docker_db_new/Dockerfile rename to 1_infrastructure/docker/docker_db_new/Dockerfile diff --git a/docker/docker_db_new/README.md b/1_infrastructure/docker/docker_db_new/README.md similarity index 100% rename from docker/docker_db_new/README.md rename to 1_infrastructure/docker/docker_db_new/README.md diff --git a/docker/docker_db_new/docker-compose.yml b/1_infrastructure/docker/docker_db_new/docker-compose.yml similarity index 100% rename from docker/docker_db_new/docker-compose.yml rename to 1_infrastructure/docker/docker_db_new/docker-compose.yml diff --git a/docker/docker_db_new/make_root_remote_host.sh b/1_infrastructure/docker/docker_db_new/make_root_remote_host.sh similarity index 100% rename from docker/docker_db_new/make_root_remote_host.sh rename to 1_infrastructure/docker/docker_db_new/make_root_remote_host.sh diff --git a/docker/docker_db_new/rebuild.sh b/1_infrastructure/docker/docker_db_new/rebuild.sh similarity index 100% rename from docker/docker_db_new/rebuild.sh rename to 1_infrastructure/docker/docker_db_new/rebuild.sh diff --git a/docker/docker_db_new/setting.sql b/1_infrastructure/docker/docker_db_new/setting.sql similarity index 100% rename from docker/docker_db_new/setting.sql rename to 1_infrastructure/docker/docker_db_new/setting.sql diff --git a/1_infrastructure/docker/docker_fastapi/.gitignore b/1_infrastructure/docker/docker_fastapi/.gitignore new file mode 100644 index 0000000..45b4e55 --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi/.gitignore @@ -0,0 +1,79 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# Virtual Environment +venv/ +env/ +ENV/ +env.bak/ +venv.bak/ + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# Logs +logs/ +*.log + +# Database +*.db +*.sqlite3 + +# Cache +.pytest_cache/ +.cache/ + +# Chrome/Selenium +chromedriver +*.deb + +# OS +.DS_Store +Thumbs.db + +# Docker +.dockerignore + +# Temporary files +tmp/ +temp/ +*.tmp + +# Jupyter Notebooks +.ipynb_checkpoints + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Backup files +backup_*/ +*.backup \ No newline at end of file diff --git a/1_infrastructure/docker/docker_fastapi/Dockerfile b/1_infrastructure/docker/docker_fastapi/Dockerfile new file mode 100644 index 0000000..d0110c4 --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi/Dockerfile @@ -0,0 +1,83 @@ +FROM ubuntu:22.04 + +# 관련 패키지 설치 +RUN apt-get update && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8 vim gcc g++ python3.10 python3-pip locales + +RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 +ENV LC_ALL ko_KR.UTF-8 +ENV PYTHONIOENCODING=utf-8 + +# jdk 설치 +RUN apt-get install -y openjdk-8-jdk + +# eunjeon 패키지 따로 설치 +RUN pip install eunjeon + +# jdk 설정 +RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile && \ + echo "export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar" >> /etc/profile && \ + echo "export LANG=ko_KR.UTF-8" >> /etc/profile + +WORKDIR /fastapi +# 이미지 내부에 필요한 파일을 복사 +COPY ./fastapi . + +RUN apt-get update && \ + apt-get install -y \ + wget \ + curl \ + gnupg \ + unzip \ + jq \ + libu2f-udev \ + libappindicator3-1 \ + libasound2 \ + libatk-bridge2.0-0 \ + libatk1.0-0 \ + libcups2 \ + libdbus-1-3 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libx11-xcb1 \ + libxcomposite1 \ + libxcursor1 \ + libxdamage1 \ + libxfixes3 \ + libxi6 \ + libxrandr2 \ + libxss1 \ + libxtst6 \ + xdg-utils \ + fonts-liberation \ + libgbm1 \ + libvulkan1 \ + && apt-get clean + +# Chrome과 Chromedriver 최신 안정 버전 설치 +RUN LATEST_STABLE_JSON=$(wget -qO- https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions-with-downloads.json) && \ + CHROME_URL=$(echo $LATEST_STABLE_JSON | jq -r '.channels.Stable.downloads.chrome[] | select(.platform=="linux64") | .url') && \ + DRIVER_URL=$(echo $LATEST_STABLE_JSON | jq -r '.channels.Stable.downloads.chromedriver[] | select(.platform=="linux64") | .url') && \ + wget -O chrome-linux64.zip $CHROME_URL && \ + wget -O chromedriver-linux64.zip $DRIVER_URL && \ + unzip chrome-linux64.zip && \ + unzip chromedriver-linux64.zip && \ + apt-get update && \ + while read pkg; do apt-get satisfy -y --no-install-recommends "${pkg}"; done < chrome-linux64/deb.deps && \ + mv chrome-linux64/chrome /usr/local/bin/google-chrome && \ + mv chromedriver-linux64/chromedriver /usr/local/bin/chromedriver && \ + chmod +x /usr/local/bin/google-chrome && \ + chmod +x /usr/local/bin/chromedriver && \ + rm chrome-linux64.zip chromedriver-linux64.zip && \ + rm -rf chrome-linux64 chromedriver-linux64 + +# 크롬 실행 확인 +RUN google-chrome --version +RUN chromedriver --version + +RUN mkdir -p /dev/shm && chmod 1777 /dev/shm + +RUN pip install --no-cache-dir -r requirements.txt + +#CMD +CMD ["uvicorn", "app.server:app", "--host", "0.0.0.0", "--port", "8000", "--log-level", "trace"] diff --git a/1_infrastructure/docker/docker_fastapi/README.md b/1_infrastructure/docker/docker_fastapi/README.md new file mode 100644 index 0000000..71a4658 --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi/README.md @@ -0,0 +1,275 @@ +# RECLAR (SABG) 크롤링 & 감성분석 시스템 🚀 + +## 📋 프로젝트 개요 + +RECLAR은 제품별 마케팅 전략 데이터 확보 및 상품개선을 위한 AI 감성분석 시스템입니다. 스마트스토어와 쿠팡에서 상품 정보와 리뷰를 수집하고, 이를 분석하여 마케팅 인사이트를 제공합니다. + +### 🎯 주요 기능 + +- **🔄 동적 마켓 크롤링**: 확장 가능한 아키텍처로 새로운 마켓을 쉽게 추가 +- **📊 실시간 성능 모니터링**: 크롤링 성능을 실시간으로 추적 및 분석 +- **🤖 AI 감성 분석**: 수집된 리뷰 데이터의 감성 분석 +- **📝 구조화된 로깅**: 마켓별 분리된 로그 관리 및 메트릭 수집 +- **🔗 연관 분석**: 상품 및 리뷰 데이터의 연관성 분석 + +--- + +## 🏗 프로젝트 구조 (정리됨) + +``` +docker_fastapi/ +├── 📁 fastapi/ # 메인 FastAPI 애플리케이션 +│ ├── 📁 app/ # 애플리케이션 진입점 +│ ├── 📁 api/ # API 라우터 +│ │ ├── 📁 analysis/ # 데이터 분석 API +│ │ ├── 📁 auth/ # 인증 API +│ │ ├── 📁 crawling/ # 크롤링 API +│ │ └── 📁 monitoring/ # 모니터링 API +│ ├── 📁 core/ # 핵심 비즈니스 로직 +│ │ ├── 📄 crawler_base.py # 공통 크롤링 베이스 클래스 +│ │ ├── 📄 crawler_factory.py # 크롤러 팩토리 패턴 +│ │ ├── 📁 crawlers/ # 마켓별 크롤러 +│ │ ├── 📁 exceptions/ # 예외 처리 +│ │ ├── 📁 middleware/ # 미들웨어 +│ │ └── 📁 utils/ # 유틸리티 +│ ├── 📁 config/ # 설정 파일 +│ │ └── 📁 parsing_rules/ # 파싱 규칙 +│ ├── 📁 databases/ # 데이터베이스 관련 +│ ├── 📁 ml/ # 머신러닝 모델 +│ │ └── 📁 sentiment/ # 감성 분석 +│ ├── 📁 tests/ # 테스트 파일 (정리됨) +│ │ ├── 📁 integration/ # 통합 테스트 +│ │ └── 📁 manual/ # 수동 테스트 +│ ├── 📁 logs/ # 로그 파일 (새로 생성) +│ │ ├── 📁 smartstore/ # 스마트스토어 로그 +│ │ ├── 📁 coupang/ # 쿠팡 로그 +│ │ └── 📁 metrics/ # 성능 메트릭 +│ └── 📁 docs/ # 문서 +├── 📁 assets/ # 바이너리 파일 (새로 생성) +│ └── 📁 chrome/ # Chrome 관련 파일 +│ ├── 📄 chromedriver # 이동됨 +│ └── 📄 google-chrome...deb # 이동됨 +├── 📁 scripts/ # 개발 스크립트 (새로 생성) +│ └── 📄 rebuild.sh # 이동됨 +├── 📁 backup_monitoring/ # 백업된 모니터링 폴더 +├── 📁 venv/ # 파이썬 가상환경 +├── 📄 docker-compose.yml # Docker 설정 +├── 📄 Dockerfile # Docker 이미지 설정 (업데이트됨) +└── 📄 README.md # 프로젝트 문서 (업데이트됨) +``` + +### 🔄 정리된 내용 + +1. **테스트 파일 정리**: + - 루트에 산재되어 있던 테스트 파일들을 `fastapi/tests/` 하위로 이동 + - `integration/` (통합 테스트)와 `manual/` (수동 테스트)로 분류 + +2. **바이너리 파일 정리**: + - Chrome 설치 파일과 chromedriver를 `assets/chrome/`으로 이동 + - Dockerfile에서 경로 업데이트 + +3. **스크립트 정리**: + - 개발 스크립트들을 `scripts/` 디렉토리로 이동 + +4. **로그 디렉토리 생성**: + - 마켓별 로그 관리를 위한 구조 생성 + +5. **중복 폴더 정리**: + - 루트의 `monitoring/` 폴더를 `backup_monitoring/`으로 백업 + +--- + +## 🚀 빠른 시작 + +### 1. 환경 설정 + +```bash +# 저장소 클론 +git clone +cd docker_fastapi + +# 가상환경 활성화 +source venv/bin/activate + +# FastAPI 의존성 설치 +cd fastapi +pip install -r requirements.txt +``` + +### 2. 서버 실행 + +```bash +# Docker Compose 사용 (권장) +docker-compose up -d + +# 또는 직접 실행 +cd fastapi +python main.py + +# 또는 uvicorn으로 실행 +uvicorn app.server:app --host 0.0.0.0 --port 8000 --reload +``` + +### 3. API 문서 확인 + +- **Swagger UI**: http://localhost:8000/docs +- **ReDoc**: http://localhost:8000/redoc + +--- + +## 📚 API 사용 가이드 + +### 🔄 동적 크롤링 API + +#### 지원 마켓 조회 +```bash +GET /crawling/markets +``` + +#### 상품 정보 크롤링 +```bash +GET /crawling/{market}/product?url={상품URL} + +# 예시 +GET /crawling/smartstore/product?url=https://smartstore.naver.com/... +GET /crawling/coupang/product?url=https://www.coupang.com/vp/products/... +``` + +#### 리뷰 정보 크롤링 +```bash +GET /crawling/{market}/reviews?url={상품URL} +``` + +### 📊 성능 모니터링 API + +#### 성능 요약 +```bash +GET /monitoring/performance/summary?market=smartstore +``` + +#### 종합 대시보드 +```bash +GET /monitoring/performance/dashboard?market=smartstore +``` + +#### 시스템 헬스 체크 +```bash +GET /monitoring/performance/health +``` + +--- + +## 🧪 테스트 + +### 테스트 실행 + +```bash +cd fastapi + +# 모든 테스트 실행 +pytest + +# 통합 테스트만 실행 +pytest tests/integration/ + +# 수동 테스트 (개별 실행) +python tests/manual/test_simple_manual.py + +# 특정 마커별 테스트 실행 +pytest -m unit # 유닛 테스트만 +pytest -m integration # 통합 테스트만 +pytest -m manual # 수동 테스트만 + +# 커버리지 포함 실행 +pytest --cov=core --cov-report=html +``` + +### 테스트 구조 + +``` +📁 fastapi/tests/ +├── 📁 integration/ # 통합 테스트 +│ ├── 📄 test_system.py +│ ├── 📄 test_monitoring_system.py +│ └── 📄 test_updated_crawler.py +├── 📁 manual/ # 수동 테스트 +│ ├── 📄 test_simple_manual.py +│ ├── 📄 test_korean_sentiment.py +│ ├── 📄 test_navigate_to_url.py +│ └── 📄 test_coupang_manual.py +├── 📄 test_crawler_base.py # 유닛 테스트 +├── 📄 test_rule_loader.py +├── 📄 test_crawler_factory.py +└── 📄 test_integration.py +``` + +--- + +## 📊 로깅 및 모니터링 + +### 로그 파일 구조 + +``` +📁 fastapi/logs/ +├── 📁 smartstore/ +│ ├── 📄 crawler.log # 일반 로그 +│ └── 📄 error.log # 에러 로그 +├── 📁 coupang/ +│ ├── 📄 crawler.log +│ └── 📄 error.log +└── 📁 metrics/ + ├── 📄 metrics_2024-01-15.jsonl # 일반 메트릭 + └── 📄 performance_2024-01-15.jsonl # 성능 메트릭 +``` + +### 로그 특징 + +- **마켓별 분리**: 각 마켓의 로그를 독립적으로 관리 +- **로그 회전**: 10MB 파일 크기 제한, 5개 백업 파일 유지 +- **구조화된 로깅**: JSON 형태로 분석 용이성 향상 +- **성능 메트릭**: 자동 수집 및 저장 + +--- + +## 🔧 개발 가이드 + +### 새로운 마켓 크롤러 추가 + +1. `fastapi/core/crawlers/` 디렉토리에 새 크롤러 파일 생성 +2. `BaseCrawler`를 상속받아 구현 +3. `fastapi/config/parsing_rules/`에 파싱 규칙 추가 +4. 자동으로 크롤러 팩토리에 등록됨 + +### 스크립트 실행 + +```bash +# 프로젝트 재빌드 +./scripts/rebuild.sh + +# 코드베이스 정리 (이미 실행됨) +./organize_structure.sh +``` + +--- + +## 🤝 기여하기 + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +--- + +## 📄 라이선스 + +This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. + +--- + +## ⚠️ 주의사항 + +- Chrome과 chromedriver는 호환되는 버전을 사용해야 합니다 +- 크롤링 시 해당 사이트의 robots.txt와 이용약관을 준수해야 합니다 +- 과도한 요청으로 인한 서버 부하를 방지하기 위해 적절한 딜레이를 설정하세요 diff --git a/1_infrastructure/docker/docker_fastapi/docker-compose.yml b/1_infrastructure/docker/docker_fastapi/docker-compose.yml new file mode 100644 index 0000000..2d5743d --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3' + +services: + server: + build: + context: . + dockerfile: Dockerfile + container_name: fastapi_server + network_mode: bridge + ports: + - "8000:8000" + volumes: + - ./fastapi:/fastapi + tty: true + stdin_open: true + restart: always diff --git a/1_infrastructure/docker/docker_fastapi_new/.gitignore b/1_infrastructure/docker/docker_fastapi_new/.gitignore new file mode 100644 index 0000000..fbce3df --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi_new/.gitignore @@ -0,0 +1,62 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual Environment +venv/ +env/ +ENV/ + +# IDE +.idea/ +.vscode/ +*.swp +*.swo + +# Docker +.docker/ + +# Logs +*.log + +# Local development +.env +.env.local +.env.*.local + +# System Files +.DS_Store +Thumbs.db + +# Project specific +*.deb +chromedriver +*.zip + +# Model files +*.h5 +*.h5.bak +*.pickle +*.pickle.bak +*.pkl +*.pt +*.onnx +*.bin \ No newline at end of file diff --git a/1_infrastructure/docker/docker_fastapi_new/Dockerfile b/1_infrastructure/docker/docker_fastapi_new/Dockerfile new file mode 100644 index 0000000..91b4209 --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi_new/Dockerfile @@ -0,0 +1,71 @@ +FROM ubuntu:22.04 + +# 관련 패키지 설치 +RUN apt-get update && apt-get install -y mecab libmecab-dev mecab-ipadic-utf8 vim gcc g++ python3.10 python3-pip locales + +RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8 +ENV LC_ALL ko_KR.UTF-8 +ENV PYTHONIOENCODING=utf-8 + +# jdk 설치 +RUN apt-get install -y openjdk-8-jdk + +# eunjeon 패키지 따로 설치 +RUN pip install eunjeon + +# jdk 설정 +RUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> /etc/profile && \ + echo "export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar" >> /etc/profile && \ + echo "export LANG=ko_KR.UTF-8" >> /etc/profile + +WORKDIR /fastapi_new +# 이미지 내부에 필요한 파일을 복사 +COPY ./fastapi_new . + +RUN apt-get update && \ + apt-get install -y \ + wget \ + curl \ + gnupg \ + jq \ + unzip \ + libu2f-udev \ + libappindicator3-1 \ + libasound2 \ + libatk-bridge2.0-0 \ + libatk1.0-0 \ + libcups2 \ + libdbus-1-3 \ + libgtk-3-0 \ + libnspr4 \ + libnss3 \ + libx11-xcb1 \ + libxcomposite1 \ + libxcursor1 \ + libxdamage1 \ + libxfixes3 \ + libxi6 \ + libxrandr2 \ + libxss1 \ + libxtst6 \ + xdg-utils \ + fonts-liberation \ + libgbm1 \ + libvulkan1 \ + && apt-get clean + +# 크롬 자동 설치 +RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - +RUN echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list +RUN apt-get update && apt-get install -y google-chrome-stable + +# 크롬 실행 확인 +RUN google-chrome --version + +RUN mkdir -p /dev/shm && chmod 1777 /dev/shm + +RUN pip install --no-cache-dir -r requirements.txt + +#CMD +CMD ["python3","main.py"] + diff --git a/1_infrastructure/docker/docker_fastapi_new/README.md b/1_infrastructure/docker/docker_fastapi_new/README.md new file mode 100644 index 0000000..086a8be --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi_new/README.md @@ -0,0 +1,71 @@ +# AI 감성 분석 및 크롤링 시스템 + +본 프로젝트는 마케팅 전략 수립 및 상품 개선을 위한 데이터 수집 및 AI 감성 분석 시스템입니다. Docker를 기반으로 패키징되어 있으며, FastAPI를 통해 API를 제공합니다. + +## 기술 아키텍처 + +시스템은 크게 데이터 수집(Crawling), 데이터 분석(Analysis), API 제공(Serving)의 3가지 핵심 기능으로 구성됩니다. + +- **`Dockerfile`**: `ubuntu:22.04`를 기반으로 하며, 애플리케이션 실행에 필요한 복잡한 환경을 구성합니다. + - **핵심 의존성**: Python 3.10, Java 8 JDK, Mecab (한국어 형태소 분석기), Google Chrome. + - Java JDK는 한국어 형태소 분석기 라이브러리인 `Eunjeon`의 의존성 해결을 위해 설치됩니다. + - Google Chrome과 관련 라이브러리(`lib*`) 및 `webdriver`는 `Selenium`을 사용한 웹 크롤링 기능을 위해 설치됩니다. +- **`docker-compose.yml`**: + - `fastapi_new_server`라는 이름의 단일 서비스를 실행합니다. + - `shm_size: 2g`: Selenium으로 Chrome을 실행할 때 발생할 수 있는 크래시를 방지하기 위해 컨테이너의 공유 메모리 크기를 2GB로 설정합니다. + - 호스트의 8001 포트를 컨테이너의 8001 포트와 매핑합니다. + +### 워크플로우 + +1. **데이터 수집 (Crawling)**: + - `api/crawling/` 디렉토리의 `smartstore.py`, `coupang.py` 모듈이 크롤링 로직을 담당합니다. + - `Selenium`, `BeautifulSoup`, `undetected-chromedriver`를 사용하여 스마트스토어, 쿠팡과 같은 이커머스 사이트에서 상품 리뷰 등의 데이터를 동적으로 수집합니다. + +2. **데이터 분석 (Analysis)**: + - **전처리**: `KoNLPy`, `Mecab`, `Eunjeon` 등의 라이브러리를 사용하여 수집된 한글 텍스트 데이터를 형태소 단위로 분석하고 정제합니다. + - **AI 분석**: `api/analysis/` 디렉토리의 `sentiment.py`(감성 분석), `associate.py`(연관 분석) 모듈이 분석 로직을 담당합니다. + - `TensorFlow`와 `Keras`로 구축된 딥러닝 모델을 사용하여 텍스트의 긍/부정 뉘앙스를 판단하는 감성 분석을 수행합니다. + +3. **API 제공 (Serving)**: + - `FastAPI`를 사용하여 분석 기능을 REST API 형태로 제공합니다. + - `app/server.py`에서 라우터를 관리하며, 인증(`auth`), 크롤링, 분석 등 기능별로 엔드포인트를 모듈화하여 관리합니다. + - `core/middleware/token_validator.py`를 통해 API 요청에 대한 토큰 기반 인증을 수행하여 허가된 사용자만 접근할 수 있도록 합니다. + +## 기술 스택 + +- **백엔드**: FastAPI, Uvicorn, Gunicorn +- **웹 크롤링**: Selenium, BeautifulSoup4, undetected-chromedriver +- **자연어 처리**: KoNLPy, Mecab, Eunjeon +- **AI/머신러닝**: TensorFlow, Keras, Scikit-learn +- **데이터베이스**: (Dockerfile 및 requirements.txt에 명시적인 DB 드라이버가 없어, 파일 기반 또는 외부 DB 연결로 추정됨) +- **오케스트레이션**: Docker, Docker Compose + +## 실행 방법 + +### 사전 요구사항 + +- Docker 및 Docker Compose + +### 설정 + +프로젝트에 필요한 환경 변수(예: DB 정보, 외부 API 키 등)는 `core/config.py` 또는 시스템 환경 변수를 통해 설정해야 합니다. (관련 설정 파일 확인 필요) + +### 실행 + +1. **Docker 이미지 빌드 및 컨테이너 실행**: + ```bash + # (선택) 기존 컨테이너 및 이미지 재빌드를 위한 스크립트 + ./rebuild.sh + + # 또는 docker-compose 직접 실행 + docker-compose up --build -d + ``` + +2. **애플리케이션 접근**: + - **API 문서 (Swagger UI)**: 컨테이너 실행 후, 브라우저에서 `http://localhost:8001/docs`로 접속하여 API 명세를 확인할 수 있습니다. + +### 중지 + +```bash +docker-compose down +``` \ No newline at end of file diff --git a/1_infrastructure/docker/docker_fastapi_new/docker-compose.yml b/1_infrastructure/docker/docker_fastapi_new/docker-compose.yml new file mode 100644 index 0000000..eee72b8 --- /dev/null +++ b/1_infrastructure/docker/docker_fastapi_new/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' + +services: + server: + build: + context: . + dockerfile: Dockerfile + container_name: fastapi_new_server + shm_size: 2g # 공유메모리 크기 설정(crome 크래시 방지) + network_mode: bridge + ports: + - "8001:8001" + tty: true + stdin_open: true + restart: always diff --git a/docker/docker_flask_proxy/Dockerfile b/1_infrastructure/docker/docker_flask_proxy/Dockerfile similarity index 100% rename from docker/docker_flask_proxy/Dockerfile rename to 1_infrastructure/docker/docker_flask_proxy/Dockerfile diff --git a/docker/docker_flask_proxy/README.md b/1_infrastructure/docker/docker_flask_proxy/README.md similarity index 100% rename from docker/docker_flask_proxy/README.md rename to 1_infrastructure/docker/docker_flask_proxy/README.md diff --git a/docker/docker_flask_proxy/app.py b/1_infrastructure/docker/docker_flask_proxy/app.py similarity index 100% rename from docker/docker_flask_proxy/app.py rename to 1_infrastructure/docker/docker_flask_proxy/app.py diff --git a/docker/docker_flask_proxy/docker-compose.yml b/1_infrastructure/docker/docker_flask_proxy/docker-compose.yml similarity index 100% rename from docker/docker_flask_proxy/docker-compose.yml rename to 1_infrastructure/docker/docker_flask_proxy/docker-compose.yml diff --git a/docker/docker_flask_proxy/proxy.geumdo.net/README b/1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/README similarity index 100% rename from docker/docker_flask_proxy/proxy.geumdo.net/README rename to 1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/README diff --git a/docker/docker_flask_proxy/proxy.geumdo.net/cert.pem b/1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/cert.pem similarity index 100% rename from docker/docker_flask_proxy/proxy.geumdo.net/cert.pem rename to 1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/cert.pem diff --git a/docker/docker_flask_proxy/proxy.geumdo.net/chain.pem b/1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/chain.pem similarity index 100% rename from docker/docker_flask_proxy/proxy.geumdo.net/chain.pem rename to 1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/chain.pem diff --git a/docker/docker_flask_proxy/proxy.geumdo.net/fullchain.pem b/1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/fullchain.pem similarity index 100% rename from docker/docker_flask_proxy/proxy.geumdo.net/fullchain.pem rename to 1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/fullchain.pem diff --git a/docker/docker_flask_proxy/proxy.geumdo.net/privkey.pem b/1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/privkey.pem similarity index 100% rename from docker/docker_flask_proxy/proxy.geumdo.net/privkey.pem rename to 1_infrastructure/docker/docker_flask_proxy/proxy.geumdo.net/privkey.pem diff --git a/docker/docker_flask_proxy/rebuild_docker.sh b/1_infrastructure/docker/docker_flask_proxy/rebuild_docker.sh similarity index 100% rename from docker/docker_flask_proxy/rebuild_docker.sh rename to 1_infrastructure/docker/docker_flask_proxy/rebuild_docker.sh diff --git a/docker/docker_gitlab/README.md b/1_infrastructure/docker/docker_gitlab/README.md similarity index 100% rename from docker/docker_gitlab/README.md rename to 1_infrastructure/docker/docker_gitlab/README.md diff --git a/docker/docker_gitlab/docker-compose.yml b/1_infrastructure/docker/docker_gitlab/docker-compose.yml similarity index 100% rename from docker/docker_gitlab/docker-compose.yml rename to 1_infrastructure/docker/docker_gitlab/docker-compose.yml diff --git a/docker/docker_java/Dockerfile b/1_infrastructure/docker/docker_java/Dockerfile similarity index 100% rename from docker/docker_java/Dockerfile rename to 1_infrastructure/docker/docker_java/Dockerfile diff --git a/docker/docker_java/README.md b/1_infrastructure/docker/docker_java/README.md similarity index 100% rename from docker/docker_java/README.md rename to 1_infrastructure/docker/docker_java/README.md diff --git a/docker/docker_java/docker-compose.yml b/1_infrastructure/docker/docker_java/docker-compose.yml similarity index 100% rename from docker/docker_java/docker-compose.yml rename to 1_infrastructure/docker/docker_java/docker-compose.yml diff --git a/docker/docker_java/rebuild_docker.sh b/1_infrastructure/docker/docker_java/rebuild_docker.sh similarity index 100% rename from docker/docker_java/rebuild_docker.sh rename to 1_infrastructure/docker/docker_java/rebuild_docker.sh diff --git a/docker/docker_java/setting.sql b/1_infrastructure/docker/docker_java/setting.sql similarity index 100% rename from docker/docker_java/setting.sql rename to 1_infrastructure/docker/docker_java/setting.sql diff --git a/docker/docker_java/ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt b/1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt similarity index 100% rename from docker/docker_java/ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt rename to 1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/DigiCertCAG1.crt diff --git a/docker/docker_java/ssl/gbmax.or.kr_ssl/TrustedRootG2.crt b/1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/TrustedRootG2.crt similarity index 100% rename from docker/docker_java/ssl/gbmax.or.kr_ssl/TrustedRootG2.crt rename to 1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/TrustedRootG2.crt diff --git a/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.key b/1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.key similarity index 100% rename from docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.key rename to 1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.key diff --git a/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b b/1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b similarity index 100% rename from docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b rename to 1_infrastructure/docker/docker_java/ssl/gbmax.or.kr_ssl/gbmax.or.kr.p7b diff --git a/docker/docker_java/ssl/max.or.kr_ssl/DigiCertCAG1.crt b/1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/DigiCertCAG1.crt similarity index 100% rename from docker/docker_java/ssl/max.or.kr_ssl/DigiCertCAG1.crt rename to 1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/DigiCertCAG1.crt diff --git a/docker/docker_java/ssl/max.or.kr_ssl/TrustedRootG2.crt b/1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/TrustedRootG2.crt similarity index 100% rename from docker/docker_java/ssl/max.or.kr_ssl/TrustedRootG2.crt rename to 1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/TrustedRootG2.crt diff --git a/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.key b/1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.key similarity index 100% rename from docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.key rename to 1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.key diff --git a/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.p7b b/1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.p7b similarity index 100% rename from docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.p7b rename to 1_infrastructure/docker/docker_java/ssl/max.or.kr_ssl/max.or.kr.p7b diff --git a/docker/docker_java/start_service.sh b/1_infrastructure/docker/docker_java/start_service.sh similarity index 100% rename from docker/docker_java/start_service.sh rename to 1_infrastructure/docker/docker_java/start_service.sh diff --git a/docker/docker_jenkins/Dockerfile b/1_infrastructure/docker/docker_jenkins/Dockerfile similarity index 100% rename from docker/docker_jenkins/Dockerfile rename to 1_infrastructure/docker/docker_jenkins/Dockerfile diff --git a/docker/docker_jenkins/README.md b/1_infrastructure/docker/docker_jenkins/README.md similarity index 100% rename from docker/docker_jenkins/README.md rename to 1_infrastructure/docker/docker_jenkins/README.md diff --git a/docker/docker_jenkins/docker-compose.yml b/1_infrastructure/docker/docker_jenkins/docker-compose.yml similarity index 100% rename from docker/docker_jenkins/docker-compose.yml rename to 1_infrastructure/docker/docker_jenkins/docker-compose.yml diff --git a/docker/docker_jenkins/rebuild.sh b/1_infrastructure/docker/docker_jenkins/rebuild.sh similarity index 100% rename from docker/docker_jenkins/rebuild.sh rename to 1_infrastructure/docker/docker_jenkins/rebuild.sh diff --git a/docker/docker_jenkins/start_service.sh b/1_infrastructure/docker/docker_jenkins/start_service.sh similarity index 100% rename from docker/docker_jenkins/start_service.sh rename to 1_infrastructure/docker/docker_jenkins/start_service.sh diff --git a/docker/docker_jupyter/Dockerfile b/1_infrastructure/docker/docker_jupyter/Dockerfile similarity index 100% rename from docker/docker_jupyter/Dockerfile rename to 1_infrastructure/docker/docker_jupyter/Dockerfile diff --git a/docker/docker_jupyter/README.md b/1_infrastructure/docker/docker_jupyter/README.md similarity index 100% rename from docker/docker_jupyter/README.md rename to 1_infrastructure/docker/docker_jupyter/README.md diff --git a/docker/docker_jupyter/docker-compose.yml b/1_infrastructure/docker/docker_jupyter/docker-compose.yml similarity index 100% rename from docker/docker_jupyter/docker-compose.yml rename to 1_infrastructure/docker/docker_jupyter/docker-compose.yml diff --git a/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled 1.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled 1.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/files/Untitled 1.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled 1.ipynb diff --git a/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/files/Untitled.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled.ipynb diff --git a/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled1.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled1.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/files/Untitled1.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled1.ipynb diff --git a/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled2.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled2.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/files/Untitled2.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/Untitled2.ipynb diff --git a/docker/docker_jupyter/notebooks/.Trash-0/files/llama3.1_koalpaca.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/llama3.1_koalpaca.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/files/llama3.1_koalpaca.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/files/llama3.1_koalpaca.ipynb diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled 1.ipynb.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled 1.ipynb.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/Untitled 1.ipynb.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled 1.ipynb.trashinfo diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled Folder.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled Folder.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/Untitled Folder.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled Folder.trashinfo diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled.ipynb.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled.ipynb.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/Untitled.ipynb.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled.ipynb.trashinfo diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled1.ipynb.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled1.ipynb.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/Untitled1.ipynb.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled1.ipynb.trashinfo diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled2.ipynb.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled2.ipynb.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/Untitled2.ipynb.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/Untitled2.ipynb.trashinfo diff --git a/docker/docker_jupyter/notebooks/.Trash-0/info/llama3.1_koalpaca.ipynb.trashinfo b/1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/llama3.1_koalpaca.ipynb.trashinfo similarity index 100% rename from docker/docker_jupyter/notebooks/.Trash-0/info/llama3.1_koalpaca.ipynb.trashinfo rename to 1_infrastructure/docker/docker_jupyter/notebooks/.Trash-0/info/llama3.1_koalpaca.ipynb.trashinfo diff --git a/docker/docker_jupyter/notebooks/Untitled.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/Untitled.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/Untitled.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/Untitled.ipynb diff --git a/docker/docker_jupyter/notebooks/bi-lstm-1.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/bi-lstm-1.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/bi-lstm-1.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/bi-lstm-1.ipynb diff --git a/docker/docker_jupyter/notebooks/gpucheck.ipynb b/1_infrastructure/docker/docker_jupyter/notebooks/gpucheck.ipynb similarity index 100% rename from docker/docker_jupyter/notebooks/gpucheck.ipynb rename to 1_infrastructure/docker/docker_jupyter/notebooks/gpucheck.ipynb diff --git a/docker/docker_jupyter/notebooks/test.txt b/1_infrastructure/docker/docker_jupyter/notebooks/test.txt similarity index 100% rename from docker/docker_jupyter/notebooks/test.txt rename to 1_infrastructure/docker/docker_jupyter/notebooks/test.txt diff --git a/docker/docker_jupyter/rebuild.sh b/1_infrastructure/docker/docker_jupyter/rebuild.sh similarity index 100% rename from docker/docker_jupyter/rebuild.sh rename to 1_infrastructure/docker/docker_jupyter/rebuild.sh diff --git a/docker/docker_jupyter/requirements.txt b/1_infrastructure/docker/docker_jupyter/requirements.txt similarity index 100% rename from docker/docker_jupyter/requirements.txt rename to 1_infrastructure/docker/docker_jupyter/requirements.txt diff --git a/docker/docker_jupyter/start_service.sh b/1_infrastructure/docker/docker_jupyter/start_service.sh similarity index 100% rename from docker/docker_jupyter/start_service.sh rename to 1_infrastructure/docker/docker_jupyter/start_service.sh diff --git a/docker/docker_mailserver/README.md b/1_infrastructure/docker/docker_mailserver/README.md similarity index 100% rename from docker/docker_mailserver/README.md rename to 1_infrastructure/docker/docker_mailserver/README.md diff --git a/docker/docker_mailserver/certs/ca.crt b/1_infrastructure/docker/docker_mailserver/certs/ca.crt similarity index 100% rename from docker/docker_mailserver/certs/ca.crt rename to 1_infrastructure/docker/docker_mailserver/certs/ca.crt diff --git a/docker/docker_mailserver/certs/dh4096.pem b/1_infrastructure/docker/docker_mailserver/certs/dh4096.pem similarity index 100% rename from docker/docker_mailserver/certs/dh4096.pem rename to 1_infrastructure/docker/docker_mailserver/certs/dh4096.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/README b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/README similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/README rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/README diff --git a/docker/docker_mailserver/certs/letsencrypt/_account/private.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/_account/private.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/_account/private.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/_account/private.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/_account/public.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/_account/public.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/_account/public.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/_account/public.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/cert.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/cert.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/cert.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/cert.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/chain.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/chain.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/chain.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/chain.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/fullchain.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/fullchain.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/fullchain.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/fullchain.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/cert.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/cert.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/cert.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/cert.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/chain.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/chain.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/chain.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/chain.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/fullchain.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/fullchain.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/fullchain.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/fullchain.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/last.csr b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/last.csr similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/last.csr rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/last.csr diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/private.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/private.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/private.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/private.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/public.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/public.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/public.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/mail.geumdo.net/public.pem diff --git a/docker/docker_mailserver/certs/letsencrypt/privkey.pem b/1_infrastructure/docker/docker_mailserver/certs/letsencrypt/privkey.pem similarity index 100% rename from docker/docker_mailserver/certs/letsencrypt/privkey.pem rename to 1_infrastructure/docker/docker_mailserver/certs/letsencrypt/privkey.pem diff --git a/docker/docker_mailserver/certs/server.crt b/1_infrastructure/docker/docker_mailserver/certs/server.crt similarity index 100% rename from docker/docker_mailserver/certs/server.crt rename to 1_infrastructure/docker/docker_mailserver/certs/server.crt diff --git a/docker/docker_mailserver/certs/server.key b/1_infrastructure/docker/docker_mailserver/certs/server.key similarity index 100% rename from docker/docker_mailserver/certs/server.key rename to 1_infrastructure/docker/docker_mailserver/certs/server.key diff --git a/docker/docker_mailserver/docker-compose.yml b/1_infrastructure/docker/docker_mailserver/docker-compose.yml similarity index 100% rename from docker/docker_mailserver/docker-compose.yml rename to 1_infrastructure/docker/docker_mailserver/docker-compose.yml diff --git a/docker/docker_mailserver/rebuild.sh b/1_infrastructure/docker/docker_mailserver/rebuild.sh similarity index 100% rename from docker/docker_mailserver/rebuild.sh rename to 1_infrastructure/docker/docker_mailserver/rebuild.sh diff --git a/docker/docker_metaverse/Dockerfile b/1_infrastructure/docker/docker_metaverse/Dockerfile similarity index 100% rename from docker/docker_metaverse/Dockerfile rename to 1_infrastructure/docker/docker_metaverse/Dockerfile diff --git a/docker/docker_metaverse/README.md b/1_infrastructure/docker/docker_metaverse/README.md similarity index 100% rename from docker/docker_metaverse/README.md rename to 1_infrastructure/docker/docker_metaverse/README.md diff --git a/docker/docker_metaverse/docker-compose.yml b/1_infrastructure/docker/docker_metaverse/docker-compose.yml similarity index 100% rename from docker/docker_metaverse/docker-compose.yml rename to 1_infrastructure/docker/docker_metaverse/docker-compose.yml diff --git a/docker/docker_metaverse/etc/nginx/sites-available/default b/1_infrastructure/docker/docker_metaverse/etc/nginx/sites-available/default similarity index 100% rename from docker/docker_metaverse/etc/nginx/sites-available/default rename to 1_infrastructure/docker/docker_metaverse/etc/nginx/sites-available/default diff --git a/docker/docker_metaverse/home/ubuntu/node/index.js b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/index.js similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/index.js rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/index.js diff --git a/docker/docker_metaverse/home/ubuntu/node/m_fword.js b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/m_fword.js similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/m_fword.js rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/m_fword.js diff --git a/docker/docker_metaverse/home/ubuntu/node/socket.js b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/socket.js similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/socket.js rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/socket.js diff --git a/docker/docker_metaverse/home/ubuntu/node/test_chat.html b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_chat.html similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/test_chat.html rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_chat.html diff --git a/docker/docker_metaverse/home/ubuntu/node/test_socket_chat.html b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_socket_chat.html similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/test_socket_chat.html rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_socket_chat.html diff --git a/docker/docker_metaverse/home/ubuntu/node/test_upload.html b/1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_upload.html similarity index 100% rename from docker/docker_metaverse/home/ubuntu/node/test_upload.html rename to 1_infrastructure/docker/docker_metaverse/home/ubuntu/node/test_upload.html diff --git a/docker/docker_metaverse/nodam.sql b/1_infrastructure/docker/docker_metaverse/nodam.sql similarity index 100% rename from docker/docker_metaverse/nodam.sql rename to 1_infrastructure/docker/docker_metaverse/nodam.sql diff --git a/docker/docker_metaverse/readme.txt b/1_infrastructure/docker/docker_metaverse/readme.txt similarity index 100% rename from docker/docker_metaverse/readme.txt rename to 1_infrastructure/docker/docker_metaverse/readme.txt diff --git a/docker/docker_metaverse/rebuild_docker.sh b/1_infrastructure/docker/docker_metaverse/rebuild_docker.sh similarity index 100% rename from docker/docker_metaverse/rebuild_docker.sh rename to 1_infrastructure/docker/docker_metaverse/rebuild_docker.sh diff --git a/docker/docker_metaverse/start_service.sh b/1_infrastructure/docker/docker_metaverse/start_service.sh similarity index 100% rename from docker/docker_metaverse/start_service.sh rename to 1_infrastructure/docker/docker_metaverse/start_service.sh diff --git a/docker/docker_nginx_proxy/Dockerfile b/1_infrastructure/docker/docker_nginx_proxy/Dockerfile similarity index 100% rename from docker/docker_nginx_proxy/Dockerfile rename to 1_infrastructure/docker/docker_nginx_proxy/Dockerfile diff --git a/docker/docker_nginx_proxy/README.md b/1_infrastructure/docker/docker_nginx_proxy/README.md similarity index 100% rename from docker/docker_nginx_proxy/README.md rename to 1_infrastructure/docker/docker_nginx_proxy/README.md diff --git a/docker/docker_nginx_proxy/docker-compose.yml b/1_infrastructure/docker/docker_nginx_proxy/docker-compose.yml similarity index 100% rename from docker/docker_nginx_proxy/docker-compose.yml rename to 1_infrastructure/docker/docker_nginx_proxy/docker-compose.yml diff --git a/docker/docker_nginx_proxy/letsencrypt/.updated-options-ssl-nginx-conf-digest.txt b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/.updated-options-ssl-nginx-conf-digest.txt similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/.updated-options-ssl-nginx-conf-digest.txt rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/.updated-options-ssl-nginx-conf-digest.txt diff --git a/docker/docker_nginx_proxy/letsencrypt/.updated-ssl-dhparams-pem-digest.txt b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/.updated-ssl-dhparams-pem-digest.txt similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/.updated-ssl-dhparams-pem-digest.txt rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/.updated-ssl-dhparams-pem-digest.txt diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/cert3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/chain3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/fullchain3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/dip-zero.geumdo.net/privkey3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/cert3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/chain3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/fullchain3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey2.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey2.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey2.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey2.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey3.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey3.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey3.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/mail.geumdo.net/privkey3.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/cert1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/cert1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/cert1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/cert1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/chain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/chain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/chain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/chain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/fullchain1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/fullchain1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/fullchain1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/fullchain1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/privkey1.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/privkey1.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/privkey1.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/archive/proxy.geumdo.net/privkey1.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/cli.ini b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/cli.ini similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/cli.ini rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/cli.ini diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0000_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0000_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0000_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0000_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0001_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0001_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0001_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0001_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0002_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0002_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0002_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0002_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0003_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0003_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0003_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0003_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0004_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0004_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0004_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0004_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0005_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0005_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0005_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0005_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0006_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0006_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0006_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0006_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0007_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0007_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0007_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0007_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0008_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0008_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0008_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0008_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0009_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0009_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0009_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0009_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0010_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0010_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0010_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0010_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0011_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0011_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0011_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0011_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0012_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0012_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0012_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0012_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0013_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0013_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0013_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0013_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0014_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0014_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0014_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0014_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0015_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0015_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0015_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0015_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0016_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0016_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0016_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0016_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0017_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0017_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0017_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0017_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0018_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0018_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0018_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0018_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0019_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0019_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0019_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0019_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0020_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0020_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0020_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0020_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0021_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0021_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0021_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0021_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0022_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0022_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0022_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0022_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0023_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0023_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0023_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0023_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0024_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0024_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0024_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0024_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0025_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0025_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0025_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0025_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0026_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0026_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0026_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0026_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0027_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0027_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0027_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0027_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0028_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0028_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0028_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0028_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0029_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0029_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0029_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0029_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0030_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0030_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0030_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0030_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0031_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0031_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0031_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0031_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0032_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0032_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0032_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0032_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0033_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0033_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0033_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0033_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0034_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0034_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0034_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0034_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0035_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0035_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0035_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0035_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0036_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0036_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0036_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0036_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0037_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0037_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0037_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0037_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0038_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0038_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0038_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0038_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0039_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0039_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0039_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0039_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0040_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0040_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0040_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0040_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0041_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0041_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0041_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0041_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0042_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0042_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0042_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0042_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0043_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0043_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0043_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0043_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0044_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0044_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0044_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0044_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0045_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0045_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0045_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0045_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0046_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0046_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0046_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0046_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0047_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0047_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0047_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0047_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0048_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0048_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0048_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0048_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0049_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0049_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0049_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0049_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0050_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0050_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0050_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0050_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0051_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0051_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0051_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0051_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0052_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0052_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0052_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0052_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0053_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0053_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0053_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0053_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0054_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0054_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0054_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0054_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0055_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0055_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0055_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0055_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0056_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0056_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0056_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0056_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0057_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0057_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0057_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0057_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0058_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0058_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0058_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0058_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0059_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0059_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0059_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0059_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0060_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0060_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0060_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0060_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0061_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0061_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0061_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0061_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0062_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0062_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0062_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0062_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0063_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0063_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0063_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0063_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0064_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0064_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0064_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0064_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0065_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0065_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0065_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0065_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0066_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0066_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0066_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0066_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0067_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0067_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0067_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0067_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0068_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0068_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0068_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0068_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0069_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0069_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0069_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0069_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0070_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0070_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0070_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0070_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0071_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0071_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0071_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0071_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0072_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0072_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0072_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0072_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0073_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0073_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0073_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0073_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0074_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0074_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0074_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0074_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0075_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0075_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0075_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0075_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0076_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0076_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0076_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0076_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0077_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0077_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0077_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0077_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0078_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0078_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0078_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0078_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0079_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0079_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0079_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0079_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0080_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0080_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0080_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0080_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0081_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0081_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0081_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0081_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0082_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0082_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0082_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0082_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0083_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0083_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0083_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0083_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0084_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0084_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0084_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0084_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0085_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0085_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0085_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0085_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0086_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0086_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0086_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0086_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0087_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0087_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0087_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0087_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0088_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0088_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0088_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0088_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0089_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0089_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0089_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0089_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0090_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0090_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0090_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0090_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0091_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0091_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0091_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0091_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0092_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0092_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0092_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0092_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0093_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0093_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0093_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0093_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0094_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0094_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0094_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0094_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0095_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0095_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0095_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0095_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0096_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0096_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0096_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0096_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0097_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0097_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0097_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0097_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0098_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0098_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0098_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0098_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0099_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0099_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0099_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0099_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0100_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0100_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0100_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0100_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0101_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0101_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0101_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0101_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0102_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0102_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0102_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0102_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0103_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0103_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0103_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0103_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0104_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0104_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0104_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0104_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0105_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0105_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0105_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0105_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0106_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0106_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0106_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0106_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0107_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0107_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0107_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0107_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0108_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0108_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0108_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0108_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0109_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0109_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0109_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0109_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0110_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0110_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0110_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0110_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0111_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0111_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0111_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0111_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0112_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0112_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0112_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0112_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0113_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0113_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0113_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0113_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0114_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0114_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0114_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0114_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0115_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0115_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0115_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0115_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0116_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0116_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0116_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0116_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0117_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0117_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0117_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0117_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0118_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0118_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0118_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0118_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0119_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0119_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0119_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0119_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0120_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0120_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0120_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0120_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0121_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0121_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0121_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0121_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0122_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0122_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0122_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0122_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0123_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0123_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0123_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0123_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0124_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0124_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0124_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0124_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0125_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0125_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0125_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0125_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0126_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0126_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0126_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0126_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0127_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0127_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0127_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0127_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0128_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0128_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0128_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0128_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0129_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0129_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0129_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0129_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0130_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0130_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0130_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0130_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0131_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0131_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0131_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0131_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0132_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0132_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0132_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0132_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0133_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0133_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0133_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0133_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0134_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0134_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0134_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0134_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0135_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0135_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0135_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0135_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0136_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0136_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0136_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0136_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0137_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0137_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0137_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0137_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0138_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0138_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0138_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0138_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0139_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0139_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0139_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0139_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0140_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0140_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0140_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0140_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0141_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0141_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0141_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0141_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0142_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0142_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0142_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0142_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0143_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0143_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0143_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0143_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0144_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0144_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0144_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0144_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0145_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0145_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0145_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0145_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0146_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0146_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0146_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0146_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0147_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0147_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0147_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0147_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0148_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0148_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0148_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0148_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0149_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0149_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0149_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0149_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0150_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0150_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0150_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0150_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0151_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0151_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0151_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0151_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0152_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0152_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0152_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0152_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0153_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0153_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0153_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0153_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0154_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0154_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0154_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0154_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0155_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0155_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0155_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0155_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0156_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0156_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0156_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0156_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0157_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0157_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0157_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0157_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0158_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0158_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0158_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0158_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0159_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0159_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0159_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0159_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0160_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0160_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0160_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0160_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0161_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0161_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0161_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0161_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0162_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0162_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0162_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0162_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0163_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0163_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0163_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0163_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0164_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0164_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0164_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0164_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0165_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0165_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0165_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0165_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0166_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0166_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0166_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0166_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0167_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0167_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0167_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0167_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0168_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0168_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0168_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0168_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0169_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0169_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0169_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0169_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0170_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0170_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0170_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0170_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0171_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0171_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0171_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0171_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0172_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0172_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0172_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0172_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0173_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0173_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0173_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0173_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0174_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0174_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0174_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0174_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0175_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0175_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0175_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0175_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0176_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0176_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0176_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0176_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0177_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0177_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0177_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0177_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0178_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0178_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0178_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0178_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0179_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0179_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0179_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0179_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0180_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0180_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0180_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0180_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0181_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0181_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0181_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0181_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0182_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0182_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0182_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0182_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0183_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0183_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0183_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0183_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0184_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0184_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0184_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0184_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0185_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0185_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0185_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0185_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0186_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0186_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0186_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0186_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0187_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0187_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0187_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0187_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0188_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0188_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0188_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0188_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0189_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0189_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0189_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0189_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0190_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0190_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0190_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0190_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0191_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0191_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0191_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0191_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0192_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0192_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0192_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0192_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0193_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0193_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0193_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0193_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0194_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0194_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0194_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0194_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0195_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0195_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0195_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0195_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0196_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0196_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0196_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0196_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0197_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0197_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0197_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0197_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0198_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0198_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0198_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0198_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0199_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0199_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0199_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0199_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0200_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0200_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0200_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0200_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0201_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0201_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0201_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0201_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0202_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0202_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0202_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0202_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0203_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0203_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0203_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0203_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0204_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0204_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0204_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0204_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0205_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0205_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0205_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0205_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0206_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0206_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0206_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0206_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0207_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0207_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0207_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0207_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0208_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0208_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0208_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0208_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0209_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0209_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0209_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0209_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0210_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0210_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0210_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0210_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0211_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0211_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0211_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0211_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0212_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0212_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0212_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0212_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0213_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0213_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0213_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0213_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0214_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0214_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0214_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0214_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0215_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0215_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0215_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0215_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0216_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0216_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0216_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0216_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0217_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0217_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0217_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0217_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0218_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0218_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0218_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0218_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0219_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0219_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0219_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0219_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0220_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0220_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0220_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0220_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0221_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0221_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0221_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0221_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0222_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0222_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0222_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0222_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0223_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0223_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0223_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0223_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0224_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0224_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0224_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0224_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0225_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0225_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0225_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0225_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0226_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0226_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0226_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0226_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0227_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0227_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0227_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0227_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0228_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0228_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0228_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0228_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0229_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0229_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0229_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0229_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0230_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0230_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0230_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0230_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0231_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0231_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0231_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0231_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0232_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0232_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0232_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0232_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0233_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0233_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0233_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0233_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0234_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0234_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0234_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0234_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0235_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0235_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0235_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0235_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0236_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0236_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0236_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0236_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0237_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0237_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0237_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0237_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0238_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0238_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0238_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0238_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0239_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0239_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0239_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0239_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0240_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0240_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0240_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0240_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0241_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0241_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0241_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0241_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0242_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0242_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0242_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0242_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0243_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0243_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0243_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0243_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0244_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0244_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0244_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0244_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0245_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0245_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0245_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0245_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0246_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0246_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0246_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0246_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0247_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0247_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0247_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0247_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0248_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0248_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0248_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0248_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0249_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0249_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0249_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0249_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0250_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0250_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0250_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0250_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0251_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0251_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0251_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0251_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0252_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0252_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0252_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0252_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0253_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0253_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0253_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0253_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0254_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0254_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0254_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0254_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0255_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0255_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0255_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0255_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0256_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0256_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0256_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0256_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0257_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0257_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0257_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0257_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0258_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0258_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0258_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0258_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0259_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0259_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0259_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0259_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0260_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0260_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0260_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0260_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0261_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0261_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0261_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0261_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0262_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0262_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0262_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0262_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0263_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0263_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0263_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0263_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0264_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0264_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0264_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0264_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0265_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0265_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0265_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0265_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0266_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0266_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0266_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0266_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0267_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0267_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0267_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0267_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0268_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0268_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0268_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0268_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0269_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0269_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0269_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0269_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0270_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0270_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0270_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0270_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0271_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0271_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0271_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0271_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0272_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0272_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0272_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0272_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0273_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0273_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0273_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0273_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0274_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0274_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0274_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0274_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0275_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0275_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0275_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0275_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0276_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0276_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0276_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0276_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0277_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0277_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0277_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0277_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0278_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0278_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0278_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0278_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0279_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0279_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0279_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0279_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0280_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0280_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0280_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0280_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0281_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0281_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0281_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0281_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0282_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0282_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0282_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0282_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0283_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0283_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0283_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0283_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0284_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0284_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0284_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0284_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0285_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0285_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0285_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0285_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0286_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0286_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0286_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0286_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0287_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0287_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0287_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0287_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0288_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0288_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0288_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0288_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0289_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0289_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0289_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0289_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0290_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0290_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0290_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0290_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0291_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0291_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0291_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0291_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0292_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0292_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0292_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0292_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0293_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0293_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0293_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0293_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0294_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0294_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0294_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0294_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0295_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0295_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0295_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0295_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0296_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0296_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0296_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0296_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0297_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0297_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0297_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0297_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0298_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0298_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0298_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0298_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0299_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0299_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0299_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0299_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0300_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0300_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0300_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0300_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0301_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0301_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0301_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0301_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0302_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0302_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0302_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0302_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0303_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0303_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0303_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0303_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0304_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0304_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0304_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0304_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0305_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0305_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0305_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0305_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0306_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0306_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0306_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0306_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0307_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0307_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0307_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0307_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0308_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0308_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0308_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0308_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0309_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0309_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0309_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0309_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0310_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0310_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0310_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0310_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0311_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0311_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0311_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0311_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0312_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0312_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0312_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0312_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0313_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0313_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0313_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0313_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0314_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0314_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0314_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0314_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0315_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0315_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0315_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0315_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0316_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0316_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0316_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0316_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0317_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0317_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0317_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0317_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0318_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0318_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0318_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0318_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0319_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0319_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0319_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0319_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0320_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0320_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0320_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0320_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0321_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0321_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0321_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0321_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0322_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0322_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0322_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0322_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0323_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0323_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0323_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0323_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0324_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0324_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0324_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0324_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0325_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0325_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0325_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0325_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0326_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0326_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0326_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0326_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0327_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0327_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0327_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0327_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0328_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0328_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0328_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0328_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0329_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0329_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0329_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0329_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0330_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0330_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0330_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0330_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0331_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0331_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0331_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0331_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0332_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0332_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0332_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0332_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0333_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0333_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0333_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0333_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0334_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0334_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0334_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0334_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0335_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0335_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0335_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0335_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0336_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0336_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0336_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0336_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0337_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0337_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0337_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0337_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0338_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0338_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0338_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0338_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0339_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0339_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0339_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0339_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0340_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0340_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0340_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0340_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0341_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0341_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0341_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0341_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0342_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0342_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0342_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0342_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0343_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0343_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0343_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0343_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0344_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0344_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0344_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0344_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0345_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0345_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0345_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0345_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0346_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0346_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0346_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0346_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0347_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0347_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0347_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0347_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0348_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0348_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0348_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0348_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0349_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0349_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0349_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0349_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0350_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0350_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0350_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0350_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0351_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0351_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0351_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0351_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0352_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0352_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0352_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0352_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0353_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0353_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0353_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0353_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0354_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0354_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0354_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0354_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0355_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0355_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0355_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0355_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0356_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0356_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0356_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0356_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0357_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0357_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0357_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0357_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0358_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0358_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0358_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0358_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0359_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0359_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0359_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0359_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0360_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0360_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0360_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0360_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0361_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0361_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0361_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0361_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0362_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0362_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0362_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0362_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0363_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0363_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0363_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0363_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0364_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0364_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0364_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0364_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0365_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0365_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0365_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0365_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0366_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0366_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0366_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0366_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0367_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0367_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0367_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0367_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0368_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0368_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0368_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0368_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0369_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0369_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0369_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0369_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0370_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0370_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0370_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0370_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0371_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0371_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0371_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0371_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0372_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0372_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0372_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0372_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0373_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0373_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0373_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0373_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0374_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0374_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0374_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0374_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0375_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0375_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0375_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0375_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0376_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0376_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0376_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0376_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0377_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0377_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0377_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0377_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0378_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0378_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0378_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0378_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0379_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0379_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0379_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0379_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0380_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0380_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0380_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0380_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0381_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0381_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0381_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0381_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0382_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0382_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0382_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0382_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0383_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0383_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0383_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0383_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0384_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0384_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0384_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0384_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0385_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0385_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0385_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0385_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0386_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0386_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0386_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0386_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0387_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0387_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0387_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0387_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0388_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0388_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0388_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0388_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0389_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0389_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0389_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0389_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0390_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0390_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0390_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0390_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0391_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0391_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0391_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0391_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0392_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0392_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0392_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0392_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0393_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0393_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0393_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0393_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0394_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0394_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0394_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0394_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0395_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0395_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0395_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0395_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0396_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0396_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0396_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0396_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0397_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0397_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0397_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0397_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0398_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0398_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0398_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0398_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0399_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0399_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0399_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0399_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0400_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0400_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0400_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0400_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0401_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0401_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0401_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0401_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0402_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0402_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0402_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0402_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0403_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0403_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0403_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0403_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0404_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0404_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0404_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0404_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0405_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0405_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0405_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0405_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0406_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0406_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0406_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0406_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0407_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0407_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0407_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0407_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0408_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0408_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0408_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0408_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0409_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0409_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0409_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0409_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0410_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0410_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0410_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0410_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0411_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0411_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0411_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0411_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0412_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0412_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0412_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0412_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0413_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0413_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0413_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0413_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0414_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0414_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0414_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0414_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0415_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0415_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0415_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0415_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0416_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0416_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0416_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0416_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0417_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0417_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0417_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0417_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0418_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0418_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0418_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0418_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0419_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0419_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0419_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0419_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0420_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0420_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0420_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0420_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0421_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0421_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0421_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0421_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0422_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0422_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0422_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0422_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0423_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0423_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0423_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0423_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0424_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0424_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0424_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0424_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0425_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0425_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0425_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0425_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0426_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0426_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0426_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0426_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0427_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0427_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0427_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0427_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0428_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0428_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0428_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0428_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0429_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0429_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0429_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0429_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0430_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0430_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0430_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0430_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0431_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0431_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0431_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0431_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0432_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0432_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0432_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0432_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0433_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0433_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0433_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0433_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0434_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0434_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0434_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0434_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0435_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0435_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0435_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0435_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0436_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0436_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0436_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0436_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0437_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0437_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0437_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0437_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0438_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0438_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0438_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0438_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0439_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0439_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0439_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0439_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0440_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0440_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0440_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0440_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0441_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0441_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0441_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0441_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0442_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0442_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0442_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0442_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0443_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0443_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0443_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0443_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0444_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0444_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0444_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0444_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0445_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0445_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0445_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0445_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0446_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0446_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0446_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0446_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0447_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0447_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0447_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0447_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0448_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0448_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0448_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0448_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0449_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0449_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0449_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0449_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0450_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0450_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0450_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0450_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0451_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0451_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0451_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0451_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0452_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0452_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0452_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0452_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0453_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0453_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0453_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0453_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0454_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0454_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0454_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0454_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0455_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0455_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0455_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0455_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0456_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0456_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0456_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0456_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0457_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0457_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0457_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0457_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0458_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0458_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0458_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0458_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0459_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0459_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0459_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0459_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0460_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0460_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0460_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0460_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0461_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0461_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0461_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0461_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0462_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0462_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0462_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0462_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0463_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0463_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0463_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0463_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0464_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0464_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0464_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0464_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0465_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0465_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0465_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0465_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0466_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0466_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0466_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0466_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0467_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0467_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0467_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0467_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0468_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0468_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0468_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0468_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0469_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0469_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0469_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0469_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0470_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0470_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0470_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0470_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0471_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0471_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0471_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0471_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0472_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0472_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0472_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0472_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0473_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0473_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0473_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0473_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0474_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0474_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0474_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0474_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0475_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0475_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0475_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0475_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0476_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0476_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0476_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0476_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0477_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0477_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0477_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0477_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0478_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0478_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0478_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0478_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0479_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0479_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0479_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0479_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0480_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0480_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0480_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0480_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0481_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0481_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0481_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0481_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0482_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0482_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0482_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0482_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0483_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0483_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0483_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0483_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0484_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0484_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0484_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0484_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0485_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0485_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0485_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0485_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0486_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0486_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0486_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0486_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0487_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0487_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0487_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0487_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0488_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0488_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0488_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0488_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0489_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0489_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0489_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0489_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0490_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0490_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0490_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0490_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0491_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0491_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0491_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0491_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0492_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0492_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0492_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0492_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0493_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0493_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0493_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0493_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0494_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0494_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0494_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0494_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0495_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0495_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0495_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0495_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0496_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0496_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0496_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0496_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0497_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0497_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0497_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0497_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0498_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0498_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0498_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0498_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0499_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0499_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0499_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0499_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0500_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0500_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0500_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0500_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0501_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0501_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0501_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0501_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0502_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0502_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0502_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0502_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0503_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0503_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0503_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0503_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0504_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0504_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0504_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0504_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0505_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0505_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0505_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0505_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0506_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0506_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0506_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0506_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0507_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0507_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0507_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0507_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0508_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0508_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0508_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0508_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0509_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0509_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0509_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0509_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0510_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0510_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0510_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0510_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0511_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0511_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0511_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0511_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0512_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0512_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0512_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0512_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0513_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0513_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0513_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0513_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0514_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0514_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0514_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0514_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0515_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0515_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0515_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0515_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0516_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0516_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0516_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0516_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0517_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0517_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0517_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0517_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0518_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0518_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0518_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0518_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0519_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0519_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0519_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0519_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0520_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0520_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0520_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0520_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0521_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0521_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0521_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0521_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0522_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0522_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0522_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0522_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0523_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0523_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0523_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0523_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0524_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0524_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0524_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0524_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0525_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0525_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0525_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0525_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0526_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0526_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0526_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0526_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0527_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0527_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0527_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0527_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0528_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0528_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0528_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0528_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0529_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0529_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0529_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0529_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0530_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0530_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0530_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0530_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0531_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0531_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0531_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0531_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0532_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0532_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0532_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0532_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0533_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0533_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0533_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0533_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0534_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0534_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0534_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0534_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0535_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0535_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0535_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0535_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0536_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0536_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0536_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0536_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0537_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0537_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0537_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0537_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0538_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0538_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0538_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0538_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0539_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0539_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0539_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0539_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0540_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0540_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0540_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0540_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0541_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0541_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0541_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0541_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0542_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0542_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0542_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0542_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0543_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0543_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0543_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0543_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0544_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0544_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0544_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0544_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0545_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0545_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0545_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0545_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0546_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0546_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0546_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0546_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0547_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0547_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0547_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0547_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0548_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0548_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0548_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0548_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0549_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0549_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0549_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0549_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0550_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0550_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0550_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0550_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0551_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0551_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0551_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0551_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0552_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0552_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0552_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0552_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0553_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0553_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0553_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0553_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0554_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0554_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0554_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0554_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0555_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0555_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0555_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0555_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0556_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0556_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0556_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0556_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0557_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0557_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0557_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0557_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0558_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0558_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0558_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0558_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0559_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0559_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0559_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0559_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0560_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0560_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0560_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0560_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0561_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0561_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0561_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0561_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0562_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0562_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0562_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0562_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0563_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0563_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0563_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0563_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0564_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0564_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0564_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0564_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0565_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0565_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0565_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0565_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0566_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0566_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0566_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0566_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0567_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0567_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0567_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0567_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0568_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0568_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0568_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0568_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0569_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0569_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0569_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0569_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0570_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0570_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0570_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0570_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0571_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0571_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0571_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0571_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0572_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0572_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0572_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0572_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0573_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0573_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0573_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0573_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0574_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0574_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0574_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0574_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0575_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0575_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0575_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0575_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0576_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0576_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0576_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0576_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0577_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0577_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0577_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0577_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0578_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0578_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0578_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0578_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0579_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0579_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0579_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0579_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0580_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0580_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0580_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0580_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0581_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0581_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0581_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0581_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0582_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0582_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0582_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0582_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0583_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0583_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0583_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0583_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0584_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0584_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0584_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0584_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0585_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0585_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0585_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0585_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0586_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0586_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0586_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0586_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0587_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0587_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0587_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0587_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0588_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0588_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0588_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0588_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0589_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0589_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0589_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0589_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0590_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0590_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0590_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0590_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0591_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0591_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0591_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0591_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0592_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0592_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0592_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0592_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0593_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0593_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0593_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0593_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0594_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0594_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0594_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0594_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0595_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0595_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0595_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0595_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0596_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0596_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0596_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0596_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0597_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0597_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0597_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0597_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0598_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0598_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0598_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0598_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0599_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0599_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0599_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0599_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0600_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0600_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0600_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0600_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0601_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0601_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0601_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0601_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0602_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0602_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0602_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0602_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0603_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0603_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0603_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0603_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0604_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0604_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0604_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0604_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0605_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0605_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0605_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0605_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0606_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0606_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0606_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0606_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0607_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0607_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0607_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0607_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0608_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0608_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0608_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0608_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0609_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0609_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0609_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0609_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0610_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0610_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0610_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0610_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0611_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0611_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0611_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0611_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0612_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0612_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0612_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0612_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0613_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0613_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0613_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0613_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0614_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0614_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0614_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0614_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0615_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0615_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0615_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0615_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0616_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0616_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0616_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0616_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0617_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0617_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0617_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0617_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0618_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0618_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0618_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0618_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0619_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0619_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0619_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0619_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0620_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0620_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0620_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0620_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0621_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0621_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0621_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0621_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0622_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0622_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0622_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0622_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0623_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0623_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0623_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0623_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0624_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0624_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0624_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0624_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0625_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0625_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0625_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0625_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0626_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0626_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0626_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0626_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0627_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0627_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0627_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0627_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0628_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0628_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0628_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0628_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0629_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0629_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0629_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0629_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0630_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0630_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0630_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0630_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0631_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0631_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0631_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0631_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0632_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0632_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0632_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0632_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0633_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0633_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0633_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0633_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0634_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0634_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0634_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0634_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0635_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0635_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0635_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0635_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0636_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0636_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0636_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0636_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0637_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0637_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0637_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0637_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0638_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0638_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0638_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0638_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0639_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0639_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0639_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0639_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0640_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0640_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0640_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0640_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0641_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0641_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0641_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0641_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0642_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0642_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0642_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0642_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0643_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0643_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0643_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0643_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0644_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0644_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0644_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0644_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0645_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0645_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0645_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0645_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0646_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0646_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0646_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0646_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0647_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0647_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0647_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0647_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0648_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0648_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0648_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0648_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0649_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0649_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0649_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0649_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0650_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0650_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0650_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0650_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0651_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0651_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0651_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0651_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0652_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0652_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0652_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0652_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0653_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0653_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0653_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0653_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0654_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0654_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0654_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0654_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0655_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0655_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0655_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0655_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0656_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0656_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0656_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0656_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0657_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0657_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0657_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0657_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0658_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0658_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0658_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0658_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0659_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0659_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0659_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0659_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0660_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0660_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0660_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0660_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0661_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0661_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0661_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0661_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0662_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0662_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0662_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0662_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0663_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0663_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0663_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0663_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0664_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0664_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0664_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0664_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0665_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0665_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0665_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0665_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0666_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0666_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0666_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0666_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0667_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0667_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0667_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0667_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0668_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0668_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0668_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0668_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0669_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0669_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0669_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0669_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0670_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0670_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0670_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0670_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0671_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0671_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0671_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0671_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0672_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0672_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0672_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0672_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0673_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0673_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0673_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0673_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0674_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0674_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0674_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0674_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0675_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0675_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0675_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0675_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0676_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0676_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0676_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0676_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0677_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0677_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0677_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0677_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0678_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0678_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0678_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0678_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0679_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0679_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0679_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0679_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0680_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0680_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0680_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0680_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0681_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0681_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0681_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0681_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0682_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0682_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0682_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0682_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0683_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0683_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0683_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0683_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0684_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0684_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0684_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0684_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0685_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0685_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0685_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0685_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0686_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0686_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0686_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0686_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0687_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0687_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0687_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0687_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0688_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0688_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0688_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0688_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0689_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0689_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0689_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0689_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0690_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0690_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0690_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0690_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0691_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0691_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0691_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0691_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0692_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0692_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0692_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0692_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0693_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0693_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0693_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0693_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0694_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0694_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0694_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0694_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0695_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0695_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0695_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0695_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0696_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0696_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0696_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0696_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0697_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0697_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0697_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0697_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0698_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0698_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0698_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0698_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0699_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0699_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0699_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0699_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0700_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0700_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0700_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0700_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0701_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0701_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0701_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0701_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0702_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0702_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0702_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0702_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0703_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0703_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0703_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0703_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0704_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0704_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0704_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0704_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0705_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0705_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0705_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0705_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0706_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0706_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0706_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0706_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0707_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0707_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0707_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0707_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0708_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0708_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0708_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0708_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0709_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0709_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0709_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0709_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0710_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0710_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0710_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0710_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0711_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0711_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0711_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0711_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0712_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0712_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0712_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0712_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0713_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0713_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0713_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0713_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0714_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0714_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0714_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0714_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0715_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0715_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0715_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0715_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0716_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0716_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0716_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0716_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0717_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0717_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0717_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0717_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0718_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0718_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0718_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0718_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0719_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0719_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0719_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0719_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0720_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0720_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0720_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0720_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0721_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0721_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0721_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0721_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0722_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0722_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0722_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0722_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0723_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0723_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0723_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0723_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0724_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0724_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0724_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0724_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0725_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0725_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0725_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0725_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0726_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0726_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0726_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0726_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0727_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0727_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0727_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0727_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0728_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0728_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0728_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0728_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0729_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0729_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0729_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0729_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0730_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0730_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0730_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0730_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0731_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0731_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0731_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0731_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0732_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0732_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0732_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0732_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0733_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0733_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0733_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0733_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0734_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0734_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0734_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0734_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0735_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0735_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0735_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0735_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0736_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0736_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0736_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0736_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0737_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0737_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0737_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0737_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0738_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0738_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0738_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0738_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0739_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0739_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0739_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0739_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0740_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0740_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0740_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0740_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0741_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0741_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0741_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0741_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0742_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0742_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0742_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0742_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0743_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0743_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0743_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0743_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0744_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0744_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0744_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0744_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0745_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0745_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0745_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0745_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0746_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0746_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0746_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0746_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0747_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0747_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0747_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0747_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0748_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0748_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0748_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0748_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0749_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0749_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0749_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0749_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0750_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0750_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0750_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0750_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0751_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0751_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0751_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0751_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0752_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0752_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0752_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0752_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0753_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0753_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0753_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0753_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0754_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0754_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0754_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0754_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0755_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0755_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0755_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0755_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0756_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0756_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0756_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0756_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0757_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0757_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0757_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0757_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0758_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0758_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0758_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0758_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0759_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0759_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0759_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0759_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0760_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0760_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0760_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0760_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0761_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0761_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0761_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0761_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0762_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0762_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0762_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0762_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0763_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0763_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0763_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0763_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0764_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0764_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0764_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0764_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0765_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0765_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0765_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0765_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0766_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0766_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0766_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0766_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0767_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0767_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0767_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0767_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0768_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0768_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0768_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0768_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0769_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0769_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0769_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0769_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0770_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0770_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0770_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0770_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0771_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0771_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0771_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0771_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0772_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0772_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0772_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0772_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0773_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0773_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0773_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0773_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0774_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0774_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0774_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0774_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0775_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0775_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0775_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0775_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0776_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0776_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0776_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0776_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0777_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0777_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0777_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0777_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0778_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0778_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0778_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0778_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0779_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0779_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0779_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0779_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0780_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0780_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0780_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0780_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0781_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0781_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0781_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0781_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0782_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0782_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0782_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0782_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0783_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0783_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0783_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0783_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0784_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0784_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0784_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0784_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0785_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0785_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0785_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0785_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0786_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0786_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0786_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0786_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0787_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0787_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0787_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0787_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0788_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0788_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0788_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0788_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0789_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0789_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0789_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0789_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0790_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0790_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0790_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0790_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0791_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0791_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0791_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0791_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0792_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0792_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0792_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0792_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0793_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0793_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0793_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0793_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0794_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0794_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0794_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0794_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0795_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0795_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0795_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0795_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0796_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0796_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0796_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0796_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0797_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0797_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0797_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0797_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0798_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0798_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0798_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0798_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0799_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0799_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0799_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0799_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0800_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0800_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0800_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0800_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0801_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0801_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0801_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0801_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0802_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0802_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0802_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0802_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0803_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0803_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0803_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0803_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0804_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0804_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0804_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0804_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0805_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0805_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0805_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0805_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0806_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0806_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0806_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0806_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0807_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0807_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0807_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0807_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0808_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0808_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0808_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0808_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0809_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0809_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0809_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0809_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0810_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0810_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0810_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0810_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0811_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0811_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0811_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0811_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0812_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0812_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0812_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0812_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0813_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0813_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0813_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0813_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0814_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0814_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0814_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0814_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0815_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0815_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0815_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0815_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0816_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0816_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0816_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0816_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0817_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0817_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0817_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0817_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0818_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0818_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0818_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0818_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0819_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0819_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0819_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0819_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0820_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0820_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0820_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0820_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0821_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0821_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0821_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0821_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0822_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0822_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0822_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0822_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0823_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0823_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0823_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0823_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0824_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0824_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0824_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0824_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0825_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0825_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0825_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0825_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0826_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0826_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0826_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0826_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0827_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0827_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0827_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0827_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0828_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0828_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0828_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0828_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0829_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0829_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0829_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0829_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0830_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0830_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0830_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0830_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0831_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0831_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0831_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0831_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0832_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0832_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0832_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0832_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0833_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0833_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0833_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0833_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0834_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0834_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0834_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0834_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0835_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0835_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0835_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0835_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0836_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0836_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0836_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0836_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0837_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0837_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0837_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0837_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0838_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0838_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0838_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0838_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0839_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0839_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0839_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0839_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0840_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0840_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0840_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0840_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0841_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0841_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0841_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0841_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0842_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0842_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0842_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0842_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0843_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0843_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0843_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0843_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0844_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0844_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0844_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0844_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0845_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0845_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0845_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0845_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0846_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0846_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0846_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0846_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0847_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0847_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0847_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0847_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0848_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0848_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0848_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0848_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0849_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0849_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0849_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0849_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0850_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0850_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0850_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0850_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0851_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0851_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0851_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0851_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0852_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0852_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0852_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0852_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0853_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0853_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0853_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0853_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0854_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0854_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0854_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0854_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0855_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0855_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0855_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0855_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0856_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0856_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0856_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0856_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0857_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0857_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0857_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0857_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0858_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0858_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0858_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0858_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0859_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0859_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0859_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0859_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0860_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0860_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0860_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0860_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0861_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0861_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0861_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0861_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0862_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0862_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0862_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0862_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0863_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0863_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0863_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0863_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0864_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0864_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0864_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0864_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0865_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0865_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0865_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0865_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0866_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0866_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0866_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0866_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0867_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0867_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0867_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0867_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0868_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0868_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0868_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0868_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0869_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0869_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0869_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0869_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0870_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0870_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0870_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0870_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0871_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0871_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0871_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0871_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0872_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0872_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0872_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0872_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0873_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0873_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0873_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0873_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0874_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0874_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0874_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0874_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0875_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0875_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0875_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0875_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0876_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0876_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0876_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0876_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0877_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0877_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0877_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0877_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0878_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0878_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0878_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0878_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0879_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0879_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0879_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0879_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0880_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0880_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0880_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0880_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0881_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0881_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0881_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0881_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0882_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0882_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0882_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0882_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0883_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0883_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0883_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0883_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0884_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0884_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0884_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0884_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0885_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0885_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0885_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0885_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0886_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0886_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0886_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0886_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0887_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0887_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0887_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0887_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0888_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0888_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0888_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0888_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0889_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0889_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0889_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0889_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0890_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0890_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0890_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0890_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0891_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0891_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0891_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0891_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0892_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0892_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0892_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0892_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0893_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0893_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0893_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0893_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0894_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0894_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0894_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0894_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0895_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0895_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0895_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0895_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0896_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0896_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0896_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0896_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0897_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0897_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0897_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0897_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0898_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0898_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0898_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0898_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0899_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0899_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0899_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0899_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0900_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0900_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0900_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0900_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0901_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0901_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0901_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0901_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0902_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0902_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0902_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0902_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0903_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0903_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0903_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0903_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0904_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0904_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0904_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0904_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0905_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0905_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0905_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0905_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0906_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0906_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0906_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0906_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0907_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0907_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0907_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0907_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0908_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0908_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0908_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0908_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0909_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0909_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0909_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0909_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0910_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0910_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0910_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0910_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0911_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0911_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0911_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0911_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0912_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0912_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0912_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0912_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0913_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0913_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0913_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0913_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0914_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0914_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0914_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0914_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0915_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0915_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0915_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0915_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0916_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0916_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0916_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0916_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0917_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0917_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0917_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0917_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0918_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0918_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0918_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0918_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0919_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0919_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0919_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0919_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0920_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0920_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0920_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0920_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0921_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0921_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0921_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0921_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0922_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0922_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0922_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0922_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0923_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0923_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0923_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0923_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0924_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0924_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0924_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0924_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0925_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0925_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0925_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0925_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0926_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0926_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0926_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0926_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0927_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0927_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0927_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0927_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0928_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0928_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0928_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0928_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0929_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0929_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0929_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0929_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0930_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0930_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0930_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0930_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0931_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0931_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0931_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0931_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0932_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0932_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0932_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0932_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0933_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0933_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0933_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0933_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0934_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0934_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0934_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0934_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0935_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0935_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0935_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0935_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0936_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0936_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0936_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0936_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0937_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0937_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0937_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0937_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0938_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0938_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0938_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0938_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0939_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0939_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0939_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0939_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0940_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0940_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0940_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0940_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0941_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0941_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0941_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0941_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0942_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0942_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0942_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0942_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0943_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0943_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0943_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0943_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0944_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0944_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0944_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0944_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0945_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0945_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0945_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0945_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0946_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0946_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0946_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0946_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0947_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0947_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0947_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0947_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0948_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0948_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0948_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0948_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0949_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0949_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0949_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0949_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0950_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0950_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0950_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0950_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0951_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0951_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0951_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0951_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0952_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0952_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0952_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0952_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0953_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0953_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0953_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0953_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0954_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0954_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0954_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0954_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0955_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0955_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0955_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0955_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0956_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0956_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0956_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0956_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0957_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0957_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0957_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0957_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0958_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0958_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0958_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0958_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0959_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0959_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0959_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0959_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0960_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0960_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0960_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0960_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0961_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0961_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0961_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0961_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0962_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0962_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0962_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0962_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0963_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0963_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0963_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0963_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0964_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0964_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0964_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0964_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0965_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0965_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0965_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0965_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0966_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0966_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0966_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0966_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0967_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0967_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0967_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0967_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0968_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0968_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0968_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0968_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0969_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0969_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0969_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0969_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0970_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0970_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0970_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0970_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0971_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0971_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0971_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0971_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0972_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0972_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0972_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0972_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0973_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0973_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0973_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0973_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0974_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0974_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0974_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0974_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0975_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0975_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0975_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0975_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0976_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0976_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0976_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0976_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0977_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0977_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0977_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0977_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0978_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0978_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0978_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0978_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0979_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0979_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0979_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0979_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0980_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0980_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0980_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0980_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0981_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0981_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0981_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0981_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0982_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0982_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0982_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0982_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0983_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0983_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0983_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0983_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0984_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0984_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0984_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0984_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0985_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0985_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0985_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0985_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0986_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0986_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0986_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0986_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0987_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0987_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0987_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0987_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0988_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0988_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0988_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0988_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0989_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0989_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0989_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0989_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0990_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0990_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0990_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0990_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0991_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0991_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0991_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0991_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0992_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0992_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0992_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0992_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0993_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0993_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0993_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0993_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0994_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0994_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0994_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0994_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0995_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0995_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0995_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0995_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0996_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0996_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0996_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0996_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0997_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0997_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0997_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0997_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0998_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0998_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0998_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0998_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/0999_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0999_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/0999_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/0999_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1000_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1000_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1000_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1000_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1001_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1001_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1001_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1001_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1002_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1002_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1002_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1002_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1003_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1003_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1003_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1003_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1004_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1004_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1004_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1004_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1005_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1005_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1005_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1005_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1006_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1006_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1006_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1006_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1007_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1007_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1007_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1007_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1008_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1008_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1008_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1008_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1009_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1009_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1009_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1009_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1010_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1010_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1010_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1010_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1011_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1011_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1011_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1011_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1012_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1012_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1012_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1012_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1013_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1013_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1013_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1013_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1014_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1014_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1014_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1014_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1015_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1015_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1015_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1015_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1016_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1016_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1016_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1016_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1017_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1017_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1017_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1017_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1018_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1018_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1018_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1018_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1019_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1019_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1019_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1019_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1020_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1020_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1020_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1020_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1021_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1021_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1021_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1021_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1022_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1022_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1022_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1022_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1023_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1023_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1023_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1023_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1024_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1024_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1024_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1024_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1025_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1025_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1025_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1025_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1026_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1026_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1026_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1026_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1027_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1027_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1027_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1027_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1028_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1028_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1028_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1028_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1029_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1029_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1029_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1029_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1030_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1030_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1030_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1030_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1031_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1031_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1031_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1031_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1032_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1032_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1032_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1032_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1033_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1033_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1033_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1033_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1034_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1034_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1034_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1034_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1035_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1035_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1035_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1035_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1036_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1036_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1036_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1036_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1037_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1037_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1037_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1037_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1038_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1038_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1038_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1038_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1039_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1039_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1039_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1039_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1040_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1040_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1040_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1040_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1041_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1041_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1041_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1041_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1042_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1042_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1042_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1042_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1043_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1043_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1043_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1043_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1044_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1044_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1044_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1044_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1045_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1045_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1045_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1045_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1046_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1046_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1046_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1046_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1047_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1047_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1047_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1047_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1048_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1048_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1048_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1048_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1049_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1049_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1049_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1049_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1050_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1050_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1050_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1050_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1051_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1051_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1051_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1051_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1052_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1052_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1052_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1052_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1053_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1053_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1053_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1053_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1054_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1054_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1054_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1054_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1055_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1055_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1055_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1055_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1056_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1056_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1056_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1056_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1057_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1057_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1057_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1057_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1058_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1058_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1058_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1058_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1059_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1059_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1059_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1059_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1060_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1060_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1060_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1060_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1061_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1061_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1061_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1061_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1062_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1062_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1062_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1062_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1063_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1063_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1063_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1063_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1064_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1064_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1064_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1064_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1065_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1065_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1065_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1065_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1066_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1066_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1066_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1066_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1067_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1067_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1067_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1067_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1068_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1068_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1068_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1068_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1069_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1069_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1069_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1069_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1070_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1070_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1070_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1070_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1071_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1071_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1071_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1071_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1072_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1072_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1072_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1072_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1073_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1073_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1073_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1073_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1074_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1074_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1074_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1074_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1075_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1075_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1075_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1075_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1076_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1076_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1076_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1076_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1077_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1077_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1077_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1077_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1078_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1078_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1078_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1078_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1079_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1079_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1079_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1079_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1080_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1080_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1080_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1080_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1081_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1081_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1081_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1081_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1082_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1082_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1082_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1082_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1083_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1083_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1083_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1083_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1084_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1084_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1084_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1084_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1085_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1085_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1085_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1085_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1086_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1086_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1086_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1086_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1087_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1087_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1087_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1087_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1088_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1088_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1088_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1088_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1089_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1089_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1089_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1089_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1090_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1090_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1090_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1090_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1091_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1091_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1091_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1091_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1092_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1092_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1092_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1092_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1093_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1093_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1093_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1093_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1094_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1094_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1094_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1094_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1095_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1095_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1095_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1095_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1096_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1096_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1096_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1096_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1097_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1097_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1097_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1097_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1098_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1098_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1098_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1098_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1099_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1099_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1099_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1099_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1100_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1100_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1100_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1100_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1101_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1101_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1101_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1101_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1102_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1102_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1102_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1102_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1103_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1103_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1103_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1103_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1104_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1104_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1104_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1104_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1105_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1105_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1105_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1105_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1106_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1106_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1106_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1106_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1107_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1107_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1107_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1107_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1108_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1108_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1108_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1108_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1109_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1109_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1109_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1109_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1110_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1110_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1110_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1110_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1111_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1111_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1111_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1111_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1112_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1112_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1112_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1112_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1113_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1113_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1113_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1113_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1114_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1114_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1114_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1114_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1115_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1115_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1115_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1115_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1116_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1116_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1116_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1116_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1117_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1117_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1117_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1117_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1118_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1118_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1118_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1118_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1119_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1119_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1119_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1119_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1120_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1120_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1120_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1120_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1121_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1121_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1121_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1121_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1122_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1122_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1122_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1122_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1123_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1123_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1123_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1123_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1124_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1124_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1124_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1124_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1125_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1125_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1125_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1125_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1126_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1126_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1126_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1126_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1127_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1127_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1127_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1127_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1128_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1128_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1128_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1128_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1129_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1129_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1129_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1129_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1130_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1130_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1130_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1130_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1131_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1131_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1131_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1131_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1132_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1132_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1132_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1132_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1133_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1133_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1133_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1133_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1134_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1134_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1134_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1134_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1135_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1135_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1135_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1135_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1136_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1136_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1136_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1136_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1137_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1137_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1137_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1137_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1138_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1138_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1138_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1138_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1139_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1139_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1139_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1139_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1140_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1140_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1140_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1140_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1141_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1141_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1141_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1141_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1142_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1142_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1142_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1142_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1143_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1143_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1143_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1143_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1144_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1144_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1144_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1144_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1145_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1145_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1145_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1145_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1146_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1146_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1146_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1146_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1147_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1147_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1147_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1147_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1148_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1148_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1148_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1148_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1149_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1149_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1149_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1149_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1150_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1150_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1150_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1150_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1151_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1151_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1151_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1151_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1152_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1152_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1152_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1152_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1153_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1153_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1153_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1153_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1154_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1154_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1154_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1154_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1155_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1155_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1155_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1155_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1156_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1156_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1156_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1156_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1157_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1157_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1157_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1157_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1158_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1158_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1158_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1158_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1159_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1159_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1159_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1159_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1160_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1160_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1160_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1160_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1161_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1161_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1161_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1161_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1162_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1162_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1162_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1162_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1163_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1163_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1163_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1163_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1164_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1164_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1164_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1164_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1165_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1165_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1165_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1165_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1166_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1166_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1166_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1166_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1167_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1167_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1167_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1167_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1168_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1168_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1168_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1168_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1169_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1169_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1169_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1169_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1170_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1170_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1170_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1170_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1171_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1171_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1171_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1171_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1172_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1172_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1172_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1172_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1173_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1173_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1173_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1173_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1174_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1174_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1174_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1174_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1175_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1175_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1175_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1175_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1176_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1176_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1176_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1176_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1177_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1177_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1177_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1177_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1178_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1178_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1178_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1178_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1179_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1179_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1179_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1179_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1180_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1180_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1180_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1180_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1181_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1181_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1181_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1181_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1182_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1182_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1182_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1182_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1183_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1183_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1183_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1183_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1184_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1184_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1184_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1184_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1185_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1185_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1185_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1185_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1186_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1186_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1186_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1186_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1187_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1187_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1187_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1187_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1188_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1188_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1188_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1188_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1189_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1189_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1189_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1189_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1190_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1190_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1190_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1190_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1191_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1191_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1191_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1191_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1192_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1192_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1192_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1192_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1193_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1193_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1193_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1193_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1194_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1194_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1194_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1194_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1195_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1195_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1195_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1195_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1196_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1196_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1196_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1196_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1197_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1197_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1197_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1197_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1198_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1198_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1198_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1198_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1199_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1199_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1199_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1199_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1200_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1200_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1200_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1200_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/csr/1201_csr-certbot.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1201_csr-certbot.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/csr/1201_csr-certbot.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/csr/1201_csr-certbot.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/README b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/README similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/README rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/README diff --git a/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/README b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/README similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/README rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/README diff --git a/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/cert.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/cert.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/cert.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/cert.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/chain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/chain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/chain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/chain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/fullchain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/fullchain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/fullchain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/fullchain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/privkey.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/privkey.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/privkey.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/dip-zero.geumdo.net/privkey.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/README b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/README similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/README rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/README diff --git a/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/cert.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/cert.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/cert.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/cert.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/chain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/chain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/chain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/chain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/fullchain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/fullchain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/fullchain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/fullchain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/privkey.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/privkey.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/privkey.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/mail.geumdo.net/privkey.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/README b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/README similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/README rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/README diff --git a/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/cert.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/cert.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/cert.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/cert.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/chain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/chain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/chain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/chain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/fullchain.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/fullchain.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/fullchain.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/fullchain.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/privkey.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/privkey.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/privkey.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/live/proxy.geumdo.net/privkey.pem diff --git a/docker/docker_nginx_proxy/letsencrypt/options-ssl-nginx.conf b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/options-ssl-nginx.conf similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/options-ssl-nginx.conf rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/options-ssl-nginx.conf diff --git a/docker/docker_nginx_proxy/letsencrypt/renewal/dip-zero.geumdo.net.conf b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/dip-zero.geumdo.net.conf similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/renewal/dip-zero.geumdo.net.conf rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/dip-zero.geumdo.net.conf diff --git a/docker/docker_nginx_proxy/letsencrypt/renewal/mail.geumdo.net.conf b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/mail.geumdo.net.conf similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/renewal/mail.geumdo.net.conf rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/mail.geumdo.net.conf diff --git a/docker/docker_nginx_proxy/letsencrypt/renewal/proxy.geumdo.net.conf b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/proxy.geumdo.net.conf similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/renewal/proxy.geumdo.net.conf rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/renewal/proxy.geumdo.net.conf diff --git a/docker/docker_nginx_proxy/letsencrypt/ssl-dhparams.pem b/1_infrastructure/docker/docker_nginx_proxy/letsencrypt/ssl-dhparams.pem similarity index 100% rename from docker/docker_nginx_proxy/letsencrypt/ssl-dhparams.pem rename to 1_infrastructure/docker/docker_nginx_proxy/letsencrypt/ssl-dhparams.pem diff --git a/docker/docker_nginx_proxy/nginx.conf b/1_infrastructure/docker/docker_nginx_proxy/nginx.conf similarity index 100% rename from docker/docker_nginx_proxy/nginx.conf rename to 1_infrastructure/docker/docker_nginx_proxy/nginx.conf diff --git a/docker/docker_nginx_proxy/rebuild_docker.sh b/1_infrastructure/docker/docker_nginx_proxy/rebuild_docker.sh similarity index 100% rename from docker/docker_nginx_proxy/rebuild_docker.sh rename to 1_infrastructure/docker/docker_nginx_proxy/rebuild_docker.sh diff --git a/docker/docker_nginx_proxy/sites-available/3dp_nextcloud.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/3dp_nextcloud.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/3dp_nextcloud.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/3dp_nextcloud.conf diff --git a/docker/docker_nginx_proxy/sites-available/ai_was.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/ai_was.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/ai_was.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/ai_was.conf diff --git a/docker/docker_nginx_proxy/sites-available/default b/1_infrastructure/docker/docker_nginx_proxy/sites-available/default similarity index 100% rename from docker/docker_nginx_proxy/sites-available/default rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/default diff --git a/docker/docker_nginx_proxy/sites-available/dmi.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/dmi.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/dmi.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/dmi.conf diff --git a/docker/docker_nginx_proxy/sites-available/fastapi.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/fastapi.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/fastapi.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/fastapi.conf diff --git a/docker/docker_nginx_proxy/sites-available/flask_proxy.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/flask_proxy.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/flask_proxy.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/flask_proxy.conf diff --git a/docker/docker_nginx_proxy/sites-available/flaskapi.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/flaskapi.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/flaskapi.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/flaskapi.conf diff --git a/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade.conf diff --git a/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade_http.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade_http.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade_http.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_java_upgrade_http.conf diff --git a/docker/docker_nginx_proxy/sites-available/geumdo_ollama_docker.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_ollama_docker.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/geumdo_ollama_docker.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_ollama_docker.conf diff --git a/docker/docker_nginx_proxy/sites-available/geumdo_ollamaui_docker.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_ollamaui_docker.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/geumdo_ollamaui_docker.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/geumdo_ollamaui_docker.conf diff --git a/docker/docker_nginx_proxy/sites-available/jupyter.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/jupyter.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/jupyter.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/jupyter.conf diff --git a/docker/docker_nginx_proxy/sites-available/posteio.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/posteio.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/posteio.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/posteio.conf diff --git a/docker/docker_nginx_proxy/sites-available/sw3d-dev.conf b/1_infrastructure/docker/docker_nginx_proxy/sites-available/sw3d-dev.conf similarity index 100% rename from docker/docker_nginx_proxy/sites-available/sw3d-dev.conf rename to 1_infrastructure/docker/docker_nginx_proxy/sites-available/sw3d-dev.conf diff --git a/docker/docker_nginx_proxy/ssl-certs/nginx.crt b/1_infrastructure/docker/docker_nginx_proxy/ssl-certs/nginx.crt similarity index 100% rename from docker/docker_nginx_proxy/ssl-certs/nginx.crt rename to 1_infrastructure/docker/docker_nginx_proxy/ssl-certs/nginx.crt diff --git a/docker/docker_nginx_proxy/ssl-certs/nginx.key b/1_infrastructure/docker/docker_nginx_proxy/ssl-certs/nginx.key similarity index 100% rename from docker/docker_nginx_proxy/ssl-certs/nginx.key rename to 1_infrastructure/docker/docker_nginx_proxy/ssl-certs/nginx.key diff --git a/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.key b/1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.key similarity index 100% rename from docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.key rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.key diff --git a/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.p7b b/1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.p7b similarity index 100% rename from docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.p7b rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.p7b diff --git a/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.pem b/1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.pem similarity index 100% rename from docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.pem rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.pem diff --git a/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.private.key b/1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.private.key similarity index 100% rename from docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.private.key rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/gdlab.co.kr.private.key diff --git a/docker/docker_nginx_proxy/ssl/gdlab.co.kr/key.pem b/1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/key.pem similarity index 100% rename from docker/docker_nginx_proxy/ssl/gdlab.co.kr/key.pem rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/gdlab.co.kr/key.pem diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/DigiCertCAG1.crt b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/DigiCertCAG1.crt similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/DigiCertCAG1.crt rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/DigiCertCAG1.crt diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/TrustedRootG2.crt b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/TrustedRootG2.crt similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/TrustedRootG2.crt rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/TrustedRootG2.crt diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/bundle.pem b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/bundle.pem similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/bundle.pem rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/bundle.pem diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.crt b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.crt similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.crt rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.crt diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.csr b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.csr similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.csr rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.csr diff --git a/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.key b/1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.key similarity index 100% rename from docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.key rename to 1_infrastructure/docker/docker_nginx_proxy/ssl/geumdo.net/geumdo.net.key diff --git a/docker/docker_nginx_proxy/start_service.sh b/1_infrastructure/docker/docker_nginx_proxy/start_service.sh similarity index 100% rename from docker/docker_nginx_proxy/start_service.sh rename to 1_infrastructure/docker/docker_nginx_proxy/start_service.sh diff --git a/1_infrastructure/docker/docker_open_webui/.gitignore b/1_infrastructure/docker/docker_open_webui/.gitignore new file mode 100644 index 0000000..32271f8 --- /dev/null +++ b/1_infrastructure/docker/docker_open_webui/.gitignore @@ -0,0 +1,309 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +vite.config.js.timestamp-* +vite.config.ts.timestamp-* +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Pyodide distribution +static/pyodide/* +!static/pyodide/pyodide-lock.json + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# cypress artifacts +cypress/videos +cypress/screenshots +.vscode/settings.json diff --git a/1_infrastructure/docker/docker_open_webui/Dockerfile b/1_infrastructure/docker/docker_open_webui/Dockerfile new file mode 100644 index 0000000..679d7ae --- /dev/null +++ b/1_infrastructure/docker/docker_open_webui/Dockerfile @@ -0,0 +1,161 @@ +# syntax=docker/dockerfile:1 +# Initialize device type args +# use build args in the docker build commmand with --build-arg="BUILDARG=true" +ARG USE_CUDA=false +ARG USE_OLLAMA=false +# Tested with cu117 for CUDA 11 and cu121 for CUDA 12 (default) +ARG USE_CUDA_VER=cu121 +# any sentence transformer model; models to use can be found at https://huggingface.co/models?library=sentence-transformers +# Leaderboard: https://huggingface.co/spaces/mteb/leaderboard +# for better performance and multilangauge support use "intfloat/multilingual-e5-large" (~2.5GB) or "intfloat/multilingual-e5-base" (~1.5GB) +# IMPORTANT: If you change the embedding model (sentence-transformers/all-MiniLM-L6-v2) and vice versa, you aren't able to use RAG Chat with your previous documents loaded in the WebUI! You need to re-embed them. +ARG USE_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v2 +ARG USE_RERANKING_MODEL="" +ARG BUILD_HASH=dev-build +# Override at your own risk - non-root configurations are untested +ARG UID=0 +ARG GID=0 + +######## WebUI frontend ######## +FROM --platform=$BUILDPLATFORM node:21-alpine3.19 as build +ARG BUILD_HASH + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY . . +ENV APP_BUILD_HASH=${BUILD_HASH} +RUN npm run build + +######## WebUI backend ######## +FROM python:3.11-slim-bookworm as base + +# Use args +ARG USE_CUDA +ARG USE_OLLAMA +ARG USE_CUDA_VER +ARG USE_EMBEDDING_MODEL +ARG USE_RERANKING_MODEL +ARG UID +ARG GID + +## Basis ## +ENV ENV=prod \ + PORT=8080 \ + # pass build args to the build + USE_OLLAMA_DOCKER=${USE_OLLAMA} \ + USE_CUDA_DOCKER=${USE_CUDA} \ + USE_CUDA_DOCKER_VER=${USE_CUDA_VER} \ + USE_EMBEDDING_MODEL_DOCKER=${USE_EMBEDDING_MODEL} \ + USE_RERANKING_MODEL_DOCKER=${USE_RERANKING_MODEL} + +## Basis URL Config ## +ENV OLLAMA_BASE_URL="/ollama" \ + OPENAI_API_BASE_URL="" + +## API Key and Security Config ## +ENV OPENAI_API_KEY="" \ + WEBUI_SECRET_KEY="" \ + SCARF_NO_ANALYTICS=true \ + DO_NOT_TRACK=true \ + ANONYMIZED_TELEMETRY=false + +#### Other models ######################################################### +## whisper TTS model settings ## +ENV WHISPER_MODEL="base" \ + WHISPER_MODEL_DIR="/app/backend/data/cache/whisper/models" + +## RAG Embedding model settings ## +ENV RAG_EMBEDDING_MODEL="$USE_EMBEDDING_MODEL_DOCKER" \ + RAG_RERANKING_MODEL="$USE_RERANKING_MODEL_DOCKER" \ + SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models" + +## Hugging Face download cache ## +ENV HF_HOME="/app/backend/data/cache/embedding/models" +#### Other models ########################################################## + +WORKDIR /app/backend + +ENV HOME /root +# Create user and group if not root +RUN if [ $UID -ne 0 ]; then \ + if [ $GID -ne 0 ]; then \ + addgroup --gid $GID app; \ + fi; \ + adduser --uid $UID --gid $GID --home $HOME --disabled-password --no-create-home app; \ + fi + +RUN mkdir -p $HOME/.cache/chroma +RUN echo -n 00000000-0000-0000-0000-000000000000 > $HOME/.cache/chroma/telemetry_user_id + +# Make sure the user has access to the app and root directory +RUN chown -R $UID:$GID /app $HOME + +RUN if [ "$USE_OLLAMA" = "true" ]; then \ + apt-get update && \ + # Install pandoc and netcat + apt-get install -y --no-install-recommends pandoc netcat-openbsd curl && \ + apt-get install -y --no-install-recommends gcc python3-dev && \ + # for RAG OCR + apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 && \ + # install helper tools + apt-get install -y --no-install-recommends curl jq && \ + # install ollama + curl -fsSL https://ollama.com/install.sh | sh && \ + # cleanup + rm -rf /var/lib/apt/lists/*; \ + else \ + apt-get update && \ + # Install pandoc, netcat and gcc + apt-get install -y --no-install-recommends pandoc gcc netcat-openbsd curl jq && \ + apt-get install -y --no-install-recommends gcc python3-dev && \ + # for RAG OCR + apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 && \ + # cleanup + rm -rf /var/lib/apt/lists/*; \ + fi + +# install python dependencies +COPY --chown=$UID:$GID ./backend/requirements.txt ./requirements.txt + +RUN pip3 install uv && \ + if [ "$USE_CUDA" = "true" ]; then \ + # If you use CUDA the whisper and embedding model will be downloaded on first use + pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/$USE_CUDA_DOCKER_VER --no-cache-dir && \ + uv pip install --system -r requirements.txt --no-cache-dir && \ + python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ + python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \ + else \ + pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --no-cache-dir && \ + uv pip install --system -r requirements.txt --no-cache-dir && \ + python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \ + python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \ + fi; \ + chown -R $UID:$GID /app/backend/data/ + + + +# copy embedding weight from build +# RUN mkdir -p /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2 +# COPY --from=build /app/onnx /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx + +# copy built frontend files +COPY --chown=$UID:$GID --from=build /app/build /app/build +COPY --chown=$UID:$GID --from=build /app/CHANGELOG.md /app/CHANGELOG.md +COPY --chown=$UID:$GID --from=build /app/package.json /app/package.json + +# copy backend files +COPY --chown=$UID:$GID ./backend . + +EXPOSE 8080 11434 + +HEALTHCHECK CMD curl --silent --fail http://localhost:8080/health | jq -e '.status == true' || exit 1 + +USER $UID:$GID + +ARG BUILD_HASH +ENV WEBUI_BUILD_VERSION=${BUILD_HASH} + +CMD [ "bash", "start.sh"] diff --git a/1_infrastructure/docker/docker_open_webui/README.md b/1_infrastructure/docker/docker_open_webui/README.md new file mode 100644 index 0000000..f3cfe0d --- /dev/null +++ b/1_infrastructure/docker/docker_open_webui/README.md @@ -0,0 +1,203 @@ +# Open WebUI (Formerly Ollama WebUI) 👋 + +![GitHub stars](https://img.shields.io/github/stars/open-webui/open-webui?style=social) +![GitHub forks](https://img.shields.io/github/forks/open-webui/open-webui?style=social) +![GitHub watchers](https://img.shields.io/github/watchers/open-webui/open-webui?style=social) +![GitHub repo size](https://img.shields.io/github/repo-size/open-webui/open-webui) +![GitHub language count](https://img.shields.io/github/languages/count/open-webui/open-webui) +![GitHub top language](https://img.shields.io/github/languages/top/open-webui/open-webui) +![GitHub last commit](https://img.shields.io/github/last-commit/open-webui/open-webui?color=red) +![Hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Follama-webui%2Follama-wbui&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=false) +[![Discord](https://img.shields.io/badge/Discord-Open_WebUI-blue?logo=discord&logoColor=white)](https://discord.gg/5rJgQTnV4s) +[![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/tjbck) + +Open WebUI is an [extensible](https://github.com/open-webui/pipelines), feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline. It supports various LLM runners, including Ollama and OpenAI-compatible APIs. For more information, be sure to check out our [Open WebUI Documentation](https://docs.openwebui.com/). + +![Open WebUI Demo](./demo.gif) + +## Key Features of Open WebUI ⭐ + +- 🚀 **Effortless Setup**: Install seamlessly using Docker or Kubernetes (kubectl, kustomize or helm) for a hassle-free experience with support for both `:ollama` and `:cuda` tagged images. + +- 🤝 **Ollama/OpenAI API Integration**: Effortlessly integrate OpenAI-compatible APIs for versatile conversations alongside Ollama models. Customize the OpenAI API URL to link with **LMStudio, GroqCloud, Mistral, OpenRouter, and more**. + +- 🧩 **Pipelines, Open WebUI Plugin Support**: Seamlessly integrate custom logic and Python libraries into Open WebUI using [Pipelines Plugin Framework](https://github.com/open-webui/pipelines). Launch your Pipelines instance, set the OpenAI URL to the Pipelines URL, and explore endless possibilities. [Examples](https://github.com/open-webui/pipelines/tree/main/examples) include **Function Calling**, User **Rate Limiting** to control access, **Usage Monitoring** with tools like Langfuse, **Live Translation with LibreTranslate** for multilingual support, **Toxic Message Filtering** and much more. + +- 📱 **Responsive Design**: Enjoy a seamless experience across Desktop PC, Laptop, and Mobile devices. + +- 📱 **Progressive Web App (PWA) for Mobile**: Enjoy a native app-like experience on your mobile device with our PWA, providing offline access on localhost and a seamless user interface. + +- ✒️🔢 **Full Markdown and LaTeX Support**: Elevate your LLM experience with comprehensive Markdown and LaTeX capabilities for enriched interaction. + +- 🎤📹 **Hands-Free Voice/Video Call**: Experience seamless communication with integrated hands-free voice and video call features, allowing for a more dynamic and interactive chat environment. + +- 🛠️ **Model Builder**: Easily create Ollama models via the Web UI. Create and add custom characters/agents, customize chat elements, and import models effortlessly through [Open WebUI Community](https://openwebui.com/) integration. + +- 🐍 **Native Python Function Calling Tool**: Enhance your LLMs with built-in code editor support in the tools workspace. Bring Your Own Function (BYOF) by simply adding your pure Python functions, enabling seamless integration with LLMs. + +- 📚 **Local RAG Integration**: Dive into the future of chat interactions with groundbreaking Retrieval Augmented Generation (RAG) support. This feature seamlessly integrates document interactions into your chat experience. You can load documents directly into the chat or add files to your document library, effortlessly accessing them using the `#` command before a query. + +- 🔍 **Web Search for RAG**: Perform web searches using providers like `SearXNG`, `Google PSE`, `Brave Search`, `serpstack`, `serper`, `Serply`, `DuckDuckGo` and `TavilySearch` and inject the results directly into your chat experience. + +- 🌐 **Web Browsing Capability**: Seamlessly integrate websites into your chat experience using the `#` command followed by a URL. This feature allows you to incorporate web content directly into your conversations, enhancing the richness and depth of your interactions. + +- 🎨 **Image Generation Integration**: Seamlessly incorporate image generation capabilities using options such as AUTOMATIC1111 API or ComfyUI (local), and OpenAI's DALL-E (external), enriching your chat experience with dynamic visual content. + +- ⚙️ **Many Models Conversations**: Effortlessly engage with various models simultaneously, harnessing their unique strengths for optimal responses. Enhance your experience by leveraging a diverse set of models in parallel. + +- 🔐 **Role-Based Access Control (RBAC)**: Ensure secure access with restricted permissions; only authorized individuals can access your Ollama, and exclusive model creation/pulling rights are reserved for administrators. + +- 🌐🌍 **Multilingual Support**: Experience Open WebUI in your preferred language with our internationalization (i18n) support. Join us in expanding our supported languages! We're actively seeking contributors! + +- 🌟 **Continuous Updates**: We are committed to improving Open WebUI with regular updates, fixes, and new features. + +Want to learn more about Open WebUI's features? Check out our [Open WebUI documentation](https://docs.openwebui.com/features) for a comprehensive overview! + +## 🔗 Also Check Out Open WebUI Community! + +Don't forget to explore our sibling project, [Open WebUI Community](https://openwebui.com/), where you can discover, download, and explore customized Modelfiles. Open WebUI Community offers a wide range of exciting possibilities for enhancing your chat interactions with Open WebUI! 🚀 + +## How to Install 🚀 + +> [!NOTE] +> Please note that for certain Docker environments, additional configurations might be needed. If you encounter any connection issues, our detailed guide on [Open WebUI Documentation](https://docs.openwebui.com/) is ready to assist you. + +### Quick Start with Docker 🐳 + +> [!WARNING] +> When using Docker to install Open WebUI, make sure to include the `-v open-webui:/app/backend/data` in your Docker command. This step is crucial as it ensures your database is properly mounted and prevents any loss of data. + +> [!TIP] +> If you wish to utilize Open WebUI with Ollama included or CUDA acceleration, we recommend utilizing our official images tagged with either `:cuda` or `:ollama`. To enable CUDA, you must install the [Nvidia CUDA container toolkit](https://docs.nvidia.com/dgx/nvidia-container-runtime-upgrade/) on your Linux/WSL system. + +### Installation with Default Configuration + +- **If Ollama is on your computer**, use this command: + + ```bash + docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main + ``` + +- **If Ollama is on a Different Server**, use this command: + + To connect to Ollama on another server, change the `OLLAMA_BASE_URL` to the server's URL: + + ```bash + docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main + ``` + + - **To run Open WebUI with Nvidia GPU support**, use this command: + + ```bash + docker run -d -p 3000:8080 --gpus all --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:cuda + ``` + +### Installation for OpenAI API Usage Only + +- **If you're only using OpenAI API**, use this command: + + ```bash + docker run -d -p 3000:8080 -e OPENAI_API_KEY=your_secret_key -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main + ``` + +### Installing Open WebUI with Bundled Ollama Support + +This installation method uses a single container image that bundles Open WebUI with Ollama, allowing for a streamlined setup via a single command. Choose the appropriate command based on your hardware setup: + +- **With GPU Support**: + Utilize GPU resources by running the following command: + + ```bash + docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama + ``` + +- **For CPU Only**: + If you're not using a GPU, use this command instead: + + ```bash + docker run -d -p 3000:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama + ``` + +Both commands facilitate a built-in, hassle-free installation of both Open WebUI and Ollama, ensuring that you can get everything up and running swiftly. + +After installation, you can access Open WebUI at [http://localhost:3000](http://localhost:3000). Enjoy! 😄 + +### Other Installation Methods + +We offer various installation alternatives, including non-Docker native installation methods, Docker Compose, Kustomize, and Helm. Visit our [Open WebUI Documentation](https://docs.openwebui.com/getting-started/) or join our [Discord community](https://discord.gg/5rJgQTnV4s) for comprehensive guidance. + +### Troubleshooting + +Encountering connection issues? Our [Open WebUI Documentation](https://docs.openwebui.com/troubleshooting/) has got you covered. For further assistance and to join our vibrant community, visit the [Open WebUI Discord](https://discord.gg/5rJgQTnV4s). + +#### Open WebUI: Server Connection Error + +If you're experiencing connection issues, it’s often due to the WebUI docker container not being able to reach the Ollama server at 127.0.0.1:11434 (host.docker.internal:11434) inside the container . Use the `--network=host` flag in your docker command to resolve this. Note that the port changes from 3000 to 8080, resulting in the link: `http://localhost:8080`. + +**Example Docker Command**: + +```bash +docker run -d --network=host -v open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main +``` + +### Keeping Your Docker Installation Up-to-Date + +In case you want to update your local Docker installation to the latest version, you can do it with [Watchtower](https://containrrr.dev/watchtower/): + +```bash +docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui +``` + +In the last part of the command, replace `open-webui` with your container name if it is different. + +Check our Migration Guide available in our [Open WebUI Documentation](https://docs.openwebui.com/migration/). + +### Using the Dev Branch 🌙 + +> [!WARNING] +> The `:dev` branch contains the latest unstable features and changes. Use it at your own risk as it may have bugs or incomplete features. + +If you want to try out the latest bleeding-edge features and are okay with occasional instability, you can use the `:dev` tag like this: + +```bash +docker run -d -p 3000:8080 -v open-webui:/app/backend/data --name open-webui --add-host=host.docker.internal:host-gateway --restart always ghcr.io/open-webui/open-webui:dev +``` + +## What's Next? 🌟 + +Discover upcoming features on our roadmap in the [Open WebUI Documentation](https://docs.openwebui.com/roadmap/). + +## Supporters ✨ + +A big shoutout to our amazing supporters who's helping to make this project possible! 🙏 + +### Platinum Sponsors 🤍 + +- We're looking for Sponsors! + +### Acknowledgments + +Special thanks to [Prof. Lawrence Kim](https://www.lhkim.com/) and [Prof. Nick Vincent](https://www.nickmvincent.com/) for their invaluable support and guidance in shaping this project into a research endeavor. Grateful for your mentorship throughout the journey! 🙌 + +## License 📜 + +This project is licensed under the [MIT License](LICENSE) - see the [LICENSE](LICENSE) file for details. 📄 + +## Support 💬 + +If you have any questions, suggestions, or need assistance, please open an issue or join our +[Open WebUI Discord community](https://discord.gg/5rJgQTnV4s) to connect with us! 🤝 + +## Star History + + + + + + Star History Chart + + + +--- + +Created by [Timothy J. Baek](https://github.com/tjbck) - Let's make Open WebUI even more amazing together! 💪 diff --git a/1_infrastructure/docker/docker_open_webui/docker-compose.yaml b/1_infrastructure/docker/docker_open_webui/docker-compose.yaml new file mode 100644 index 0000000..fdb6c6d --- /dev/null +++ b/1_infrastructure/docker/docker_open_webui/docker-compose.yaml @@ -0,0 +1,64 @@ +version: '3' + +services: + ollama: + volumes: + - ollama:/root/.ollama + container_name: ollama + pull_policy: always + tty: true + restart: unless-stopped + image: ollama/ollama:${OLLAMA_DOCKER_TAG-latest} + command: sh -c "ollama pull qwq:32b && ollama serve" + ports: + - 11434:11434 + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] + count: 4 + + open-webui: + build: + context: . + args: + OLLAMA_BASE_URL: '/ollama' + dockerfile: Dockerfile + image: ghcr.io/open-webui/open-webui:${WEBUI_DOCKER_TAG-main} + container_name: open-webui + volumes: + - open-webui:/app/backend/data + depends_on: + - ollama + ports: + - ${OPEN_WEBUI_PORT-9000}:8080 + environment: + - 'OLLAMA_BASE_URL=http://ollama:11434' # localhost 대신 ollama 사용 + - 'WEBUI_SECRET_KEY=' + extra_hosts: + - host.docker.internal:host-gateway + restart: unless-stopped + + openmanus: + build: + context: . + dockerfile: Dockerfile.openmanus + container_name: openmanus + depends_on: + - ollama + deploy: + resources: + reservations: + devices: + - driver: nvidia + capabilities: ["gpu"] + count: 4 + tty: true + stdin_open: true + restart: unless-stopped + +volumes: + ollama: {} + open-webui: {} diff --git a/docker/docker_posivibes/Dockerfile b/1_infrastructure/docker/docker_posivibes/Dockerfile similarity index 100% rename from docker/docker_posivibes/Dockerfile rename to 1_infrastructure/docker/docker_posivibes/Dockerfile diff --git a/docker/docker_posivibes/README.md b/1_infrastructure/docker/docker_posivibes/README.md similarity index 100% rename from docker/docker_posivibes/README.md rename to 1_infrastructure/docker/docker_posivibes/README.md diff --git a/docker/docker_posivibes/docker-compose.yml b/1_infrastructure/docker/docker_posivibes/docker-compose.yml similarity index 100% rename from docker/docker_posivibes/docker-compose.yml rename to 1_infrastructure/docker/docker_posivibes/docker-compose.yml diff --git a/docker/docker_posivibes/rebuild_docker.sh b/1_infrastructure/docker/docker_posivibes/rebuild_docker.sh similarity index 100% rename from docker/docker_posivibes/rebuild_docker.sh rename to 1_infrastructure/docker/docker_posivibes/rebuild_docker.sh diff --git a/docker/docker_posivibes/start_service.sh b/1_infrastructure/docker/docker_posivibes/start_service.sh similarity index 100% rename from docker/docker_posivibes/start_service.sh rename to 1_infrastructure/docker/docker_posivibes/start_service.sh diff --git a/1_infrastructure/docker/docker_prusa_exporter/.gitignore b/1_infrastructure/docker/docker_prusa_exporter/.gitignore new file mode 100644 index 0000000..e660fd9 --- /dev/null +++ b/1_infrastructure/docker/docker_prusa_exporter/.gitignore @@ -0,0 +1 @@ +bin/ diff --git a/1_infrastructure/docker/docker_prusa_exporter/Dockerfile b/1_infrastructure/docker/docker_prusa_exporter/Dockerfile new file mode 100644 index 0000000..67a5a48 --- /dev/null +++ b/1_infrastructure/docker/docker_prusa_exporter/Dockerfile @@ -0,0 +1,22 @@ +# syntax=docker/dockerfile:1 + +FROM golang:1.21-alpine AS builder + +WORKDIR /app + +COPY go.* ./ +RUN go mod download + +COPY . ./ + +COPY *.go ./ + +RUN go build -v -o /prusa_exporter + +FROM alpine:latest + +COPY --from=builder /prusa_exporter . + +EXPOSE 10009 + +ENTRYPOINT ["/prusa_exporter"] \ No newline at end of file diff --git a/1_infrastructure/docker/docker_prusa_exporter/README.md b/1_infrastructure/docker/docker_prusa_exporter/README.md new file mode 100644 index 0000000..031d8fd --- /dev/null +++ b/1_infrastructure/docker/docker_prusa_exporter/README.md @@ -0,0 +1,129 @@ +[![docker](https://img.shields.io/github/actions/workflow/status/pstrobl96/prusa_exporter/docker.yml)](https://github.com/pstrobl96/prusa_exporter/actions/workflows/docker.yml) +[![rpi](https://img.shields.io/github/actions/workflow/status/pstrobl96/prusa_exporter/rpi.yml)](https://github.com/pstrobl96/prusa_exporter/actions/workflows/rpi.yml) +![issues](https://img.shields.io/github/issues/pstrobl96/prusa_exporter) +![go](https://img.shields.io/github/go-mod/go-version/pstrobl96/prusa_exporter) +![tag](https://img.shields.io/github/v/tag/pstrobl96/prusa_exporter) +![license](https://img.shields.io/github/license/pstrobl96/prusa_exporter) + +# Prusa Exporter - formerly Buddy Link Prometheus Exporter + +This is an implementation of Prometheus Exporter for Prusa printers running Buddy boards (Prusa MK4, XL, and Mini), Einsy boards (Prusa MK3(S(+)) with Prusa Link installed) or resin printers (SL1). Multi-target is supported out of the box so you can check any number of printers as long it has accessible Prusa Link API and you have enough computing power. + +For MK3S with Einsy board you need to use at least version 0.7.0 of Prusa Link or higher, because there are many more metrics to scrape than in the older versions. You can find the most up to date version in the [Prusa Link repository](https://github.com/prusa3d/Prusa-Link/releases). + +- [Prusa Exporter - formerly Buddy Link Prometheus Exporter](#prusa-exporter---formerly-buddy-link-prometheus-exporter) + - [Where to find prusa exporter](#where-to-find-prusa-exporter) + - [Roadmap](#roadmap) + - [How to install prusa exporter](#how-to-install-prusa-exporter) + - [Git Clone](#git-clone) + - [Docker Compose](#docker-compose) + - [Logs](#logs) + - [Metrics](#metrics) + - [Raspberry Pi](#raspberry-pi) + - [Starting](#starting) + - [Grafana Dashboards](#grafana-dashboards) + - [Prusa Link](#prusa-link) + - [Syslog](#syslog) + - [Overview](#overview) + +## Where to find prusa exporter + +Prusa exporter runs on port 10009, but you can choose different port in `prusa.yml`. Metrics are accessible at `/metrics` endpoint. + +## Roadmap + +This list contains current and future features along with completion status: + +- [x] Scrape of metrics from [Prusa Link](https://github.com/prusa3d/Prusa-Link/tree/0.7.0rc3) +- [x] Use of Grafana Cloud +- [x] CI pipeline with Docker Hub publish +- [x] Local instance of Grafana / Prometheus / Loki +- [x] Raspberry Pi Image +- [ ] Support for [connection](#21) to Einsy with username and password +- [x] Support for MK3 - it was implemented before but I want overhaul it and make it work +- [x] Dashboard update +- [x] Configuration update +- [x] Send logs to Grafana Cloud +- [x] Enable node_exporter for Grafana Cloud +- [x] Optimize and get more syslog metrics +- [ ] Automatically send syslog config gcode to buddy boards +- [ ] exporter toolkit implemenation +- [ ] Create endpoint for configuration update +- [ ] Unit tests +- [ ] Create systemd service for exporter and install script +- [ ] Properly provision on premise setup +- [ ] CI for binaries release +- [x] Enable log collection to Loki +- [x] SL1 support + +## How to install prusa exporter + +### Git Clone + +First things first. You need to clone the repo and that which is very easy, right? + +`git clone https://github.com/pstrobl96/prusa_exporter.git` + +### Docker Compose + +I've created docker-compose.yaml file, that can be used for deploy of exporter. You would need [Docker](https://docs.docker.com/engine/install/) and [docker-compose](https://docs.docker.com/compose/install/linux/) plugin installed. Right now it is possible to use `docker compose up` or if you want to try newest codebase, then just run `sudo docker compose -f docker-compose.testing.yaml up --build --force-recreate` that will build new docker image of exporter with Grafana Agent. + +### Logs + +Printer logs and detailed metrics are sent via Syslog which is not best option but it is what it is. However to get data to Loki I need to process logs in exporter. I wanted to use Promtail for forwarding the logs to Loki however I was not successful with this approach because Promtail was throwing EOL errors so I forward logs into file in exporter and I configured Promtail to scrape and parse them. You can find how to configure logs in [config.md](docs/config.md) and [exporter.md](docs/exporter.md) + +### Metrics + +Metrics that you can find in this exporter are "scraped" from two sources. First is Prusa Link, it is pretty usual REST API that returns all data in JSON. There is a lot of useful metrics but there are few that are missing. Like data from most of sensors and for example current or voltage. However this is not applicable to **Einsy printers like MK3, these supports only Prusa Link API. As well as resin printers like SL1.** You can find how to configure metrics in [config.md](docs/config.md) and [exporter.md](docs/exporter.md) + +For Buddy - SYSLOG exists. [Syslog](https://en.wikipedia.org/wiki/Syslog) is standard for logging for a quite while however printer used it for sending metrics. Trough UDP. So what I just did is that I created experimental Syslog UDP server within this exporter and I'm catching these "metrics". **Be aware that these metrics can be send only via wired ethernet. You are out of luck over the air.** + +**The issue is that if you have more printers you'll create a lot of UDP traffic in the network.** If you have more printers this number multiplies. I choose flag this feature experimental because you cannot be sure you'll get the metrics, it's UDP and printers are sending data as much as they can but it is not consistent. Between printers there are differences - obvisouly. + +Example how metrics looks can be found in ![this](docs/examples/metrics_example.md) file. This file also includes Einsy and Buddy syslog metrics. + +How to config Syslog metrics you can find in ![documentation](docs/syslog.md). + +### Raspberry Pi + +I also created Raspberry Pi image that can be flashed to memory card. If you choose this path you'll need following. + +- Raspberry Pi (*4 and 5 tested*) with 64 bit support +- At least *Class 10* and at least *16 gigs* Memory card - preferably some kind of durable one + +Of course all other accessories like computer, card reader, power supply etc. are mandatory. How to flash Raspberry Pi image you can find in ![documentation](docs/rpi_image.md) + +### Starting + +Starting of exporter is simple. Just change directory to where docker-compose.yaml and configs are and run following command. + +``` +docker compose up + +``` + +:tada: if everthing went alright your instance is up and running and you can find metrics at [/metrics](http://localhost:10009/metrics) endpoint. + +## Grafana Dashboards + +I also prepared one dashboard per board which you can find in the [docs/examples/grafana](docs/examples/grafana) folder. + +### Prusa Link + +Download this dashboard straight from [Grafana.net](https://grafana.com/grafana/dashboards/20393)! Just use ID `20393` when importing. + +![dashboard](docs/examples/grafana/prusalink.png) + +### Syslog + +Download this dashboard straight from [Grafana.net](https://grafana.com/grafana/dashboards/20618)! Just use ID `20618` when importing. + +![dashboard](docs/examples/grafana/syslog.png) + +### Overview + +This dashboard is used for monitoring all of your printers. Basically - green means printing, blue means ready, yellow means warning and red is error. You need [polystat panel](https://github.com/grafana/grafana-polystat-panel) for this dashboard. + +Download this dashboard straight from [Grafana.net](https://grafana.com/grafana/dashboards/20449)! Just use ID `20449` when importing. + +![dashboard](docs/examples/grafana/overview.png) \ No newline at end of file diff --git a/1_infrastructure/docker/docker_prusa_exporter/docker-compose.yaml b/1_infrastructure/docker/docker_prusa_exporter/docker-compose.yaml new file mode 100644 index 0000000..bec73cc --- /dev/null +++ b/1_infrastructure/docker/docker_prusa_exporter/docker-compose.yaml @@ -0,0 +1,89 @@ +version: "3" + +networks: + prusa: + +volumes: + mimir_data: + grafana_data: + prusa_syslog_logs: + +services: + loki: + image: grafana/loki:2.9.6 + container_name: loki + restart: unless-stopped + volumes: + - ./docs/examples/config/on_premise/loki.yaml:/etc/loki/local-config.yaml + command: -config.file=/etc/loki/local-config.yaml + networks: + - prusa + + mimir: + image: grafana/mimir:2.11.0 + container_name: mimir + restart: unless-stopped + volumes: + - ./docs/examples/config/on_premise/mimir.yaml:/etc/mimir-config/mimir.yaml + - mimir_data:/data + entrypoint: + - /bin/mimir + - -config.file=/etc/mimir-config/mimir.yaml + networks: + - prusa + + grafana: + image: grafana/grafana:10.4.1 + container_name: grafana + restart: unless-stopped + environment: + - GF_INSTALL_PLUGINS=grafana-xyzchart-panel, grafana-polystat-panel + depends_on: + - loki + - mimir + ports: + - "3000:3000" + networks: + - prusa + volumes: + - ./docs/examples/config/grafana/provisioning:/etc/grafana/provisioning + - grafana_data:/var/lib/grafana + - ./docs/examples/grafana/provisioning:/var/lib/grafana/dashboards + + exporter: + image: pubeldev/prusa_exporter:v1.0.rc2 + container_name: exporter + restart: unless-stopped + volumes: + - prusa_syslog_logs:/var/log/prusa + - type: bind + source: ./docs/examples/config/common/prusa.yml + target: /app/prusa.yml + ports: + - "10007:10007/udp" + - "10008:10008/udp" + - "10009:10009" + command: '--config.file=/app/prusa.yml' + networks: + - prusa + + agent: + image: grafana/agent:v0.40.3 + container_name: agent + depends_on: + - exporter + - mimir + restart: unless-stopped + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - prusa_syslog_logs:/var/log/prusa + - type: bind + source: ./docs/examples/config/on_premise/agent.yaml + target: /etc/agent-config/agent.yaml + entrypoint: + - /bin/grafana-agent + - -server.http.address=0.0.0.0:12345 + - -config.file=/etc/agent-config/agent.yaml + - -metrics.wal-directory=/tmp/agent/wal + networks: + - prusa \ No newline at end of file diff --git a/docker/docker_registry/README.md b/1_infrastructure/docker/docker_registry/README.md similarity index 100% rename from docker/docker_registry/README.md rename to 1_infrastructure/docker/docker_registry/README.md diff --git a/docker/docker_registry/docker-compose.yml b/1_infrastructure/docker/docker_registry/docker-compose.yml similarity index 100% rename from docker/docker_registry/docker-compose.yml rename to 1_infrastructure/docker/docker_registry/docker-compose.yml diff --git a/docker/docker_securedb/Dockerfile b/1_infrastructure/docker/docker_securedb/Dockerfile similarity index 100% rename from docker/docker_securedb/Dockerfile rename to 1_infrastructure/docker/docker_securedb/Dockerfile diff --git a/docker/docker_securedb/README.md b/1_infrastructure/docker/docker_securedb/README.md similarity index 100% rename from docker/docker_securedb/README.md rename to 1_infrastructure/docker/docker_securedb/README.md diff --git a/docker/docker_securedb/docker-compose.yml b/1_infrastructure/docker/docker_securedb/docker-compose.yml similarity index 100% rename from docker/docker_securedb/docker-compose.yml rename to 1_infrastructure/docker/docker_securedb/docker-compose.yml diff --git a/docker/docker_securedb/rebuild_docker.sh b/1_infrastructure/docker/docker_securedb/rebuild_docker.sh similarity index 100% rename from docker/docker_securedb/rebuild_docker.sh rename to 1_infrastructure/docker/docker_securedb/rebuild_docker.sh diff --git a/docker/docker_securedb/start_service.sh b/1_infrastructure/docker/docker_securedb/start_service.sh similarity index 100% rename from docker/docker_securedb/start_service.sh rename to 1_infrastructure/docker/docker_securedb/start_service.sh diff --git a/docker/docker_ssl_setup_guide.md b/1_infrastructure/docker/docker_ssl_setup_guide.md similarity index 100% rename from docker/docker_ssl_setup_guide.md rename to 1_infrastructure/docker/docker_ssl_setup_guide.md diff --git a/docker/docker_ubuntu_ssh/Dockerfile b/1_infrastructure/docker/docker_ubuntu_ssh/Dockerfile similarity index 100% rename from docker/docker_ubuntu_ssh/Dockerfile rename to 1_infrastructure/docker/docker_ubuntu_ssh/Dockerfile diff --git a/docker/docker_ubuntu_ssh/README.md b/1_infrastructure/docker/docker_ubuntu_ssh/README.md similarity index 100% rename from docker/docker_ubuntu_ssh/README.md rename to 1_infrastructure/docker/docker_ubuntu_ssh/README.md diff --git a/docker/docker_ubuntu_ssh/docker-compose.yml b/1_infrastructure/docker/docker_ubuntu_ssh/docker-compose.yml similarity index 100% rename from docker/docker_ubuntu_ssh/docker-compose.yml rename to 1_infrastructure/docker/docker_ubuntu_ssh/docker-compose.yml diff --git a/docker/docker_ubuntu_ssh/rebuild_docker.sh b/1_infrastructure/docker/docker_ubuntu_ssh/rebuild_docker.sh similarity index 100% rename from docker/docker_ubuntu_ssh/rebuild_docker.sh rename to 1_infrastructure/docker/docker_ubuntu_ssh/rebuild_docker.sh diff --git a/docker/docker_vnexa_api/Dockerfile b/1_infrastructure/docker/docker_vnexa_api/Dockerfile similarity index 100% rename from docker/docker_vnexa_api/Dockerfile rename to 1_infrastructure/docker/docker_vnexa_api/Dockerfile diff --git a/docker/docker_vnexa_api/README.md b/1_infrastructure/docker/docker_vnexa_api/README.md similarity index 100% rename from docker/docker_vnexa_api/README.md rename to 1_infrastructure/docker/docker_vnexa_api/README.md diff --git a/docker/docker_vnexa_api/app/app.py b/1_infrastructure/docker/docker_vnexa_api/app/app.py similarity index 100% rename from docker/docker_vnexa_api/app/app.py rename to 1_infrastructure/docker/docker_vnexa_api/app/app.py diff --git a/docker/docker_vnexa_api/app/requirements.txt b/1_infrastructure/docker/docker_vnexa_api/app/requirements.txt similarity index 100% rename from docker/docker_vnexa_api/app/requirements.txt rename to 1_infrastructure/docker/docker_vnexa_api/app/requirements.txt diff --git a/docker/docker_vnexa_api/docker-compose.yml b/1_infrastructure/docker/docker_vnexa_api/docker-compose.yml similarity index 100% rename from docker/docker_vnexa_api/docker-compose.yml rename to 1_infrastructure/docker/docker_vnexa_api/docker-compose.yml diff --git a/docker/docker_vnexa_api/rebuild_docker.sh b/1_infrastructure/docker/docker_vnexa_api/rebuild_docker.sh similarity index 100% rename from docker/docker_vnexa_api/rebuild_docker.sh rename to 1_infrastructure/docker/docker_vnexa_api/rebuild_docker.sh diff --git a/docker/docker_was/Dockerfile b/1_infrastructure/docker/docker_was/Dockerfile similarity index 100% rename from docker/docker_was/Dockerfile rename to 1_infrastructure/docker/docker_was/Dockerfile diff --git a/docker/docker_was/README.md b/1_infrastructure/docker/docker_was/README.md similarity index 100% rename from docker/docker_was/README.md rename to 1_infrastructure/docker/docker_was/README.md diff --git a/docker/docker_was/docker-compose.yml b/1_infrastructure/docker/docker_was/docker-compose.yml similarity index 100% rename from docker/docker_was/docker-compose.yml rename to 1_infrastructure/docker/docker_was/docker-compose.yml diff --git a/docker/docker_was/rebuild_docker.sh b/1_infrastructure/docker/docker_was/rebuild_docker.sh similarity index 100% rename from docker/docker_was/rebuild_docker.sh rename to 1_infrastructure/docker/docker_was/rebuild_docker.sh diff --git a/docker/docker_was/setting.sql b/1_infrastructure/docker/docker_was/setting.sql similarity index 100% rename from docker/docker_was/setting.sql rename to 1_infrastructure/docker/docker_was/setting.sql diff --git a/docker/docker_was/start_service.sh b/1_infrastructure/docker/docker_was/start_service.sh similarity index 100% rename from docker/docker_was/start_service.sh rename to 1_infrastructure/docker/docker_was/start_service.sh diff --git a/docker/docker_was_upgrade/Dockerfile b/1_infrastructure/docker/docker_was_upgrade/Dockerfile similarity index 100% rename from docker/docker_was_upgrade/Dockerfile rename to 1_infrastructure/docker/docker_was_upgrade/Dockerfile diff --git a/docker/docker_was_upgrade/README.md b/1_infrastructure/docker/docker_was_upgrade/README.md similarity index 100% rename from docker/docker_was_upgrade/README.md rename to 1_infrastructure/docker/docker_was_upgrade/README.md diff --git a/docker/docker_was_upgrade/docker-compose.yml b/1_infrastructure/docker/docker_was_upgrade/docker-compose.yml similarity index 100% rename from docker/docker_was_upgrade/docker-compose.yml rename to 1_infrastructure/docker/docker_was_upgrade/docker-compose.yml diff --git a/docker/docker_was_upgrade/rebuild_docker.sh b/1_infrastructure/docker/docker_was_upgrade/rebuild_docker.sh similarity index 100% rename from docker/docker_was_upgrade/rebuild_docker.sh rename to 1_infrastructure/docker/docker_was_upgrade/rebuild_docker.sh diff --git a/docker/docker_was_upgrade/setting.sql b/1_infrastructure/docker/docker_was_upgrade/setting.sql similarity index 100% rename from docker/docker_was_upgrade/setting.sql rename to 1_infrastructure/docker/docker_was_upgrade/setting.sql diff --git a/docker/docker_was_upgrade/start_service.sh b/1_infrastructure/docker/docker_was_upgrade/start_service.sh similarity index 100% rename from docker/docker_was_upgrade/start_service.sh rename to 1_infrastructure/docker/docker_was_upgrade/start_service.sh diff --git a/docker/docker_was_upgrade_http/Dockerfile b/1_infrastructure/docker/docker_was_upgrade_http/Dockerfile similarity index 100% rename from docker/docker_was_upgrade_http/Dockerfile rename to 1_infrastructure/docker/docker_was_upgrade_http/Dockerfile diff --git a/docker/docker_was_upgrade_http/README.md b/1_infrastructure/docker/docker_was_upgrade_http/README.md similarity index 100% rename from docker/docker_was_upgrade_http/README.md rename to 1_infrastructure/docker/docker_was_upgrade_http/README.md diff --git a/docker/docker_was_upgrade_http/docker-compose.yml b/1_infrastructure/docker/docker_was_upgrade_http/docker-compose.yml similarity index 100% rename from docker/docker_was_upgrade_http/docker-compose.yml rename to 1_infrastructure/docker/docker_was_upgrade_http/docker-compose.yml diff --git a/docker/docker_was_upgrade_http/rebuild_docker.sh b/1_infrastructure/docker/docker_was_upgrade_http/rebuild_docker.sh similarity index 100% rename from docker/docker_was_upgrade_http/rebuild_docker.sh rename to 1_infrastructure/docker/docker_was_upgrade_http/rebuild_docker.sh diff --git a/docker/docker_was_upgrade_http/setting.sql b/1_infrastructure/docker/docker_was_upgrade_http/setting.sql similarity index 100% rename from docker/docker_was_upgrade_http/setting.sql rename to 1_infrastructure/docker/docker_was_upgrade_http/setting.sql diff --git a/docker/docker_was_upgrade_http/start_service.sh b/1_infrastructure/docker/docker_was_upgrade_http/start_service.sh similarity index 100% rename from docker/docker_was_upgrade_http/start_service.sh rename to 1_infrastructure/docker/docker_was_upgrade_http/start_service.sh diff --git a/docker/examples/.gitkeep b/1_infrastructure/docker/examples/.gitkeep similarity index 100% rename from docker/examples/.gitkeep rename to 1_infrastructure/docker/examples/.gitkeep diff --git a/docker/examples/Dockerfile b/1_infrastructure/docker/examples/Dockerfile similarity index 100% rename from docker/examples/Dockerfile rename to 1_infrastructure/docker/examples/Dockerfile diff --git a/docker/examples/README.md b/1_infrastructure/docker/examples/README.md similarity index 100% rename from docker/examples/README.md rename to 1_infrastructure/docker/examples/README.md diff --git a/docker/examples/docker-compose.yml b/1_infrastructure/docker/examples/docker-compose.yml similarity index 100% rename from docker/examples/docker-compose.yml rename to 1_infrastructure/docker/examples/docker-compose.yml diff --git a/docker/examples/rebuild_docker.sh b/1_infrastructure/docker/examples/rebuild_docker.sh similarity index 100% rename from docker/examples/rebuild_docker.sh rename to 1_infrastructure/docker/examples/rebuild_docker.sh diff --git a/docker/examples/start_service.sh b/1_infrastructure/docker/examples/start_service.sh similarity index 100% rename from docker/examples/start_service.sh rename to 1_infrastructure/docker/examples/start_service.sh diff --git a/1_infrastructure/docker/geumdo-rag-chat-bot/.gitignore b/1_infrastructure/docker/geumdo-rag-chat-bot/.gitignore new file mode 100644 index 0000000..87d6a6a --- /dev/null +++ b/1_infrastructure/docker/geumdo-rag-chat-bot/.gitignore @@ -0,0 +1,40 @@ +# Python +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python +env/ +venv/ +.venv/ +pip-log.txt +pip-delete-this-directory.txt +.eggs/ +*.egg-info/ +dist/ +build/ + +# IDEs and editors +.idea/ +.vscode/ +*.swp +*.swo + +# Secrets +.env +.env.* + +# RAG Project Specific +# Cloned GitLab repositories +/cloned_repos/ +# FAISS vector store index +/faiss_gitlab_code_index/ + +# OS specific +.DS_Store +Thumbs.db + +# Test artifacts +.pytest_cache/ +htmlcov/ +.coverage \ No newline at end of file diff --git a/1_infrastructure/docker/geumdo-rag-chat-bot/Dockerfile b/1_infrastructure/docker/geumdo-rag-chat-bot/Dockerfile new file mode 100644 index 0000000..2cf6076 --- /dev/null +++ b/1_infrastructure/docker/geumdo-rag-chat-bot/Dockerfile @@ -0,0 +1,32 @@ +# 1. Base Image +FROM python:3.10-slim + +# 2. Set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 +ENV POETRY_NO_INTERACTION=1 \ + POETRY_VIRTUALENVS_CREATE=false + +# 3. Set working directory +WORKDIR /app + +# 4. Install poetry +RUN pip install --no-cache-dir poetry + +# 5. Copy dependency definition files +COPY pyproject.toml ./ + +# 6. Install dependencies +# Using --no-cache-dir to keep the image size down +RUN poetry install --no-root --no-interaction --no-ansi + +# 7. Copy application code +COPY . . + +# 8. Expose port for streamlit +EXPOSE 8501 + +# 9. Command to run the app +# The command is overridden in docker-compose.yml for development, +# but this serves as a good default. +CMD ["streamlit", "run", "ui_poc.py"] \ No newline at end of file diff --git a/1_infrastructure/docker/geumdo-rag-chat-bot/README.md b/1_infrastructure/docker/geumdo-rag-chat-bot/README.md new file mode 100644 index 0000000..75f1a91 --- /dev/null +++ b/1_infrastructure/docker/geumdo-rag-chat-bot/README.md @@ -0,0 +1,265 @@ +# RAG 기반 사내 코드 검색 챗봇 + +본 프로젝트는 Retrieval-Augmented Generation (RAG) 아키텍처를 기반으로, 사내 GitLab 코드 리포지토리에 대해 자연어 질의를 수행할 수 있는 챗봇입니다. + +## 기술 아키텍처 + +프로젝트는 `docker-compose.yml`을 통해 관리되는 4개의 주요 Docker 컨테이너로 구성됩니다. + +1. **`ui` (프론트엔드)**: + - **프레임워크**: Streamlit + - **역할**: 채팅 형태의 사용자 인터페이스를 제공합니다. 사용자의 모든 질문과 상호작용은 이 서비스를 통해 이루어지며, 백엔드 `api`와 통신합니다. + +2. **`api` (백엔드)**: + - **프레임워크**: FastAPI + - **역할**: QA 로직의 핵심을 담당합니다. RAG 파이프라인을 실행하고 REST API 엔드포인트를 통해 제공합니다. + - `POST /query`: `ui`로부터 질문을 받아 RAG 파이프라인으로 처리한 후, 답변과 참고 문서를 반환합니다. + - `POST /feedback`: 성능 평가를 위해 사용자의 피드백(좋아요/싫어요)을 수집합니다. + - **RAG 파이프라인 (`qa.py`)**: + - **Retriever**: `EnsembleRetriever`를 사용하여 두 가지 검색 방식을 결합하여 검색 정확도를 극대화합니다. + 1. **Semantic Search**: `Chroma`를 벡터 스토어로 사용하는 `SelfQueryRetriever`. LLM을 활용하여 사용자의 자연어 질문을 메타데이터 필터링(예: `project_name`, `language`)이 포함된 벡터 쿼리로 변환합니다. + 2. **Lexical Search**: 키워드 기반 검색을 위한 `BM25Retriever`. + - **Generator**: `ChatOpenAI` (기본값 `gpt-4o`)를 사용하여 검색된 문서를 기반으로 답변을 생성하며, 출처를 명시하도록 설계되었습니다. + +3. **`indexing` (데이터 파이프라인)**: + - **프레임워크**: `apscheduler`를 사용한 Python 스크립트 + - **역할**: 데이터 수집 및 전처리를 담당합니다. + - GitLab 리포지토리를 로컬 디렉토리(`cloned_repos`)에 동기화합니다. + - `LangChain`을 사용하여 소스 코드 파일(`.py`, `.java`, `.md` 등)을 처리합니다. + - OpenAI 임베딩 모델(`text-embedding-3-small`)을 사용하여 임베딩을 생성하고 `ChromaDB`에 저장합니다. + - 키워드 검색을 위한 `BM25` 인덱스를 생성하고 저장합니다. + - **스케줄**: 컨테이너 시작 시 즉시 실행된 후, 매일 자정에 다시 실행되어 데이터 최신성을 유지합니다. + +4. **`chroma` (벡터 데이터베이스)**: + - **이미지**: `chromadb/chroma` + - **역할**: `indexing` 서비스가 생성한 코드 벡터 임베딩을 저장합니다. 데이터는 `./chroma_data` 볼륨에 영속적으로 저장됩니다. + +## 기술 스택 + +- **백엔드**: FastAPI, Uvicorn +- **프론트엔드**: Streamlit +- **오케스트레이션**: Docker, Docker Compose +- **RAG/LLM 프레임워크**: LangChain, OpenAI +- **벡터 데이터베이스**: ChromaDB +- **검색**: BM25 (Lexical Search) +- **의존성 관리**: Poetry +- **작업 스케줄링**: APScheduler + +## 실행 방법 + +### 사전 요구사항 + +- Docker 및 Docker Compose +- GitLab 서버 접근 권한 +- OpenAI API 키 + +### 설정 + +1. **리포지토리 클론** (아직 수행하지 않은 경우). + +2. **`.env` 파일 생성**: `.env.example` 파일을 `.env`로 복사하거나 이름을 변경하고, 필요한 환경 변수를 채웁니다. + ```env + # OpenAI API 키 + OPENAI_API_KEY="sk-..." + + # GitLab 정보 + GITLAB_URL="https://gitlab.your-company.com" + GITLAB_PRIVATE_TOKEN="glpat-..." # 'read_api' 권한이 있는 토큰 + + # (선택) 모델 및 이름 커스터마이징 + LLM_MODEL="gpt-4o" + EMBEDDING_MODEL="text-embedding-3-small" + CHROMA_COLLECTION_NAME="gitlab_code_collection" + + # UI가 사용할 API 주소 + # Docker 호스트의 IP 또는 설정된 도메인 이름을 사용 + API_BASE_URL="http://localhost:8001" + ``` + +### 실행 + +1. **컨테이너 빌드 및 실행**: + ```bash + docker-compose up --build -d + ``` + +2. **초기 인덱싱**: + 최초 실행 시 `indexing` 서비스가 모든 GitLab 리포지토리를 클론하고 인덱싱을 시작합니다. 이 과정은 리포지토리의 수와 크기에 따라 상당한 시간이 소요될 수 있습니다. + 컨테이너 로그를 통해 진행 상황을 모니터링할 수 있습니다. + ```bash + docker-compose logs -f indexing + ``` + +3. **애플리케이션 접근**: + - **챗봇 UI**: 브라우저에서 `http://localhost:8501`로 접속합니다. + - **API (Swagger UI)**: `http://localhost:8001/docs`에서 확인할 수 있습니다. + +### 중지 + +모든 서비스를 중지하려면 다음을 실행합니다. +```bash +docker-compose down +``` + +## 🎯 프로젝트 목표 + +- **개발 생산성 향상**: 코드베이스 이해 시간 단축 및 원하는 정보 즉시 검색 +- **지식 관리 및 공유**: 시스템화된 코드 지식 기반 답변 제공 +- **신규 입사자 온보딩 가속화**: 새로운 프로젝트나 레거시 코드 이해도 향상 +- **코드 품질 유지**: 중복 개발 방지 및 기존 코드 재사용성 증대 + +## 🏗️ 시스템 아키텍처 + +```mermaid +graph TD + subgraph "Indexing Pipeline" + A[GitLab Repository] -->|Git Clone| B[로컬 코드/문서] + B -->|데이터 로드 및 파싱| C[소스코드, Markdown 등] + C -->|텍스트 분할| D[의미 단위 텍스트 조각] + D -->|임베딩 생성| E[벡터] + E -->|벡터 DB 저장| F[(ChromaDB)] + end + + subgraph "Retrieval & Generation Pipeline" + G[사용자 질문] -->|질문 임베딩| H[질문 벡터] + H -->|하이브리드 검색| F + F -->|관련 문서 검색| I[관련 코드/문서 조각] + G & I -->|프롬프트 구성| J[LLM 프롬프트] + J -->|답변 생성| K[GPT-4o] + K -->|최종 답변| L[생성된 답변] + end +``` + +## 🛠️ 기술 스택 + +### 핵심 기술 +- **언어**: Python 3.10+ +- **RAG 프레임워크**: LangChain +- **LLM**: OpenAI GPT-4o +- **임베딩**: OpenAI text-embedding-3-small +- **벡터 DB**: ChromaDB +- **검색**: 하이브리드 검색 (Self-Query + BM25) +- **재랭킹**: Cohere Rerank + +### 웹 인터페이스 +- **API 서버**: FastAPI + Uvicorn +- **웹 UI**: Streamlit +- **컨테이너화**: Docker + Docker Compose + +### Git 연동 +- **GitLab API**: python-gitlab +- **스케줄링**: APScheduler + +## 📁 프로젝트 구조 + +``` +사내코드검색봇/ +├── api.py # FastAPI 서버 (REST API) +├── indexing.py # GitLab 동기화 및 인덱싱 +├── qa.py # RAG 파이프라인 및 답변 생성 +├── ui.py # Streamlit 웹 인터페이스 +├── docker-compose.yml # Docker 서비스 구성 +├── Dockerfile # Docker 이미지 설정 +├── pyproject.toml # Python 의존성 관리 +├── RAG_Report.md # 상세 기술 보고서 +└── README.md # 프로젝트 문서 +``` + +## 🚀 빠른 시작 + +### 1. 환경 설정 + +1. **환경 변수 설정** + + `.env` 파일을 생성하고 다음 설정을 추가하세요: + + ```bash + # OpenAI API 설정 (필수) + OPENAI_API_KEY="your_openai_api_key_here" + + # GitLab 설정 (필수) + GITLAB_URL="http://gitlab.geumdo.net" + GITLAB_PRIVATE_TOKEN="your_gitlab_private_token_here" + + # Cohere API 설정 (선택사항 - 검색 결과 재랭킹용) + COHERE_API_KEY="your_cohere_api_key_here" + + # API 서버 설정 + API_BASE_URL="http://chat-bot.geumdo.net" + API_HOST="0.0.0.0" + API_PORT="8001" + + # ChromaDB 설정 + CHROMA_HOST="chroma" + CHROMA_PORT="8004" + CHROMA_COLLECTION_NAME="gitlab_code_collection" + + # LLM 모델 설정 + LLM_MODEL="gpt-4o" + EMBEDDING_MODEL="text-embedding-3-small" + + # 파일 경로 설정 + CLONE_DIR="cloned_repos" + BM25_INDEX_PATH="bm25_index.pkl" + ``` + + **필수 API 키 발급 방법:** + + - **OpenAI API 키**: [OpenAI Platform](https://platform.openai.com/api-keys)에서 발급 + - **GitLab Private Token**: GitLab → Settings → Access Tokens에서 `api` 스코프로 발급 + - **Cohere API 키** (선택): [Cohere Platform](https://cohere.ai/)에서 발급 + +2. **Docker Compose로 서비스 실행** + ```bash + docker-compose up -d + ``` + +### 2. 서비스 접속 + +- **웹 UI**: http://localhost:8501 +- **API 서버**: http://localhost:8001 +- **ChromaDB**: http://localhost:8004 + +### 3. 초기 인덱싱 + +첫 실행 시 GitLab 프로젝트 동기화 및 인덱싱이 자동으로 수행됩니다: + +```bash +# 수동으로 인덱싱 실행 (필요시) +docker-compose run indexing python indexing.py +``` + +## 🔧 주요 기능 + +### 1. 하이브리드 검색 +- **Self-Query Retriever**: 메타데이터 기반 필터링 (프로젝트명, 언어, 파일경로) +- **BM25 Retriever**: 키워드 기반 검색 +- **Ensemble Retriever**: 두 검색 결과를 가중 평균으로 결합 + +### 2. 고급 검색 기능 +- **메타데이터 필터링**: 프로젝트별, 언어별, 파일 경로별 검색 +- **재랭킹**: Cohere Rerank를 통한 검색 결과 품질 향상 +- **컨텍스트 보존**: 코드 구조를 유지하는 언어별 텍스트 분할 + +### 3. 사용자 인터페이스 +- **채팅형 인터페이스**: 자연스러운 대화형 질의응답 +- **피드백 시스템**: 답변 품질 개선을 위한 사용자 피드백 수집 +- **출처 표시**: 답변의 근거가 된 파일 경로 자동 표시 + +### 4. 자동화 +- **주기적 동기화**: GitLab 프로젝트 자동 업데이트 +- **증분 인덱싱**: 변경된 파일만 재인덱싱 +- **컨테이너화**: Docker를 통한 일관된 배포 환경 + +## 📖 사용 예시 + +### 질문 예시 +``` +"my-project에서 사용자 인증 관련 코드를 찾아줘" +"데이터베이스 연결 설정은 어디에 있어?" +"API 엔드포인트 구현 방법을 보여줘" +"특정 함수의 사용법을 알려줘" +``` + +### 답변 형식 +``` \ No newline at end of file diff --git a/1_infrastructure/docker/geumdo-rag-chat-bot/docker-compose.yml b/1_infrastructure/docker/geumdo-rag-chat-bot/docker-compose.yml new file mode 100644 index 0000000..fdb19ce --- /dev/null +++ b/1_infrastructure/docker/geumdo-rag-chat-bot/docker-compose.yml @@ -0,0 +1,55 @@ +version: '3.8' + +services: + chroma: + image: chromadb/chroma + ports: + - "8004:8000" + volumes: + - ./chroma_data:/chroma/.chroma/index + # healthcheck: + # test: ["CMD", "curl", "-f", "http://localhost:8000/api/v1/heartbeat"] + # interval: 30s + # timeout: 10s + # retries: 5 + + indexing: + build: + context: . + dockerfile: Dockerfile + command: python indexing.py + volumes: + - .:/app + env_file: + - .env + depends_on: + - chroma + + api: + build: + context: . + dockerfile: Dockerfile + command: uvicorn api:app --host 0.0.0.0 --port 8001 --reload + ports: + - "8001:8001" + volumes: + - .:/app + env_file: + - .env + depends_on: + - chroma + - indexing + + ui: + build: + context: . + dockerfile: Dockerfile + command: streamlit run ui.py --server.port 8501 --server.address 0.0.0.0 + ports: + - "8501:8501" + volumes: + - .:/app + env_file: + - .env + depends_on: + - api \ No newline at end of file diff --git a/docker/geumdo_docker_report_240611.md b/1_infrastructure/docker/geumdo_docker_report_240611.md similarity index 100% rename from docker/geumdo_docker_report_240611.md rename to 1_infrastructure/docker/geumdo_docker_report_240611.md diff --git a/docker/gpu_cooling_monitor/.cursor/rules/clean-code.md b/1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/clean-code.md similarity index 100% rename from docker/gpu_cooling_monitor/.cursor/rules/clean-code.md rename to 1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/clean-code.md diff --git a/docker/gpu_cooling_monitor/.cursor/rules/global-rules.md b/1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/global-rules.md similarity index 100% rename from docker/gpu_cooling_monitor/.cursor/rules/global-rules.md rename to 1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/global-rules.md diff --git a/docker/gpu_cooling_monitor/.cursor/rules/user-guide.md b/1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/user-guide.md similarity index 100% rename from docker/gpu_cooling_monitor/.cursor/rules/user-guide.md rename to 1_infrastructure/docker/gpu_cooling_monitor/.cursor/rules/user-guide.md diff --git a/docker/gpu_cooling_monitor/Dockerfile b/1_infrastructure/docker/gpu_cooling_monitor/Dockerfile similarity index 100% rename from docker/gpu_cooling_monitor/Dockerfile rename to 1_infrastructure/docker/gpu_cooling_monitor/Dockerfile diff --git a/docker/gpu_cooling_monitor/README.md b/1_infrastructure/docker/gpu_cooling_monitor/README.md similarity index 100% rename from docker/gpu_cooling_monitor/README.md rename to 1_infrastructure/docker/gpu_cooling_monitor/README.md diff --git a/docker/gpu_cooling_monitor/check_system.py b/1_infrastructure/docker/gpu_cooling_monitor/check_system.py similarity index 100% rename from docker/gpu_cooling_monitor/check_system.py rename to 1_infrastructure/docker/gpu_cooling_monitor/check_system.py diff --git a/docker/gpu_cooling_monitor/docker-compose.yml b/1_infrastructure/docker/gpu_cooling_monitor/docker-compose.yml similarity index 100% rename from docker/gpu_cooling_monitor/docker-compose.yml rename to 1_infrastructure/docker/gpu_cooling_monitor/docker-compose.yml diff --git a/docker/gpu_cooling_monitor/grafana/provisioning/dashboards/dashboards.yml b/1_infrastructure/docker/gpu_cooling_monitor/grafana/provisioning/dashboards/dashboards.yml similarity index 100% rename from docker/gpu_cooling_monitor/grafana/provisioning/dashboards/dashboards.yml rename to 1_infrastructure/docker/gpu_cooling_monitor/grafana/provisioning/dashboards/dashboards.yml diff --git a/docker/gpu_cooling_monitor/grafana/provisioning/datasources/influxdb.yml b/1_infrastructure/docker/gpu_cooling_monitor/grafana/provisioning/datasources/influxdb.yml similarity index 100% rename from docker/gpu_cooling_monitor/grafana/provisioning/datasources/influxdb.yml rename to 1_infrastructure/docker/gpu_cooling_monitor/grafana/provisioning/datasources/influxdb.yml diff --git a/docker/gpu_cooling_monitor/requirement.md b/1_infrastructure/docker/gpu_cooling_monitor/requirement.md similarity index 100% rename from docker/gpu_cooling_monitor/requirement.md rename to 1_infrastructure/docker/gpu_cooling_monitor/requirement.md diff --git a/docker/gpu_cooling_monitor/requirements.txt b/1_infrastructure/docker/gpu_cooling_monitor/requirements.txt similarity index 100% rename from docker/gpu_cooling_monitor/requirements.txt rename to 1_infrastructure/docker/gpu_cooling_monitor/requirements.txt diff --git a/docker/gpu_cooling_monitor/sensors.conf b/1_infrastructure/docker/gpu_cooling_monitor/sensors.conf similarity index 100% rename from docker/gpu_cooling_monitor/sensors.conf rename to 1_infrastructure/docker/gpu_cooling_monitor/sensors.conf diff --git a/docker/gpu_cooling_monitor/src/__init__.py b/1_infrastructure/docker/gpu_cooling_monitor/src/__init__.py similarity index 100% rename from docker/gpu_cooling_monitor/src/__init__.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/__init__.py diff --git a/docker/gpu_cooling_monitor/src/api.py b/1_infrastructure/docker/gpu_cooling_monitor/src/api.py similarity index 100% rename from docker/gpu_cooling_monitor/src/api.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/api.py diff --git a/docker/gpu_cooling_monitor/src/config/__init__.py b/1_infrastructure/docker/gpu_cooling_monitor/src/config/__init__.py similarity index 100% rename from docker/gpu_cooling_monitor/src/config/__init__.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/config/__init__.py diff --git a/docker/gpu_cooling_monitor/src/config/config.py b/1_infrastructure/docker/gpu_cooling_monitor/src/config/config.py similarity index 100% rename from docker/gpu_cooling_monitor/src/config/config.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/config/config.py diff --git a/docker/gpu_cooling_monitor/src/cooling_monitor.py b/1_infrastructure/docker/gpu_cooling_monitor/src/cooling_monitor.py similarity index 100% rename from docker/gpu_cooling_monitor/src/cooling_monitor.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/cooling_monitor.py diff --git a/docker/gpu_cooling_monitor/src/implementation_plan.md b/1_infrastructure/docker/gpu_cooling_monitor/src/implementation_plan.md similarity index 100% rename from docker/gpu_cooling_monitor/src/implementation_plan.md rename to 1_infrastructure/docker/gpu_cooling_monitor/src/implementation_plan.md diff --git a/docker/gpu_cooling_monitor/src/main.py b/1_infrastructure/docker/gpu_cooling_monitor/src/main.py similarity index 100% rename from docker/gpu_cooling_monitor/src/main.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/main.py diff --git a/docker/gpu_cooling_monitor/src/monitors/__init__.py b/1_infrastructure/docker/gpu_cooling_monitor/src/monitors/__init__.py similarity index 100% rename from docker/gpu_cooling_monitor/src/monitors/__init__.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/monitors/__init__.py diff --git a/docker/gpu_cooling_monitor/src/monitors/cooling_monitor.py b/1_infrastructure/docker/gpu_cooling_monitor/src/monitors/cooling_monitor.py similarity index 100% rename from docker/gpu_cooling_monitor/src/monitors/cooling_monitor.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/monitors/cooling_monitor.py diff --git a/docker/gpu_cooling_monitor/src/monitors/gpu_monitor.py b/1_infrastructure/docker/gpu_cooling_monitor/src/monitors/gpu_monitor.py similarity index 100% rename from docker/gpu_cooling_monitor/src/monitors/gpu_monitor.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/monitors/gpu_monitor.py diff --git a/docker/gpu_cooling_monitor/src/notifications/__init__.py b/1_infrastructure/docker/gpu_cooling_monitor/src/notifications/__init__.py similarity index 100% rename from docker/gpu_cooling_monitor/src/notifications/__init__.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/notifications/__init__.py diff --git a/docker/gpu_cooling_monitor/src/notifications/alert_manager.py b/1_infrastructure/docker/gpu_cooling_monitor/src/notifications/alert_manager.py similarity index 100% rename from docker/gpu_cooling_monitor/src/notifications/alert_manager.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/notifications/alert_manager.py diff --git a/docker/gpu_cooling_monitor/src/notifications/slack_notifier.py b/1_infrastructure/docker/gpu_cooling_monitor/src/notifications/slack_notifier.py similarity index 100% rename from docker/gpu_cooling_monitor/src/notifications/slack_notifier.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/notifications/slack_notifier.py diff --git a/docker/gpu_cooling_monitor/src/utils/influxdb_client.py b/1_infrastructure/docker/gpu_cooling_monitor/src/utils/influxdb_client.py similarity index 100% rename from docker/gpu_cooling_monitor/src/utils/influxdb_client.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/utils/influxdb_client.py diff --git a/docker/gpu_cooling_monitor/src/utils/system_checker.py b/1_infrastructure/docker/gpu_cooling_monitor/src/utils/system_checker.py similarity index 100% rename from docker/gpu_cooling_monitor/src/utils/system_checker.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/utils/system_checker.py diff --git a/docker/gpu_cooling_monitor/src/web/app.py b/1_infrastructure/docker/gpu_cooling_monitor/src/web/app.py similarity index 100% rename from docker/gpu_cooling_monitor/src/web/app.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/web/app.py diff --git a/docker/gpu_cooling_monitor/src/web/run.py b/1_infrastructure/docker/gpu_cooling_monitor/src/web/run.py similarity index 100% rename from docker/gpu_cooling_monitor/src/web/run.py rename to 1_infrastructure/docker/gpu_cooling_monitor/src/web/run.py diff --git a/docker/gpu_cooling_monitor/src/web/static/css/style.css b/1_infrastructure/docker/gpu_cooling_monitor/src/web/static/css/style.css similarity index 100% rename from docker/gpu_cooling_monitor/src/web/static/css/style.css rename to 1_infrastructure/docker/gpu_cooling_monitor/src/web/static/css/style.css diff --git a/docker/gpu_cooling_monitor/src/web/static/js/dashboard.js b/1_infrastructure/docker/gpu_cooling_monitor/src/web/static/js/dashboard.js similarity index 100% rename from docker/gpu_cooling_monitor/src/web/static/js/dashboard.js rename to 1_infrastructure/docker/gpu_cooling_monitor/src/web/static/js/dashboard.js diff --git a/docker/gpu_cooling_monitor/src/web/templates/index.html b/1_infrastructure/docker/gpu_cooling_monitor/src/web/templates/index.html similarity index 100% rename from docker/gpu_cooling_monitor/src/web/templates/index.html rename to 1_infrastructure/docker/gpu_cooling_monitor/src/web/templates/index.html diff --git a/docker/gpu_cooling_monitor/start.sh b/1_infrastructure/docker/gpu_cooling_monitor/start.sh similarity index 100% rename from docker/gpu_cooling_monitor/start.sh rename to 1_infrastructure/docker/gpu_cooling_monitor/start.sh diff --git a/docker/jupyter_geumdo_lab/.cursorrules b/1_infrastructure/docker/jupyter_geumdo_lab/.cursorrules similarity index 100% rename from docker/jupyter_geumdo_lab/.cursorrules rename to 1_infrastructure/docker/jupyter_geumdo_lab/.cursorrules diff --git a/docker/jupyter_geumdo_lab/.dockerignore b/1_infrastructure/docker/jupyter_geumdo_lab/.dockerignore similarity index 100% rename from docker/jupyter_geumdo_lab/.dockerignore rename to 1_infrastructure/docker/jupyter_geumdo_lab/.dockerignore diff --git a/docker/jupyter_geumdo_lab/.gitignore b/1_infrastructure/docker/jupyter_geumdo_lab/.gitignore similarity index 100% rename from docker/jupyter_geumdo_lab/.gitignore rename to 1_infrastructure/docker/jupyter_geumdo_lab/.gitignore diff --git a/docker/jupyter_geumdo_lab/README.md b/1_infrastructure/docker/jupyter_geumdo_lab/README.md similarity index 100% rename from docker/jupyter_geumdo_lab/README.md rename to 1_infrastructure/docker/jupyter_geumdo_lab/README.md diff --git a/docker/jupyter_geumdo_lab/backup-cronjob.yaml b/1_infrastructure/docker/jupyter_geumdo_lab/backup-cronjob.yaml similarity index 100% rename from docker/jupyter_geumdo_lab/backup-cronjob.yaml rename to 1_infrastructure/docker/jupyter_geumdo_lab/backup-cronjob.yaml diff --git a/docker/jupyter_geumdo_lab/config.yaml b/1_infrastructure/docker/jupyter_geumdo_lab/config.yaml similarity index 100% rename from docker/jupyter_geumdo_lab/config.yaml rename to 1_infrastructure/docker/jupyter_geumdo_lab/config.yaml diff --git a/docker/jupyter_geumdo_lab/jupyter-hub-nginx.conf b/1_infrastructure/docker/jupyter_geumdo_lab/jupyter-hub-nginx.conf similarity index 100% rename from docker/jupyter_geumdo_lab/jupyter-hub-nginx.conf rename to 1_infrastructure/docker/jupyter_geumdo_lab/jupyter-hub-nginx.conf diff --git a/docker/jupyter_gpu_docker/Dockerfile b/1_infrastructure/docker/jupyter_gpu_docker/Dockerfile similarity index 100% rename from docker/jupyter_gpu_docker/Dockerfile rename to 1_infrastructure/docker/jupyter_gpu_docker/Dockerfile diff --git a/docker/jupyter_gpu_docker/README.md b/1_infrastructure/docker/jupyter_gpu_docker/README.md similarity index 100% rename from docker/jupyter_gpu_docker/README.md rename to 1_infrastructure/docker/jupyter_gpu_docker/README.md diff --git a/docker/jupyter_gpu_docker/docker-compose.yml b/1_infrastructure/docker/jupyter_gpu_docker/docker-compose.yml similarity index 100% rename from docker/jupyter_gpu_docker/docker-compose.yml rename to 1_infrastructure/docker/jupyter_gpu_docker/docker-compose.yml diff --git a/docker/jupyter_gpu_docker/rebuild_with_fix.sh b/1_infrastructure/docker/jupyter_gpu_docker/rebuild_with_fix.sh similarity index 100% rename from docker/jupyter_gpu_docker/rebuild_with_fix.sh rename to 1_infrastructure/docker/jupyter_gpu_docker/rebuild_with_fix.sh diff --git a/docker/jupyter_gpu_docker/requirements.txt b/1_infrastructure/docker/jupyter_gpu_docker/requirements.txt similarity index 100% rename from docker/jupyter_gpu_docker/requirements.txt rename to 1_infrastructure/docker/jupyter_gpu_docker/requirements.txt diff --git a/1_infrastructure/docker/potential_industry_partners.md b/1_infrastructure/docker/potential_industry_partners.md new file mode 100644 index 0000000..393c065 --- /dev/null +++ b/1_infrastructure/docker/potential_industry_partners.md @@ -0,0 +1,129 @@ +# 잠재적 기업 파트너 리스트 및 접촉 계획 + +## 개요 +이 문서는 AI 강의 과정을 위한 산업 연계 프로그램을 개발하기 위한 잠재적 기업 파트너들의 리스트와 접촉 전략을 담고 있습니다. 산업 연계를 통해 학생들에게 실제 데이터와 문제를 기반으로 한 실무 경험을 제공하고, 취업 연계 기회를 확대하는 것을 목표로 합니다. + +## 1. 대상 기업 리스트 + +### 1.1. 대기업/중견기업 (4개사) + +| 기업명 | 산업 분야 | 예상 협업 영역 | 접촉 담당자 | 우선순위 | +|-------|----------|--------------|-----------|---------| +| **삼성전자** | 전자/IT/반도체 | 컴퓨터 비전, 자연어 처리 | AI 센터 교육 담당자 | 높음 | +| **현대자동차** | 자동차/모빌리티 | 자율주행, 센서 데이터 분석 | 연구소장 또는 교육 담당자 | 중간 | +| **네이버** | 인터넷/AI/검색 | 검색 엔진, 추천 시스템, NLP | NAVER CLOVA 교육 담당자 | 높음 | +| **LG CNS** | IT 컨설팅/시스템 통합 | 대규모 데이터 처리, AI 솔루션 | AI 사업부 책임자 | 중간 | + +### 1.2. 스타트업/성장기업 (4개사) + +| 기업명 | 산업 분야 | 예상 협업 영역 | 접촉 담당자 | 우선순위 | +|-------|----------|--------------|-----------|---------| +| **룰루랩** | 헬스케어/뷰티테크 | 피부 분석 AI, 컴퓨터 비전 | CTO 또는 기술 책임자 | 높음 | +| **퓨리오사AI** | 반도체/AI 칩 | 모델 최적화, 하드웨어 가속 | 교육 협력 담당자 | 중간 | +| **스켈터랩스** | 대화형 AI | 챗봇, 감정 분석 | AI 연구소장 | 높음 | +| **모두의연구소** | AI 연구/교육 | 커리큘럼 공동 개발, 멘토링 | 대표이사 | 높음 | + +### 1.3. 공공/연구 기관 (2개사) + +| 기관명 | 분야 | 예상 협업 영역 | 접촉 담당자 | 우선순위 | +|-------|-----|--------------|-----------|---------| +| **한국전자통신연구원(ETRI)** | 정보통신/전자 연구 | 음성 인식, 영상 분석 | 산학협력 담당자 | 중간 | +| **한국지능정보사회진흥원(NIA)** | 공공 데이터, AI 정책 | 공공 데이터 활용, AI 윤리 | 교육 협력 담당부서 | 중간 | + +## 2. 접촉 전략 및 계획 + +### 2.1. 기업 가치 제안 +기업 파트너에게 제안할 협력의 가치: + +1. **인재 발굴 및 채용 파이프라인** + - 교육 과정 수료생 중 우수 인재 조기 발굴 기회 + - 기업 맞춤형 역량을 갖춘 인재 양성 + +2. **실제 문제 해결을 통한 비즈니스 가치** + - 학생 프로젝트를 통한 기업 실제 문제 해결 + - 신선한 아이디어와 접근법 획득 + +3. **브랜드 가치 및 사회적 책임** + - AI 교육 지원을 통한 기업 이미지 제고 + - 디지털/AI 격차 해소에 기여 + +### 2.2. 세부 접촉 계획 + +#### 1단계: 초기 접촉 (1-2주) +- 인맥 네트워크를 활용한 소개 (1순위) +- 공식 이메일과 제안서 발송 (2순위) +- 채용/교육 담당자 LinkedIn 접촉 (3순위) + +#### 2단계: 제안 프레젠테이션 (3-4주) +- 기업별 맞춤형 협력 방안 제시 +- 구체적 협력 모델 3가지 제안: + 1. **멘토링 프로그램**: 기업 전문가가 학생 프로젝트 멘토링 + 2. **데이터셋 공유**: 비식별화된 실제 데이터 제공 + 3. **캡스톤 프로젝트**: 기업 실제 문제 기반 프로젝트 진행 + +#### 3단계: MOU 체결 (5-8주) +- 협력 범위 및 세부사항 협의 +- 법무 검토 및 MOU 초안 작성 +- 공식 체결 및 발표 + +## 3. 기업별 맞춤형 접근 전략 + +### 3.1. 삼성전자 +- **접촉 포인트**: AI 센터 교육 담당자 +- **제안 내용**: 컴퓨터 비전 과정에서 실제 사용 사례 공유, 학생 프로젝트 멘토링 +- **협력 모델**: 우수 학생 인턴십 연계 프로그램 + +### 3.2. 네이버 +- **접촉 포인트**: CLOVA 교육 협력 담당자 +- **제안 내용**: NLP 과정에서 한국어 처리 기술 사례 공유, 파파고/클로바 API 활용 교육 +- **협력 모델**: 우수 프로젝트 네이버 D2 Startup Factory 연계 가능성 + +### 3.3. 룰루랩 +- **접촉 포인트**: CTO +- **제안 내용**: 컴퓨터 비전 응용 사례로 피부 분석 AI 소개, 실제 과제 제시 +- **협력 모델**: 실제 데이터셋 제공 및 결과물 공유 + +### 3.4. 모두의연구소 +- **접촉 포인트**: 대표이사 +- **제안 내용**: 커리큘럼 공동 개발, 강사 교류, 커뮤니티 연계 +- **협력 모델**: 교육 콘텐츠 공동 개발 및 공유 + +## 4. 기대 성과 및 측정 지표 + +### 4.1. 기대 성과 +- 최소 3개 기업과의 파트너십 체결 +- 실제 산업 데이터셋 5개 이상 확보 +- 기업 멘토 10명 이상 참여 +- 취업 연계 기회 20개 이상 창출 + +### 4.2. 성과 측정 지표 +- 참여 기업 수 및 협력 지속 기간 +- 학생 만족도 평가 (기업 멘토링) +- 기업 제공 데이터셋 품질 및 활용도 +- 취업/인턴십 연계율 + +## 5. 일정 및 담당자 + +### 5.1. 일정 +- **1-2주차**: 초기 접촉 및 관계 구축 +- **3-4주차**: 제안서 발송 및 회의 요청 +- **5-6주차**: 미팅 진행 및 협력 방안 구체화 +- **7-8주차**: MOU 체결 협의 +- **9-10주차**: 파트너십 체결 및 프로그램 시작 + +### 5.2. 담당자 +- **산학협력 코디네이터**: 전체 기업 접촉 및 관리 담당 +- **교육과정 책임자**: 기술적 협력 범위 논의 +- **법무 담당**: MOU 검토 및 협약 작성 + +## 6. 위험 요소 및 대응 방안 + +### 6.1. 위험 요소 +- 기업의 데이터 보안 및 IP 우려 +- 협력 지속성 유지의 어려움 +- 기업과 교육 목표 간의 불일치 + +### 6.2. 대응 방안 +- 명확한 IP 정책 및 NDA 체결 +- 정기적 성과 공유 및 피드백 시스템 구축 +- 교육적 가치와 기업 가치의 균형점 모색 \ No newline at end of file diff --git a/1_infrastructure/docker/small_scale_gpu_resources_plan.md b/1_infrastructure/docker/small_scale_gpu_resources_plan.md new file mode 100644 index 0000000..6a6b446 --- /dev/null +++ b/1_infrastructure/docker/small_scale_gpu_resources_plan.md @@ -0,0 +1,142 @@ +# 소규모 GPU 리소스 활용 계획 + +## 1. 개요 +이 문서는 AI 교육 및 실습 환경에서 소규모 GPU 리소스를 효율적으로 활용하기 위한 계획과 전략을 제시합니다. GPU 리소스는 딥러닝 모델의 학습과 추론에 필수적이지만 비용이 높은 자원이므로, 제한된 리소스를 최대한 활용하는 방법에 초점을 맞추었습니다. + +## 2. 현재 GPU 리소스 현황 및 도입 계획 + +### 2.1 기존 리소스 +- 현재 보유 중인 NVIDIA GPU: 4대 (추정) + - 모니터링 시스템에 연결된 GPU 장비 확인됨 + - Docker 컨테이너에서 GPU 활용 구성 확인됨 + +### 2.2 도입 계획 +- **단기 계획 (3개월 이내)** + - 추가 NVIDIA RTX 3060 또는 4060 GPU 2대 도입 + - 기존 시스템 업그레이드 및 최적화 + +- **중기 계획 (6개월 이내)** + - 클라우드 GPU 인스턴스 활용 방안 수립 (필요 시) + - GPU 서버 공유 시스템 구축 + +## 3. GPU 리소스 관리 전략 + +### 3.1 시간 기반 할당 시스템 +- **시간대별 사용자 그룹 지정** + - 오전 (9AM-1PM): 초급 과정 학습자 + - 오후 (2PM-6PM): 중급 과정 학습자 + - 야간 (7PM-11PM): 고급 과정 및 프로젝트 작업 + +- **사전 예약 시스템** + - 웹 기반 GPU 리소스 예약 포털 구축 + - 최대 예약 시간: 1인당 4시간/일 + - 우선순위 기반 예약: 프로젝트 마감일 기준 + +### 3.2 작업 최적화 가이드라인 +- **모델 사전 설계 필수** + - GPU 사용 전 CPU에서 모델 아키텍처 검증 + - 하이퍼파라미터 사전 계획 + +- **배치 크기 최적화** + - GPU 메모리에 맞는 배치 크기 설정 가이드 제공 + - 그라디언트 누적(Gradient Accumulation) 기법 활용 + +- **작업 체크포인트** + - 30분 간격 자동 체크포인트 저장 + - 작업 재개 시스템 구축 + +## 4. 기술적 최적화 방안 + +### 4.1 모델 최적화 기법 교육 +- **모델 경량화 기술 교육** + - 지식 증류(Knowledge Distillation) + - 가지치기(Pruning) + - 양자화(Quantization) + +- **효율적 학습 기법** + - 전이학습(Transfer Learning) 활용 + - 점진적 학습(Progressive Learning) + - 작은 모델로 개념 증명 후 확장 + +### 4.2 GPU 메모리 최적화 +- **그래디언트 체크포인팅(Gradient Checkpointing)** + - 대규모 모델 학습 시 메모리 사용량 감소 + +- **혼합 정밀도 훈련(Mixed Precision Training)** + - FP16/BF16 활용으로 메모리 사용량 절감 및 속도 향상 + +- **메모리 효율적인 옵티마이저 활용** + - AdamW 대신 Lion 옵티마이저 사용 권장 + +## 5. 모니터링 및 관리 시스템 + +### 5.1 GPU 모니터링 시스템 구축 +- **실시간 모니터링 대시보드** + - GPU 사용률, 온도, 메모리 사용량 추적 + - 사용자별 리소스 사용 통계 + +- **알림 시스템** + - 과도한 GPU 사용 알림 + - 장시간 유휴 GPU 감지 및 알림 + +### 5.2 자원 회수 정책 +- **유휴 감지 시스템** + - 30분 이상 낮은 GPU 활용률(<10%) 감지 + - 사용자에게 경고 후 미응답 시 작업 저장 후 자원 회수 + +- **최대 실행 시간 제한** + - 기본 6시간 제한 (필요시 연장 신청) + - 장기 실행 작업은 야간 배치 작업으로 전환 + +## 6. 교육 과정별 리소스 활용 계획 + +### 6.1 초급 과정 +- **주요 내용:** Python 기초, ML 라이브러리 소개 +- **GPU 사용량:** 최소 또는 불필요 +- **대안 솔루션:** Google Colab 무료 버전 + +### 6.2 중급 과정 +- **주요 내용:** 딥러닝 기초, CNN, RNN 실습 +- **GPU 사용량:** 중간 (1-2시간/세션) +- **리소스 할당:** 공유 GPU, 시간제 접근 + +### 6.3 고급 과정 +- **주요 내용:** 대규모 모델, 프로젝트 개발 +- **GPU 사용량:** 높음 (3-4시간/세션) +- **리소스 할당:** 전용 GPU 시간, 야간 배치 작업 + +## 7. 비용 효율적인 대안 제시 + +### 7.1 클라우드 서비스 활용 +- **Google Colab Pro** ($9.99/월) + - 중간 규모 모델 학습에 적합 + - 접근성 용이, 환경 설정 최소화 + +- **Kaggle Notebooks** + - 무료 GPU 리소스 (주간 30시간) + - 공개 데이터셋 접근 용이 + +### 7.2 하이브리드 접근법 +- **로컬 GPU:** 개발, 디버깅, 소규모 실험 +- **클라우드 GPU:** 대규모 학습, 최종 모델 훈련 +- **사전 학습된 모델:** 미세 조정(Fine-tuning)으로 훈련 시간 단축 + +## 8. 구현 일정 + +### 8.1 1단계 (1-2개월) +- GPU 모니터링 시스템 구축 완료 +- 사용 가이드라인 문서화 +- 기본 예약 시스템 구현 + +### 8.2 2단계 (3-4개월) +- 자동화된 자원 관리 시스템 구축 +- 모델 최적화 워크숍 진행 +- 클라우드 GPU 연동 시스템 구축 + +### 8.3 3단계 (5-6개월) +- 고급 작업 스케줄링 시스템 구현 +- 사용자 피드백 기반 시스템 개선 +- 추가 리소스 확보 결정 + +## 9. 결론 +소규모 GPU 리소스 활용 계획은 제한된 자원을 효율적으로 사용하기 위한 기술적, 관리적 방안을 제시합니다. 적절한 시간 할당, 최적화 기법 교육, 모니터링 시스템 구축을 통해 학습자들이 필요한 GPU 리소스에 공평하게 접근하고 학습 효과를 극대화할 수 있도록 지원할 것입니다. \ No newline at end of file diff --git a/nginx/proxy_analysis.md b/1_infrastructure/nginx/proxy_analysis.md similarity index 100% rename from nginx/proxy_analysis.md rename to 1_infrastructure/nginx/proxy_analysis.md diff --git a/server_backup/README.md b/1_infrastructure/server_backup/README.md similarity index 100% rename from server_backup/README.md rename to 1_infrastructure/server_backup/README.md diff --git a/server_backup/geumdo_mirror_backup.sh b/1_infrastructure/server_backup/geumdo_mirror_backup.sh similarity index 100% rename from server_backup/geumdo_mirror_backup.sh rename to 1_infrastructure/server_backup/geumdo_mirror_backup.sh diff --git a/server_backup/iact_mirror_backup.sh b/1_infrastructure/server_backup/iact_mirror_backup.sh similarity index 100% rename from server_backup/iact_mirror_backup.sh rename to 1_infrastructure/server_backup/iact_mirror_backup.sh diff --git a/server_backup/last_day_of_month.sh b/1_infrastructure/server_backup/last_day_of_month.sh similarity index 100% rename from server_backup/last_day_of_month.sh rename to 1_infrastructure/server_backup/last_day_of_month.sh diff --git a/server_backup/server_backup_guide.md b/1_infrastructure/server_backup/server_backup_guide.md similarity index 100% rename from server_backup/server_backup_guide.md rename to 1_infrastructure/server_backup/server_backup_guide.md diff --git a/server_backup/source_backup.sh b/1_infrastructure/server_backup/source_backup.sh similarity index 100% rename from server_backup/source_backup.sh rename to 1_infrastructure/server_backup/source_backup.sh diff --git a/2_services/1_metaverse/nodam/.gitattributes b/2_services/1_metaverse/nodam/.gitattributes new file mode 100644 index 0000000..bdb0cab --- /dev/null +++ b/2_services/1_metaverse/nodam/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/2_services/1_metaverse/nodam/.gitignore b/2_services/1_metaverse/nodam/.gitignore new file mode 100644 index 0000000..13fb304 --- /dev/null +++ b/2_services/1_metaverse/nodam/.gitignore @@ -0,0 +1,44 @@ +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk +application/session/ diff --git a/2_services/1_metaverse/nodam/.htaccess b/2_services/1_metaverse/nodam/.htaccess new file mode 100644 index 0000000..f28e384 --- /dev/null +++ b/2_services/1_metaverse/nodam/.htaccess @@ -0,0 +1,379 @@ +# ###################################################################### +# # CROSS-ORIGIN # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Cross-origin images | +# ---------------------------------------------------------------------- + + + + SetEnvIf Origin ":" IS_CORS + Header set Access-Control-Allow-Origin "*" env=IS_CORS + + + + +# ---------------------------------------------------------------------- +# | Cross-origin web fonts | +# ---------------------------------------------------------------------- + + + Header set Access-Control-Allow-Origin "*" + + + + +# ###################################################################### +# # ERRORS # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Custom error messages/pages | +# ---------------------------------------------------------------------- +ErrorDocument 404 /404.html + +# ---------------------------------------------------------------------- +# | Error prevention | +# ---------------------------------------------------------------------- +Options -MultiViews + + +# ###################################################################### +# # INTERNET EXPLORER # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Document modes | +# ---------------------------------------------------------------------- + + Header set X-UA-Compatible "IE=edge" + + + Header unset X-UA-Compatible + + + + +# ###################################################################### +# # MEDIA TYPES AND CHARACTER ENCODINGS # +# ###################################################################### + + # Data interchange + AddType application/atom+xml atom + AddType application/json json map topojson + AddType application/ld+json jsonld + AddType application/rss+xml rss + AddType application/vnd.geo+json geojson + AddType application/xml rdf xml + + # JavaScript + AddType application/javascript js + + # Manifest files + AddType application/manifest+json webmanifest + AddType application/x-web-app-manifest+json webapp + AddType text/cache-manifest appcache + + # Media files + AddType audio/mp4 f4a f4b m4a + AddType audio/ogg oga ogg opus + AddType image/bmp bmp + AddType image/svg+xml svg svgz + AddType image/webp webp + AddType video/mp4 f4v f4p m4v mp4 + AddType video/ogg ogv + AddType video/webm webm + AddType video/x-flv flv + AddType image/x-icon cur ico + + # Web fonts + AddType application/font-woff woff + AddType application/font-woff2 woff2 + AddType application/vnd.ms-fontobject eot + AddType application/x-font-ttf ttc ttf + AddType font/opentype otf + + # Other + AddType application/octet-stream safariextz + AddType application/x-bb-appworld bbaw + AddType application/x-chrome-extension crx + AddType application/x-opera-extension oex + AddType application/x-xpinstall xpi + AddType text/vcard vcard vcf + AddType text/vnd.rim.location.xloc xloc + AddType text/vtt vtt + AddType text/x-component htc + + +# ---------------------------------------------------------------------- +# | Character encodings | +# ---------------------------------------------------------------------- +AddDefaultCharset utf-8 + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + AddCharset utf-8 .atom \ + .bbaw \ + .css \ + .geojson \ + .js \ + .json \ + .jsonld \ + .manifest \ + .rdf \ + .rss \ + .topojson \ + .vtt \ + .webapp \ + .webmanifest \ + .xloc \ + .xml + + + +# ###################################################################### +# # REWRITES # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Rewrite engine | +# ---------------------------------------------------------------------- + + RewriteEngine On + Options +FollowSymlinks + + # - - - Use for 1and1 - - - + # RewriteBase / + + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)$ index.php/$1 [L] + + + +# ###################################################################### +# # SECURITY # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Clickjacking | +# ---------------------------------------------------------------------- + + Header set X-Frame-Options "SAMEORIGIN" + + +# ---------------------------------------------------------------------- +# | Content Security Policy (CSP) | +# ---------------------------------------------------------------------- +# +# Header set Content-Security-Policy "script-src 'self'; object-src 'self'" +# + +# ---------------------------------------------------------------------- +# | File access | +# ---------------------------------------------------------------------- + + Options -Indexes + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + RewriteEngine On + RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC] + RewriteCond %{SCRIPT_FILENAME} -d [OR] + RewriteCond %{SCRIPT_FILENAME} -f + RewriteRule "(^|/)\." - [F] + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + # Apache < 2.3 + + Order allow,deny + Deny from all + Satisfy All + + + # Apache ≥ 2.3 + + Require all denied + + + +# ---------------------------------------------------------------------- +# | Reducing MIME type security risks | +# ---------------------------------------------------------------------- + + Header set X-Content-Type-Options "nosniff" + + +# ---------------------------------------------------------------------- +# | Reflected Cross-Site Scripting (XSS) attacks | +# ---------------------------------------------------------------------- + + Header set X-XSS-Protection "1; mode=block" + + + Header unset X-XSS-Protection + + + +# ---------------------------------------------------------------------- +# | Server-side technology information | +# ---------------------------------------------------------------------- + + Header unset X-Powered-By + + +# ---------------------------------------------------------------------- +# | Server software information | +# ---------------------------------------------------------------------- +ServerSignature Off + + +# ###################################################################### +# # WEB PERFORMANCE # +# ###################################################################### + +# ---------------------------------------------------------------------- +# | Compression | +# ---------------------------------------------------------------------- + + + + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + + + + + Header append Vary: Accept-Encoding + + + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/eot" \ + "font/opentype" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + + + + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + AddEncoding gzip svgz + + + +# ---------------------------------------------------------------------- +# | ETags | +# ---------------------------------------------------------------------- + + Header unset ETag + + +FileETag None + +# ---------------------------------------------------------------------- +# | Expires headers | +# ---------------------------------------------------------------------- + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + # CSS + ExpiresByType text/css "access plus 1 year" + + # Data interchange + ExpiresByType application/atom+xml "access plus 1 hour" + ExpiresByType application/rdf+xml "access plus 1 hour" + ExpiresByType application/rss+xml "access plus 1 hour" + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/ld+json "access plus 0 seconds" + ExpiresByType application/schema+json "access plus 0 seconds" + ExpiresByType application/vnd.geo+json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + + # Favicon (cannot be renamed!) and cursor images + ExpiresByType image/vnd.microsoft.icon "access plus 1 week" + ExpiresByType image/x-icon "access plus 1 week" + + # HTML + ExpiresByType text/html "access plus 0 seconds" + + # JavaScript + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + + # Manifest files + ExpiresByType application/manifest+json "access plus 1 week" + ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" + ExpiresByType text/cache-manifest "access plus 0 seconds" + + # Media files + ExpiresByType audio/ogg "access plus 1 month" + ExpiresByType image/bmp "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + ExpiresByType image/webp "access plus 1 month" + ExpiresByType video/mp4 "access plus 1 month" + ExpiresByType video/ogg "access plus 1 month" + ExpiresByType video/webm "access plus 1 month" + + # Web fonts + # Embedded OpenType (EOT) + ExpiresByType application/vnd.ms-fontobject "access plus 1 month" + ExpiresByType font/eot "access plus 1 month" + # OpenType + ExpiresByType font/opentype "access plus 1 month" + # TrueType + ExpiresByType application/x-font-ttf "access plus 1 month" + # Web Open Font Format (WOFF) 1.0 + ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/x-font-woff "access plus 1 month" + ExpiresByType font/woff "access plus 1 month" + # Web Open Font Format (WOFF) 2.0 + ExpiresByType application/font-woff2 "access plus 1 month" + + # Other + ExpiresByType text/x-cross-domain-policy "access plus 1 week" + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/README.md b/2_services/1_metaverse/nodam/README.md new file mode 100644 index 0000000..79d7466 --- /dev/null +++ b/2_services/1_metaverse/nodam/README.md @@ -0,0 +1,62 @@ +# CI-AdminLTE +CodeIgniter 3.1.10 with AdminLTE 2.3.11 + +## Installation + +1. Unzip the package. +2. Upload the `CI-AdminLTE` folders and files to your server. Normally the index.php file will be at your root. +3. Open the `application/config/common/dp_config.php` file with a text editor and set your base URL: +``` +// Fill in the file of your project here when you develop locally. +$host_dev = 'CI-AdminLTE'; + +// Fill in the domain name here when your project is online. +// Example : www.johndoe.com +// johndoe.com +$host_prod = 'your_domain.tld'; +``` +4. Create a table named `ci_adminlte` and inject the data from the `install/sql/ci_adminlte.sql` file. +5. Change if necessary the connection information to your database in the `application/config/database.php` file. + +## Demo + +https://demo.domprojects.com/ci-adminlte/auth/login + +### Login + * Email : `admin@admin.com` / Password : `password` + +## Browser Compatibility +Support for most major browsers including Chrome, Firefox, IE9+, Opera and Safari. + +## Languages + * English + * French + * Portuguese (translation by [marcelod](https://github.com/marcelod)) + * ... and more soon + +## Server Requirements + +PHP version 5.6 or newer is recommended. + +It should work on 5.4.8 as well, but we strongly advise you NOT to run such old versions of PHP, because of potential security and performance issues, as well as missing features. + +## Dependencies +| NAME | VERSION | WEB | REPO | +| :--- | :---: | :---: | :---: | +| CodeIgniter | 3.1.10 | [Website](https://codeigniter.com) | [Github](https://github.com/bcit-ci/CodeIgniter/) +| AdminLTE | 2.3.11 | [Website](https://adminlte.io) | [Github](https://github.com/almasaeed2010/AdminLTE/) +| Bootstrap | 3.3.7 | [Website](https://getbootstrap.com/docs/3.3) | [Github](https://github.com/twbs/bootstrap) +| Ion Auth | 2.6.0 | [Website](http://benedmunds.com/ion_auth) | [Github](https://github.com/benedmunds/CodeIgniter-Ion-Auth) +| jQuery | 2.2.4 | [Website](http://jquery.com) | [Github](https://github.com/jquery/jquery) +| Font Awesome | 4.7.0 | [Website](https://fontawesome.com/v4.7.0) | [Github](https://github.com/FortAwesome/Font-Awesome) +| Mobile Detect | 2.8.30 | [Website](http://mobiledetect.net) | [Github](https://github.com/serbanghita/Mobile-Detect) + +## CodeIgniter 3 Documentation + +* [User guide](https://codeigniter.com/user_guide) + +## Reference + +* [CodeIgniter](https://github.com/bcit-ci/CodeIgniter) +* [Translations for CodeIgniter System](https://github.com/bcit-ci/codeigniter3-translations) +* [AdminLTE](https://github.com/almasaeed2010/AdminLTE) diff --git a/2_services/1_metaverse/nodam/application/.htaccess b/2_services/1_metaverse/nodam/application/.htaccess new file mode 100644 index 0000000..6c63ed4 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/cache/.htaccess b/2_services/1_metaverse/nodam/application/cache/.htaccess new file mode 100644 index 0000000..6c63ed4 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/cache/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/cache/index.html b/2_services/1_metaverse/nodam/application/cache/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/cache/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/2_services/1_metaverse/nodam/application/config/admin/dp_config.php b/2_services/1_metaverse/nodam/application/config/admin/dp_config.php new file mode 100644 index 0000000..05d1382 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/admin/dp_config.php @@ -0,0 +1,36 @@ +'; +$config['pagetitle_close'] = ''; +$config['pagetitle_el_open'] = ''; +$config['pagetitle_el_close'] = ''; + +/* Breadcrumbs */ +$config['breadcrumb_open'] = ''; +$config['breadcrumb_el_open'] = '
  • '; +$config['breadcrumb_el_close'] = '
  • '; +$config['breadcrumb_el_first'] = ''; +$config['breadcrumb_el_last'] = '
  • '; + + diff --git a/2_services/1_metaverse/nodam/application/config/admin/index.html b/2_services/1_metaverse/nodam/application/config/admin/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/admin/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/config/autoload.php b/2_services/1_metaverse/nodam/application/config/autoload.php new file mode 100644 index 0000000..8d48919 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/autoload.php @@ -0,0 +1,129 @@ + 'ua'); +*/ +$autoload['libraries'] = array('form_validation', 'ion_auth', 'template', 'common/mobile_detect'); + +/* +| ------------------------------------------------------------------- +| Auto-load Drivers +| ------------------------------------------------------------------- +| These classes are located in system/libraries/ or in your +| application/libraries/ directory, but are also placed inside their +| own subdirectory and they extend the CI_Driver_Library class. They +| offer multiple interchangeable driver options. +| +| Prototype: +| +| $autoload['drivers'] = array('cache'); +*/ +$autoload['drivers'] = array(); + +/* +| ------------------------------------------------------------------- +| Auto-load Helper Files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['helper'] = array('url', 'file'); +*/ +$autoload['helper'] = array('array', 'language', 'url'); + +/* +| ------------------------------------------------------------------- +| Auto-load Config files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['config'] = array('config1', 'config2'); +| +| NOTE: This item is intended for use ONLY if you have created custom +| config files. Otherwise, leave it blank. +| +*/ +$autoload['config'] = array('common/dp_config', 'common/dp_language'); + +/* +| ------------------------------------------------------------------- +| Auto-load Language files +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['language'] = array('lang1', 'lang2'); +| +| NOTE: Do not include the "_lang" part of your file. For example +| "codeigniter_lang.php" would be referenced as array('codeigniter'); +| +*/ +$autoload['language'] = array(); + +/* +| ------------------------------------------------------------------- +| Auto-load Models +| ------------------------------------------------------------------- +| Prototype: +| +| $autoload['model'] = array('first_model', 'second_model'); +| +| You can also supply an alternative model name to be assigned +| in the controller: +| +| $autoload['model'] = array('first_model' => 'first'); +*/ +$autoload['model'] = array('common/prefs_model'); diff --git a/2_services/1_metaverse/nodam/application/config/common/dp_config.php b/2_services/1_metaverse/nodam/application/config/common/dp_config.php new file mode 100644 index 0000000..2bf6dc3 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/common/dp_config.php @@ -0,0 +1,52 @@ + 'en', + 'french' => 'fr', + 'portuguese' => 'pt' +); diff --git a/2_services/1_metaverse/nodam/application/config/common/index.html b/2_services/1_metaverse/nodam/application/config/common/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/common/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/config/config.php b/2_services/1_metaverse/nodam/application/config/config.php new file mode 100644 index 0000000..f02d8c1 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/config.php @@ -0,0 +1,504 @@ +]+$/i +| +| DO NOT CHANGE THIS UNLESS YOU FULLY UNDERSTAND THE REPERCUSSIONS!! +| +*/ +$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; + +/* +|-------------------------------------------------------------------------- +| Enable Query Strings +|-------------------------------------------------------------------------- +| +| By default CodeIgniter uses search-engine friendly segment based URLs: +| example.com/who/what/where/ +| +| By default CodeIgniter enables access to the $_GET array. If for some +| reason you would like to disable it, set 'allow_get_array' to FALSE. +| +| You can optionally enable standard query string based URLs: +| example.com?who=me&what=something&where=here +| +| Options are: TRUE or FALSE (boolean) +| +| The other items let you set the query string 'words' that will +| invoke your controllers and its functions: +| example.com/index.php?c=controller&m=function +| +| Please note that some of the helpers won't work as expected when +| this feature is enabled, since CodeIgniter is designed primarily to +| use segment based URLs. +| +*/ +$config['allow_get_array'] = TRUE; +$config['enable_query_strings'] = FALSE; +$config['controller_trigger'] = 'c'; +$config['function_trigger'] = 'm'; +$config['directory_trigger'] = 'd'; + +/* +|-------------------------------------------------------------------------- +| Error Logging Threshold +|-------------------------------------------------------------------------- +| +| You can enable error logging by setting a threshold over zero. The +| threshold determines what gets logged. Threshold options are: +| +| 0 = Disables logging, Error logging TURNED OFF +| 1 = Error Messages (including PHP errors) +| 2 = Debug Messages +| 3 = Informational Messages +| 4 = All Messages +| +| You can also pass an array with threshold levels to show individual error types +| +| array(2) = Debug Messages, without Error Messages +| +| For a live site you'll usually only enable Errors (1) to be logged otherwise +| your log files will fill up very fast. +| +*/ +$config['log_threshold'] = 0; + +/* +|-------------------------------------------------------------------------- +| Error Logging Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/logs/ directory. Use a full server path with trailing slash. +| +*/ +$config['log_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Log File Extension +|-------------------------------------------------------------------------- +| +| The default filename extension for log files. The default 'php' allows for +| protecting the log files via basic scripting, when they are to be stored +| under a publicly accessible directory. +| +| Note: Leaving it blank will default to 'php'. +| +*/ +$config['log_file_extension'] = ''; + +/* +|-------------------------------------------------------------------------- +| Log File Permissions +|-------------------------------------------------------------------------- +| +| The file system permissions to be applied on newly created log files. +| +| IMPORTANT: This MUST be an integer (no quotes) and you MUST use octal +| integer notation (i.e. 0700, 0644, etc.) +*/ +$config['log_file_permissions'] = 0644; + +/* +|-------------------------------------------------------------------------- +| Date Format for Logs +|-------------------------------------------------------------------------- +| +| Each item that is logged has an associated date. You can use PHP date +| codes to set your own date formatting +| +*/ +$config['log_date_format'] = 'Y-m-d H:i:s'; + +/* +|-------------------------------------------------------------------------- +| Error Views Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/views/errors/ directory. Use a full server path with trailing slash. +| +*/ +$config['error_views_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Cache Directory Path +|-------------------------------------------------------------------------- +| +| Leave this BLANK unless you would like to set something other than the default +| application/cache/ directory. Use a full server path with trailing slash. +| +*/ +$config['cache_path'] = ''; + +/* +|-------------------------------------------------------------------------- +| Cache Include Query String +|-------------------------------------------------------------------------- +| +| Whether to take the URL query string into consideration when generating +| output cache files. Valid options are: +| +| FALSE = Disabled +| TRUE = Enabled, take all query parameters into account. +| Please be aware that this may result in numerous cache +| files generated for the same page over and over again. +| array('q') = Enabled, but only take into account the specified list +| of query parameters. +| +*/ +$config['cache_query_string'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Encryption Key +|-------------------------------------------------------------------------- +| +| If you use the Encryption class, you must set an encryption key. +| See the user guide for more info. +| +| http://codeigniter.com/user_guide/libraries/encryption.html +| +*/ +$config['encryption_key'] = ''; + +/* +|-------------------------------------------------------------------------- +| Session Variables +|-------------------------------------------------------------------------- +| +| 'sess_driver' +| +| The storage driver to use: files, database, redis, memcached +| +| 'sess_cookie_name' +| +| The session cookie name, must contain only [0-9a-z_-] characters +| +| 'sess_expiration' +| +| The number of SECONDS you want the session to last. +| Setting to 0 (zero) means expire when the browser is closed. +| +| 'sess_save_path' +| +| The location to save sessions to, driver dependent. +| +| For the 'files' driver, it's a path to a writable directory. +| WARNING: Only absolute paths are supported! +| +| For the 'database' driver, it's a table name. +| Please read up the manual for the format with other session drivers. +| +| IMPORTANT: You are REQUIRED to set a valid save path! +| +| 'sess_match_ip' +| +| Whether to match the user's IP address when reading the session data. +| +| 'sess_time_to_update' +| +| How many seconds between CI regenerating the session ID. +| +| 'sess_regenerate_destroy' +| +| Whether to destroy session data associated with the old session ID +| when auto-regenerating the session ID. When set to FALSE, the data +| will be later deleted by the garbage collector. +| +| Other session cookie settings are shared with the rest of the application, +| except for 'cookie_prefix' and 'cookie_httponly', which are ignored here. +| +*/ +$config['sess_driver'] = 'files'; +$config['sess_cookie_name'] = 'ci_session'; +$config['sess_expiration'] = 7200; +$config['sess_save_path'] = APPPATH.DIRECTORY_SEPARATOR.'session'; +$config['sess_match_ip'] = FALSE; +$config['sess_time_to_update'] = 300; +$config['sess_regenerate_destroy'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Cookie Related Variables +|-------------------------------------------------------------------------- +| +| 'cookie_prefix' = Set a cookie name prefix if you need to avoid collisions +| 'cookie_domain' = Set to .your-domain.com for site-wide cookies +| 'cookie_path' = Typically will be a forward slash +| 'cookie_secure' = Cookie will only be set if a secure HTTPS connection exists. +| 'cookie_httponly' = Cookie will only be accessible via HTTP(S) (no javascript) +| +| Note: These settings (with the exception of 'cookie_prefix' and +| 'cookie_httponly') will also affect sessions. +| +*/ +$config['cookie_prefix'] = ''; +$config['cookie_domain'] = ''; +$config['cookie_path'] = '/'; +$config['cookie_secure'] = FALSE; +$config['cookie_httponly'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Standardize newlines +|-------------------------------------------------------------------------- +| +| Determines whether to standardize newline characters in input data, +| meaning to replace \r\n, \r, \n occurrences with the PHP_EOL value. +| +| This is particularly useful for portability between UNIX-based OSes, +| (usually \n) and Windows (\r\n). +| +*/ +$config['standardize_newlines'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Global XSS Filtering +|-------------------------------------------------------------------------- +| +| Determines whether the XSS filter is always active when GET, POST or +| COOKIE data is encountered +| +| WARNING: This feature is DEPRECATED and currently available only +| for backwards compatibility purposes! +| +*/ +$config['global_xss_filtering'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Cross Site Request Forgery +|-------------------------------------------------------------------------- +| Enables a CSRF cookie token to be set. When set to TRUE, token will be +| checked on a submitted form. If you are accepting user data, it is strongly +| recommended CSRF protection be enabled. +| +| 'csrf_token_name' = The token name +| 'csrf_cookie_name' = The cookie name +| 'csrf_expire' = The number in seconds the token should expire. +| 'csrf_regenerate' = Regenerate token on every submission +| 'csrf_exclude_uris' = Array of URIs which ignore CSRF checks +*/ +$config['csrf_protection'] = FALSE; +$config['csrf_token_name'] = 'csrf_test_name'; +$config['csrf_cookie_name'] = 'csrf_cookie_name'; +$config['csrf_expire'] = 7200; +$config['csrf_regenerate'] = TRUE; +$config['csrf_exclude_uris'] = array(); + +/* +|-------------------------------------------------------------------------- +| Output Compression +|-------------------------------------------------------------------------- +| +| Enables Gzip output compression for faster page loads. When enabled, +| the output class will test whether your server supports Gzip. +| Even if it does, however, not all browsers support compression +| so enable only if you are reasonably sure your visitors can handle it. +| +| Only used if zlib.output_compression is turned off in your php.ini. +| Please do not use it together with httpd-level output compression. +| +| VERY IMPORTANT: If you are getting a blank page when compression is enabled it +| means you are prematurely outputting something to your browser. It could +| even be a line of whitespace at the end of one of your scripts. For +| compression to work, nothing can be sent before the output buffer is called +| by the output class. Do not 'echo' any values with compression enabled. +| +*/ +$config['compress_output'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Master Time Reference +|-------------------------------------------------------------------------- +| +| Options are 'local' or any PHP supported timezone. This preference tells +| the system whether to use your server's local time as the master 'now' +| reference, or convert it to the configured one timezone. See the 'date +| helper' page of the user guide for information regarding date handling. +| +*/ +$config['time_reference'] = 'local'; + +/* +|-------------------------------------------------------------------------- +| Rewrite PHP Short Tags +|-------------------------------------------------------------------------- +| +| If your PHP installation does not have short tag support enabled CI +| can rewrite the tags on-the-fly, enabling you to utilize that syntax +| in your view files. Options are TRUE or FALSE (boolean) +| +| Note: You need to have eval() enabled for this to work. +| +*/ +$config['rewrite_short_tags'] = FALSE; + +/* +|-------------------------------------------------------------------------- +| Reverse Proxy IPs +|-------------------------------------------------------------------------- +| +| If your server is behind a reverse proxy, you must whitelist the proxy +| IP addresses from which CodeIgniter should trust headers such as +| HTTP_X_FORWARDED_FOR and HTTP_CLIENT_IP in order to properly identify +| the visitor's IP address. +| +| You can use both an array or a comma-separated list of proxy addresses, +| as well as specifying whole subnets. Here are a few examples: +| +| Comma-separated: '10.0.1.200,192.168.5.0/24' +| Array: array('10.0.1.200', '192.168.5.0/24') +*/ +$config['proxy_ips'] = ''; diff --git a/2_services/1_metaverse/nodam/application/config/constants.php b/2_services/1_metaverse/nodam/application/config/constants.php new file mode 100644 index 0000000..e8d2c00 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/constants.php @@ -0,0 +1,85 @@ +db->last_query() and profiling of DB queries. +| When you run a query, with this setting set to TRUE (default), +| CodeIgniter will store the SQL statement for debugging purposes. +| However, this may cause high memory usage, especially if you run +| a lot of SQL queries ... disable this to avoid that problem. +| +| The $active_group variable lets you choose which connection group to +| make active. By default there is only one group (the 'default' group). +| +| The $query_builder variables lets you determine whether or not to load +| the query builder class. +*/ +$active_group = 'default'; +$query_builder = TRUE; + +$db['default'] = array( + 'dsn' => '', + 'hostname' => '127.0.0.1', + 'port' => '53306', + 'username' => 'root', + 'password' => '1q2w3e4r5t', + 'database' => 'test_nodam', + 'dbdriver' => 'mysqli', + 'dbprefix' => '', + 'pconnect' => FALSE, + 'db_debug' => (ENVIRONMENT !== 'production'), + 'cache_on' => FALSE, + 'cachedir' => '', + 'char_set' => 'utf8', + 'dbcollat' => 'utf8mb4_unicode_ci', + 'swap_pre' => '', + 'encrypt' => FALSE, + 'compress' => FALSE, + 'stricton' => FALSE, + 'failover' => array(), + 'save_queries' => TRUE +); diff --git a/2_services/1_metaverse/nodam/application/config/doctypes.php b/2_services/1_metaverse/nodam/application/config/doctypes.php new file mode 100644 index 0000000..59a7991 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/doctypes.php @@ -0,0 +1,24 @@ + '', + 'xhtml1-strict' => '', + 'xhtml1-trans' => '', + 'xhtml1-frame' => '', + 'xhtml-basic11' => '', + 'html5' => '', + 'html4-strict' => '', + 'html4-trans' => '', + 'html4-frame' => '', + 'mathml1' => '', + 'mathml2' => '', + 'svg10' => '', + 'svg11' => '', + 'svg11-basic' => '', + 'svg11-tiny' => '', + 'xhtml-math-svg-xh' => '', + 'xhtml-math-svg-sh' => '', + 'xhtml-rdfa-1' => '', + 'xhtml-rdfa-2' => '' +); diff --git a/2_services/1_metaverse/nodam/application/config/foreign_chars.php b/2_services/1_metaverse/nodam/application/config/foreign_chars.php new file mode 100644 index 0000000..ac406e3 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/foreign_chars.php @@ -0,0 +1,103 @@ + 'ae', + '/ö|œ/' => 'oe', + '/ü/' => 'ue', + '/Ä/' => 'Ae', + '/Ü/' => 'Ue', + '/Ö/' => 'Oe', + '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ|Α|Ά|Ả|Ạ|Ầ|Ẫ|Ẩ|Ậ|Ằ|Ắ|Ẵ|Ẳ|Ặ|А/' => 'A', + '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª|α|ά|ả|ạ|ầ|ấ|ẫ|ẩ|ậ|ằ|ắ|ẵ|ẳ|ặ|а/' => 'a', + '/Б/' => 'B', + '/б/' => 'b', + '/Ç|Ć|Ĉ|Ċ|Č/' => 'C', + '/ç|ć|ĉ|ċ|č/' => 'c', + '/Д/' => 'D', + '/д/' => 'd', + '/Ð|Ď|Đ|Δ/' => 'Dj', + '/ð|ď|đ|δ/' => 'dj', + '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě|Ε|Έ|Ẽ|Ẻ|Ẹ|Ề|Ế|Ễ|Ể|Ệ|Е|Э/' => 'E', + '/è|é|ê|ë|ē|ĕ|ė|ę|ě|έ|ε|ẽ|ẻ|ẹ|ề|ế|ễ|ể|ệ|е|э/' => 'e', + '/Ф/' => 'F', + '/ф/' => 'f', + '/Ĝ|Ğ|Ġ|Ģ|Γ|Г|Ґ/' => 'G', + '/ĝ|ğ|ġ|ģ|γ|г|ґ/' => 'g', + '/Ĥ|Ħ/' => 'H', + '/ĥ|ħ/' => 'h', + '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ|Η|Ή|Ί|Ι|Ϊ|Ỉ|Ị|И|Ы/' => 'I', + '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı|η|ή|ί|ι|ϊ|ỉ|ị|и|ы|ї/' => 'i', + '/Ĵ/' => 'J', + '/ĵ/' => 'j', + '/Ķ|Κ|К/' => 'K', + '/ķ|κ|к/' => 'k', + '/Ĺ|Ļ|Ľ|Ŀ|Ł|Λ|Л/' => 'L', + '/ĺ|ļ|ľ|ŀ|ł|λ|л/' => 'l', + '/М/' => 'M', + '/м/' => 'm', + '/Ñ|Ń|Ņ|Ň|Ν|Н/' => 'N', + '/ñ|ń|ņ|ň|ʼn|ν|н/' => 'n', + '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ|Ο|Ό|Ω|Ώ|Ỏ|Ọ|Ồ|Ố|Ỗ|Ổ|Ộ|Ờ|Ớ|Ỡ|Ở|Ợ|О/' => 'O', + '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º|ο|ό|ω|ώ|ỏ|ọ|ồ|ố|ỗ|ổ|ộ|ờ|ớ|ỡ|ở|ợ|о/' => 'o', + '/П/' => 'P', + '/п/' => 'p', + '/Ŕ|Ŗ|Ř|Ρ|Р/' => 'R', + '/ŕ|ŗ|ř|ρ|р/' => 'r', + '/Ś|Ŝ|Ş|Ș|Š|Σ|С/' => 'S', + '/ś|ŝ|ş|ș|š|ſ|σ|ς|с/' => 's', + '/Ț|Ţ|Ť|Ŧ|τ|Т/' => 'T', + '/ț|ţ|ť|ŧ|т/' => 't', + '/Þ|þ/' => 'th', + '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ|Ũ|Ủ|Ụ|Ừ|Ứ|Ữ|Ử|Ự|У/' => 'U', + '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ|υ|ύ|ϋ|ủ|ụ|ừ|ứ|ữ|ử|ự|у/' => 'u', + '/Ý|Ÿ|Ŷ|Υ|Ύ|Ϋ|Ỳ|Ỹ|Ỷ|Ỵ|Й/' => 'Y', + '/ý|ÿ|ŷ|ỳ|ỹ|ỷ|ỵ|й/' => 'y', + '/В/' => 'V', + '/в/' => 'v', + '/Ŵ/' => 'W', + '/ŵ/' => 'w', + '/Ź|Ż|Ž|Ζ|З/' => 'Z', + '/ź|ż|ž|ζ|з/' => 'z', + '/Æ|Ǽ/' => 'AE', + '/ß/' => 'ss', + '/IJ/' => 'IJ', + '/ij/' => 'ij', + '/Œ/' => 'OE', + '/ƒ/' => 'f', + '/ξ/' => 'ks', + '/π/' => 'p', + '/β/' => 'v', + '/μ/' => 'm', + '/ψ/' => 'ps', + '/Ё/' => 'Yo', + '/ё/' => 'yo', + '/Є/' => 'Ye', + '/є/' => 'ye', + '/Ї/' => 'Yi', + '/Ж/' => 'Zh', + '/ж/' => 'zh', + '/Х/' => 'Kh', + '/х/' => 'kh', + '/Ц/' => 'Ts', + '/ц/' => 'ts', + '/Ч/' => 'Ch', + '/ч/' => 'ch', + '/Ш/' => 'Sh', + '/ш/' => 'sh', + '/Щ/' => 'Shch', + '/щ/' => 'shch', + '/Ъ|ъ|Ь|ь/' => '', + '/Ю/' => 'Yu', + '/ю/' => 'yu', + '/Я/' => 'Ya', + '/я/' => 'ya' +); diff --git a/2_services/1_metaverse/nodam/application/config/hooks.php b/2_services/1_metaverse/nodam/application/config/hooks.php new file mode 100644 index 0000000..61fbabf --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/hooks.php @@ -0,0 +1,26 @@ + '', + 'function' => 'minify_html', + 'filename' => 'minify_html.php', + 'filepath' => 'hooks' +); diff --git a/2_services/1_metaverse/nodam/application/config/index.html b/2_services/1_metaverse/nodam/application/config/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/config/memcached.php b/2_services/1_metaverse/nodam/application/config/memcached.php new file mode 100644 index 0000000..55949a6 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/memcached.php @@ -0,0 +1,19 @@ + array( + 'hostname' => '127.0.0.1', + 'port' => '11211', + 'weight' => '1', + ), +); diff --git a/2_services/1_metaverse/nodam/application/config/migration.php b/2_services/1_metaverse/nodam/application/config/migration.php new file mode 100644 index 0000000..4b585a6 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/migration.php @@ -0,0 +1,84 @@ +migration->current() this is the version that schema will +| be upgraded / downgraded to. +| +*/ +$config['migration_version'] = 0; + +/* +|-------------------------------------------------------------------------- +| Migrations Path +|-------------------------------------------------------------------------- +| +| Path to your migrations folder. +| Typically, it will be within your application path. +| Also, writing permission is required within the migrations path. +| +*/ +$config['migration_path'] = APPPATH.'migrations/'; diff --git a/2_services/1_metaverse/nodam/application/config/mimes.php b/2_services/1_metaverse/nodam/application/config/mimes.php new file mode 100644 index 0000000..0ec9db0 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/mimes.php @@ -0,0 +1,184 @@ + array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'), + 'cpt' => 'application/mac-compactpro', + 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/plain'), + 'bin' => array('application/macbinary', 'application/mac-binary', 'application/octet-stream', 'application/x-binary', 'application/x-macbinary'), + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => array('application/octet-stream', 'application/x-msdownload'), + 'class' => 'application/octet-stream', + 'psd' => array('application/x-photoshop', 'image/vnd.adobe.photoshop'), + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => array('application/pdf', 'application/force-download', 'application/x-download', 'binary/octet-stream'), + 'ai' => array('application/pdf', 'application/postscript'), + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => array('application/vnd.ms-excel', 'application/msexcel', 'application/x-msexcel', 'application/x-ms-excel', 'application/x-excel', 'application/x-dos_ms_excel', 'application/xls', 'application/x-xls', 'application/excel', 'application/download', 'application/vnd.ms-office', 'application/msword'), + 'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint', 'application/vnd.ms-office', 'application/msword'), + 'pptx' => array('application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/x-zip', 'application/zip'), + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'gzip' => 'application/x-gzip', + 'php' => array('application/x-httpd-php', 'application/php', 'application/x-php', 'text/php', 'text/x-php', 'application/x-httpd-php-source'), + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => array('application/x-javascript', 'text/plain'), + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => array('application/x-tar', 'application/x-gzip-compressed'), + 'z' => 'application/x-compress', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'), + 'rar' => array('application/x-rar', 'application/rar', 'application/x-rar-compressed'), + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'), + 'aif' => array('audio/x-aiff', 'audio/aiff'), + 'aiff' => array('audio/x-aiff', 'audio/aiff'), + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'), + 'bmp' => array('image/bmp', 'image/x-bmp', 'image/x-bitmap', 'image/x-xbitmap', 'image/x-win-bitmap', 'image/x-windows-bmp', 'image/ms-bmp', 'image/x-ms-bmp', 'application/bmp', 'application/x-bmp', 'application/x-win-bitmap'), + 'gif' => 'image/gif', + 'jpeg' => array('image/jpeg', 'image/pjpeg'), + 'jpg' => array('image/jpeg', 'image/pjpeg'), + 'jpe' => array('image/jpeg', 'image/pjpeg'), + 'jp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'j2k' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpf' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpg2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpx' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'jpm' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'mj2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'mjp2' => array('image/jp2', 'video/mj2', 'image/jpx', 'image/jpm'), + 'png' => array('image/png', 'image/x-png'), + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => array('text/css', 'text/plain'), + 'html' => array('text/html', 'text/plain'), + 'htm' => array('text/html', 'text/plain'), + 'shtml' => array('text/html', 'text/plain'), + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => array('text/plain', 'text/x-log'), + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => array('application/xml', 'text/xml', 'text/plain'), + 'xsl' => array('application/xml', 'text/xsl', 'text/xml'), + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => array('video/x-msvideo', 'video/msvideo', 'video/avi', 'application/x-troff-msvideo'), + 'movie' => 'video/x-sgi-movie', + 'doc' => array('application/msword', 'application/vnd.ms-office'), + 'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword', 'application/x-zip'), + 'dot' => array('application/msword', 'application/vnd.ms-office'), + 'dotx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip', 'application/msword'), + 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/vnd.ms-excel', 'application/msword', 'application/x-zip'), + 'word' => array('application/msword', 'application/octet-stream'), + 'xl' => 'application/excel', + 'eml' => 'message/rfc822', + 'json' => array('application/json', 'text/json'), + 'pem' => array('application/x-x509-user-cert', 'application/x-pem-file', 'application/octet-stream'), + 'p10' => array('application/x-pkcs10', 'application/pkcs10'), + 'p12' => 'application/x-pkcs12', + 'p7a' => 'application/x-pkcs7-signature', + 'p7c' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), + 'p7m' => array('application/pkcs7-mime', 'application/x-pkcs7-mime'), + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'crt' => array('application/x-x509-ca-cert', 'application/x-x509-user-cert', 'application/pkix-cert'), + 'crl' => array('application/pkix-crl', 'application/pkcs-crl'), + 'der' => 'application/x-x509-ca-cert', + 'kdb' => 'application/octet-stream', + 'pgp' => 'application/pgp', + 'gpg' => 'application/gpg-keys', + 'sst' => 'application/octet-stream', + 'csr' => 'application/octet-stream', + 'rsa' => 'application/x-pkcs7', + 'cer' => array('application/pkix-cert', 'application/x-x509-ca-cert'), + '3g2' => 'video/3gpp2', + '3gp' => array('video/3gp', 'video/3gpp'), + 'mp4' => 'video/mp4', + 'm4a' => 'audio/x-m4a', + 'f4v' => array('video/mp4', 'video/x-f4v'), + 'flv' => 'video/x-flv', + 'webm' => 'video/webm', + 'aac' => 'audio/x-acc', + 'm4u' => 'application/vnd.mpegurl', + 'm3u' => 'text/plain', + 'xspf' => 'application/xspf+xml', + 'vlc' => 'application/videolan', + 'wmv' => array('video/x-ms-wmv', 'video/x-ms-asf'), + 'au' => 'audio/x-au', + 'ac3' => 'audio/ac3', + 'flac' => 'audio/x-flac', + 'ogg' => array('audio/ogg', 'video/ogg', 'application/ogg'), + 'kmz' => array('application/vnd.google-earth.kmz', 'application/zip', 'application/x-zip'), + 'kml' => array('application/vnd.google-earth.kml+xml', 'application/xml', 'text/xml'), + 'ics' => 'text/calendar', + 'ical' => 'text/calendar', + 'zsh' => 'text/x-scriptzsh', + '7z' => array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'), + '7zip' => array('application/x-7z-compressed', 'application/x-compressed', 'application/x-zip-compressed', 'application/zip', 'multipart/x-zip'), + 'cdr' => array('application/cdr', 'application/coreldraw', 'application/x-cdr', 'application/x-coreldraw', 'image/cdr', 'image/x-cdr', 'zz-application/zz-winassoc-cdr'), + 'wma' => array('audio/x-ms-wma', 'video/x-ms-asf'), + 'jar' => array('application/java-archive', 'application/x-java-application', 'application/x-jar', 'application/x-compressed'), + 'svg' => array('image/svg+xml', 'application/xml', 'text/xml'), + 'vcf' => 'text/x-vcard', + 'srt' => array('text/srt', 'text/plain'), + 'vtt' => array('text/vtt', 'text/plain'), + 'ico' => array('image/x-icon', 'image/x-ico', 'image/vnd.microsoft.icon'), + 'odc' => 'application/vnd.oasis.opendocument.chart', + 'otc' => 'application/vnd.oasis.opendocument.chart-template', + 'odf' => 'application/vnd.oasis.opendocument.formula', + 'otf' => 'application/vnd.oasis.opendocument.formula-template', + 'odg' => 'application/vnd.oasis.opendocument.graphics', + 'otg' => 'application/vnd.oasis.opendocument.graphics-template', + 'odi' => 'application/vnd.oasis.opendocument.image', + 'oti' => 'application/vnd.oasis.opendocument.image-template', + 'odp' => 'application/vnd.oasis.opendocument.presentation', + 'otp' => 'application/vnd.oasis.opendocument.presentation-template', + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template', + 'odt' => 'application/vnd.oasis.opendocument.text', + 'odm' => 'application/vnd.oasis.opendocument.text-master', + 'ott' => 'application/vnd.oasis.opendocument.text-template', + 'oth' => 'application/vnd.oasis.opendocument.text-web' +); diff --git a/2_services/1_metaverse/nodam/application/config/profiler.php b/2_services/1_metaverse/nodam/application/config/profiler.php new file mode 100644 index 0000000..b30204e --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/profiler.php @@ -0,0 +1,14 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/config/routes.php b/2_services/1_metaverse/nodam/application/config/routes.php new file mode 100644 index 0000000..3f4e156 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/routes.php @@ -0,0 +1,58 @@ + my_controller/index +| my-controller/my-method -> my_controller/my_method +*/ +$route['default_controller'] = 'home'; +$route['404_override'] = ''; +$route['translate_uri_dashes'] = FALSE; + +$route['admin'] = 'admin/dashboard'; +$route['admin/prefs/interfaces/(:any)'] = 'admin/prefs/interfaces/$1'; + diff --git a/2_services/1_metaverse/nodam/application/config/smileys.php b/2_services/1_metaverse/nodam/application/config/smileys.php new file mode 100644 index 0000000..1eeba47 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/smileys.php @@ -0,0 +1,64 @@ + array('grin.gif', '19', '19', 'grin'), + ':lol:' => array('lol.gif', '19', '19', 'LOL'), + ':cheese:' => array('cheese.gif', '19', '19', 'cheese'), + ':)' => array('smile.gif', '19', '19', 'smile'), + ';-)' => array('wink.gif', '19', '19', 'wink'), + ';)' => array('wink.gif', '19', '19', 'wink'), + ':smirk:' => array('smirk.gif', '19', '19', 'smirk'), + ':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'), + ':-S' => array('confused.gif', '19', '19', 'confused'), + ':wow:' => array('surprise.gif', '19', '19', 'surprised'), + ':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'), + ':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'), + '%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'), + ';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'), + ':P' => array('raspberry.gif', '19', '19', 'raspberry'), + ':blank:' => array('blank.gif', '19', '19', 'blank stare'), + ':long:' => array('longface.gif', '19', '19', 'long face'), + ':ohh:' => array('ohh.gif', '19', '19', 'ohh'), + ':grrr:' => array('grrr.gif', '19', '19', 'grrr'), + ':gulp:' => array('gulp.gif', '19', '19', 'gulp'), + '8-/' => array('ohoh.gif', '19', '19', 'oh oh'), + ':down:' => array('downer.gif', '19', '19', 'downer'), + ':red:' => array('embarrassed.gif', '19', '19', 'red face'), + ':sick:' => array('sick.gif', '19', '19', 'sick'), + ':shut:' => array('shuteye.gif', '19', '19', 'shut eye'), + ':-/' => array('hmm.gif', '19', '19', 'hmmm'), + '>:(' => array('mad.gif', '19', '19', 'mad'), + ':mad:' => array('mad.gif', '19', '19', 'mad'), + '>:-(' => array('angry.gif', '19', '19', 'angry'), + ':angry:' => array('angry.gif', '19', '19', 'angry'), + ':zip:' => array('zip.gif', '19', '19', 'zipper'), + ':kiss:' => array('kiss.gif', '19', '19', 'kiss'), + ':ahhh:' => array('shock.gif', '19', '19', 'shock'), + ':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'), + ':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'), + ':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'), + ':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'), + ':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'), + ':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'), + ':vampire:' => array('vampire.gif', '19', '19', 'vampire'), + ':snake:' => array('snake.gif', '19', '19', 'snake'), + ':exclaim:' => array('exclaim.gif', '19', '19', 'exclaim'), + ':question:' => array('question.gif', '19', '19', 'question') + +); diff --git a/2_services/1_metaverse/nodam/application/config/user_agents.php b/2_services/1_metaverse/nodam/application/config/user_agents.php new file mode 100644 index 0000000..1129dba --- /dev/null +++ b/2_services/1_metaverse/nodam/application/config/user_agents.php @@ -0,0 +1,211 @@ + 'Windows 10', + 'windows nt 6.3' => 'Windows 8.1', + 'windows nt 6.2' => 'Windows 8', + 'windows nt 6.1' => 'Windows 7', + 'windows nt 6.0' => 'Windows Vista', + 'windows nt 5.2' => 'Windows 2003', + 'windows nt 5.1' => 'Windows XP', + 'windows nt 5.0' => 'Windows 2000', + 'windows nt 4.0' => 'Windows NT 4.0', + 'winnt4.0' => 'Windows NT 4.0', + 'winnt 4.0' => 'Windows NT', + 'winnt' => 'Windows NT', + 'windows 98' => 'Windows 98', + 'win98' => 'Windows 98', + 'windows 95' => 'Windows 95', + 'win95' => 'Windows 95', + 'windows phone' => 'Windows Phone', + 'windows' => 'Unknown Windows OS', + 'android' => 'Android', + 'blackberry' => 'BlackBerry', + 'iphone' => 'iOS', + 'ipad' => 'iOS', + 'ipod' => 'iOS', + 'os x' => 'Mac OS X', + 'ppc mac' => 'Power PC Mac', + 'freebsd' => 'FreeBSD', + 'ppc' => 'Macintosh', + 'linux' => 'Linux', + 'debian' => 'Debian', + 'sunos' => 'Sun Solaris', + 'beos' => 'BeOS', + 'apachebench' => 'ApacheBench', + 'aix' => 'AIX', + 'irix' => 'Irix', + 'osf' => 'DEC OSF', + 'hp-ux' => 'HP-UX', + 'netbsd' => 'NetBSD', + 'bsdi' => 'BSDi', + 'openbsd' => 'OpenBSD', + 'gnu' => 'GNU/Linux', + 'unix' => 'Unknown Unix OS', + 'symbian' => 'Symbian OS' +); + + +// The order of this array should NOT be changed. Many browsers return +// multiple browser types so we want to identify the sub-type first. +$browsers = array( + 'OPR' => 'Opera', + 'Flock' => 'Flock', + 'Edge' => 'Spartan', + 'Chrome' => 'Chrome', + // Opera 10+ always reports Opera/9.80 and appends Version/ to the user agent string + 'Opera.*?Version' => 'Opera', + 'Opera' => 'Opera', + 'MSIE' => 'Internet Explorer', + 'Internet Explorer' => 'Internet Explorer', + 'Trident.* rv' => 'Internet Explorer', + 'Shiira' => 'Shiira', + 'Firefox' => 'Firefox', + 'Chimera' => 'Chimera', + 'Phoenix' => 'Phoenix', + 'Firebird' => 'Firebird', + 'Camino' => 'Camino', + 'Netscape' => 'Netscape', + 'OmniWeb' => 'OmniWeb', + 'Safari' => 'Safari', + 'Mozilla' => 'Mozilla', + 'Konqueror' => 'Konqueror', + 'icab' => 'iCab', + 'Lynx' => 'Lynx', + 'Links' => 'Links', + 'hotjava' => 'HotJava', + 'amaya' => 'Amaya', + 'IBrowse' => 'IBrowse', + 'Maxthon' => 'Maxthon', + 'Ubuntu' => 'Ubuntu Web Browser' +); + +$mobiles = array( + // legacy array, old values commented out + 'mobileexplorer' => 'Mobile Explorer', +// 'openwave' => 'Open Wave', +// 'opera mini' => 'Opera Mini', +// 'operamini' => 'Opera Mini', +// 'elaine' => 'Palm', + 'palmsource' => 'Palm', +// 'digital paths' => 'Palm', +// 'avantgo' => 'Avantgo', +// 'xiino' => 'Xiino', + 'palmscape' => 'Palmscape', +// 'nokia' => 'Nokia', +// 'ericsson' => 'Ericsson', +// 'blackberry' => 'BlackBerry', +// 'motorola' => 'Motorola' + + // Phones and Manufacturers + 'motorola' => 'Motorola', + 'nokia' => 'Nokia', + 'palm' => 'Palm', + 'iphone' => 'Apple iPhone', + 'ipad' => 'iPad', + 'ipod' => 'Apple iPod Touch', + 'sony' => 'Sony Ericsson', + 'ericsson' => 'Sony Ericsson', + 'blackberry' => 'BlackBerry', + 'cocoon' => 'O2 Cocoon', + 'blazer' => 'Treo', + 'lg' => 'LG', + 'amoi' => 'Amoi', + 'xda' => 'XDA', + 'mda' => 'MDA', + 'vario' => 'Vario', + 'htc' => 'HTC', + 'samsung' => 'Samsung', + 'sharp' => 'Sharp', + 'sie-' => 'Siemens', + 'alcatel' => 'Alcatel', + 'benq' => 'BenQ', + 'ipaq' => 'HP iPaq', + 'mot-' => 'Motorola', + 'playstation portable' => 'PlayStation Portable', + 'playstation 3' => 'PlayStation 3', + 'playstation vita' => 'PlayStation Vita', + 'hiptop' => 'Danger Hiptop', + 'nec-' => 'NEC', + 'panasonic' => 'Panasonic', + 'philips' => 'Philips', + 'sagem' => 'Sagem', + 'sanyo' => 'Sanyo', + 'spv' => 'SPV', + 'zte' => 'ZTE', + 'sendo' => 'Sendo', + 'nintendo dsi' => 'Nintendo DSi', + 'nintendo ds' => 'Nintendo DS', + 'nintendo 3ds' => 'Nintendo 3DS', + 'wii' => 'Nintendo Wii', + 'open web' => 'Open Web', + 'openweb' => 'OpenWeb', + + // Operating Systems + 'android' => 'Android', + 'symbian' => 'Symbian', + 'SymbianOS' => 'SymbianOS', + 'elaine' => 'Palm', + 'series60' => 'Symbian S60', + 'windows ce' => 'Windows CE', + + // Browsers + 'obigo' => 'Obigo', + 'netfront' => 'Netfront Browser', + 'openwave' => 'Openwave Browser', + 'mobilexplorer' => 'Mobile Explorer', + 'operamini' => 'Opera Mini', + 'opera mini' => 'Opera Mini', + 'opera mobi' => 'Opera Mobile', + 'fennec' => 'Firefox Mobile', + + // Other + 'digital paths' => 'Digital Paths', + 'avantgo' => 'AvantGo', + 'xiino' => 'Xiino', + 'novarra' => 'Novarra Transcoder', + 'vodafone' => 'Vodafone', + 'docomo' => 'NTT DoCoMo', + 'o2' => 'O2', + + // Fallback + 'mobile' => 'Generic Mobile', + 'wireless' => 'Generic Mobile', + 'j2me' => 'Generic Mobile', + 'midp' => 'Generic Mobile', + 'cldc' => 'Generic Mobile', + 'up.link' => 'Generic Mobile', + 'up.browser' => 'Generic Mobile', + 'smartphone' => 'Generic Mobile', + 'cellphone' => 'Generic Mobile' +); + +// There are hundreds of bots but these are the most common. +$robots = array( + 'googlebot' => 'Googlebot', + 'msnbot' => 'MSNBot', + 'baiduspider' => 'Baiduspider', + 'bingbot' => 'Bing', + 'slurp' => 'Inktomi Slurp', + 'yahoo' => 'Yahoo', + 'ask jeeves' => 'Ask Jeeves', + 'fastcrawler' => 'FastCrawler', + 'infoseek' => 'InfoSeek Robot 1.0', + 'lycos' => 'Lycos', + 'yandex' => 'YandexBot', + 'mediapartners-google' => 'MediaPartners Google', + 'CRAZYWEBCRAWLER' => 'Crazy Webcrawler', + 'adsbot-google' => 'AdsBot Google', + 'feedfetcher-google' => 'Feedfetcher Google', + 'curious george' => 'Curious George' +); diff --git a/2_services/1_metaverse/nodam/application/controllers/Auth.php b/2_services/1_metaverse/nodam/application/controllers/Auth.php new file mode 100644 index 0000000..92a5e6d --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/Auth.php @@ -0,0 +1,94 @@ +form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + $this->lang->load('auth'); + } + + + function index(){ + if ( ! $this->ion_auth->logged_in()){ + redirect('auth/login', 'refresh'); + }else{ + redirect('/', 'refresh'); + } + } + + function login(){ + if ( ! $this->ion_auth->logged_in()){ + /* Load */ + $this->load->config('admin/dp_config'); + $this->load->config('common/dp_config'); + $this->load->model('admin/user_model'); + + /* Valid form */ + $this->form_validation->set_rules('identity', 'Identity', 'required'); + $this->form_validation->set_rules('password', 'Password', 'required'); + + /* Data */ + $this->data['title'] = $this->config->item('title'); + $this->data['title_lg'] = $this->config->item('title_lg'); + $this->data['auth_social_network'] = $this->config->item('auth_social_network'); + $this->data['forgot_password'] = $this->config->item('forgot_password'); + $this->data['new_membership'] = $this->config->item('new_membership'); + + if ($this->form_validation->run() == TRUE){ + if($this->user_model->login($this->input->post('identity'), $this->input->post('password')) == TRUE){ + $this->ion_auth->is_admin(); + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + $this->session->set_userdata('id', $this->input->post('identity')); + $this->session->set_userdata('identity', $this->input->post('identity')); + //$this->template->auth_render('auth/choice', $this->data); + redirect('admin', 'refresh'); + }else{ + $this->session->set_flashdata('message', '존재하지 않는 회원 정보입니다.'); + redirect('auth/login', 'refresh'); + } + }else{ + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + $this->data['identity'] = array( + 'name' => 'identity', + 'id' => 'identity', + 'type' => 'email', + 'value' => $this->form_validation->set_value('identity'), + 'class' => 'form-control', + 'placeholder' => lang('auth_your_email') + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'class' => 'form-control', + 'placeholder' => lang('auth_your_password') + ); + $this->template->auth_render('auth/login', $this->data); + } + }else{ + redirect('/', 'refresh'); + } + } + + + function logout($src = NULL) + { + $logout = $this->ion_auth->logout(); + + $this->session->set_flashdata('message', $this->ion_auth->messages()); + + if ($src == 'admin') + { + redirect('auth/login', 'refresh'); + } + else + { + redirect('/', 'refresh'); + } + } + +} diff --git a/2_services/1_metaverse/nodam/application/controllers/Auth_original.php b/2_services/1_metaverse/nodam/application/controllers/Auth_original.php new file mode 100644 index 0000000..826f4c8 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/Auth_original.php @@ -0,0 +1,802 @@ +load->database(); + $this->load->library(array('ion_auth','form_validation')); + $this->load->helper(array('url','language')); + + $this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth')); + + $this->lang->load('auth'); + } + + // redirect if needed, otherwise display the user list + function index() + { + + if (!$this->ion_auth->logged_in()) + { + // redirect them to the login page + redirect('auth/login', 'refresh'); + } + elseif (!$this->ion_auth->is_admin()) // remove this elseif if you want to enable this for non-admins + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + else + { + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + //list the users + $this->data['users'] = $this->ion_auth->users()->result(); + foreach ($this->data['users'] as $k => $user) + { + $this->data['users'][$k]->groups = $this->ion_auth->get_users_groups($user->id)->result(); + } + + $this->_render_page('auth/index', $this->data); + } + } + + // log the user in + function login() + { + $this->data['title'] = "Login"; + + //validate form input + $this->form_validation->set_rules('identity', 'Identity', 'required'); + $this->form_validation->set_rules('password', 'Password', 'required'); + + if ($this->form_validation->run() == true) + { + // check to see if the user is logging in + // check for "remember me" + $remember = (bool) $this->input->post('remember'); + + if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) + { + //if the login is successful + //redirect them back to the home page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('/', 'refresh'); + } + else + { + // if the login was un-successful + // redirect them back to the login page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/login', 'refresh'); // use redirects instead of loading views for compatibility with MY_Controller libraries + } + } + else + { + // the user is not logging in so display the login page + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['identity'] = array('name' => 'identity', + 'id' => 'identity', + 'type' => 'text', + 'value' => $this->form_validation->set_value('identity'), + ); + $this->data['password'] = array('name' => 'password', + 'id' => 'password', + 'type' => 'password', + ); + + $this->_render_page('auth/login', $this->data); + } + } + + // log the user out + function logout() + { + $this->data['title'] = "Logout"; + + // log the user out + $logout = $this->ion_auth->logout(); + + // redirect them to the login page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('auth/login', 'refresh'); + } + + // change password + function change_password() + { + $this->form_validation->set_rules('old', $this->lang->line('change_password_validation_old_password_label'), 'required'); + $this->form_validation->set_rules('new', $this->lang->line('change_password_validation_new_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[new_confirm]'); + $this->form_validation->set_rules('new_confirm', $this->lang->line('change_password_validation_new_password_confirm_label'), 'required'); + + if (!$this->ion_auth->logged_in()) + { + redirect('auth/login', 'refresh'); + } + + $user = $this->ion_auth->user()->row(); + + if ($this->form_validation->run() == false) + { + // display the form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['min_password_length'] = $this->config->item('min_password_length', 'ion_auth'); + $this->data['old_password'] = array( + 'name' => 'old', + 'id' => 'old', + 'type' => 'password', + ); + $this->data['new_password'] = array( + 'name' => 'new', + 'id' => 'new', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['new_password_confirm'] = array( + 'name' => 'new_confirm', + 'id' => 'new_confirm', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['user_id'] = array( + 'name' => 'user_id', + 'id' => 'user_id', + 'type' => 'hidden', + 'value' => $user->id, + ); + + // render + $this->_render_page('auth/change_password', $this->data); + } + else + { + $identity = $this->session->userdata('identity'); + + $change = $this->ion_auth->change_password($identity, $this->input->post('old'), $this->input->post('new')); + + if ($change) + { + //if the password was successfully changed + $this->session->set_flashdata('message', $this->ion_auth->messages()); + $this->logout(); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/change_password', 'refresh'); + } + } + } + + // forgot password + function forgot_password() + { + // setting validation rules by checking wheather identity is username or email + if($this->config->item('identity', 'ion_auth') != 'email' ) + { + $this->form_validation->set_rules('identity', $this->lang->line('forgot_password_identity_label'), 'required'); + } + else + { + $this->form_validation->set_rules('email', $this->lang->line('forgot_password_validation_email_label'), 'required|valid_email'); + } + + + if ($this->form_validation->run() == false) + { + // setup the input + $this->data['email'] = array('name' => 'email', + 'id' => 'email', + ); + + if ( $this->config->item('identity', 'ion_auth') != 'email' ){ + $this->data['identity_label'] = $this->lang->line('forgot_password_identity_label'); + } + else + { + $this->data['identity_label'] = $this->lang->line('forgot_password_email_identity_label'); + } + + // set any errors and display the form + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + $this->_render_page('auth/forgot_password', $this->data); + } + else + { + $identity_column = $this->config->item('identity','ion_auth'); + $identity = $this->ion_auth->where($identity_column, $this->input->post('email'))->users()->row(); + + if(empty($identity)) { + + if($this->config->item('identity', 'ion_auth') != 'email') + { + $this->ion_auth->set_error('forgot_password_identity_not_found'); + } + else + { + $this->ion_auth->set_error('forgot_password_email_not_found'); + } + + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + + // run the forgotten password method to email an activation code to the user + $forgotten = $this->ion_auth->forgotten_password($identity->{$this->config->item('identity', 'ion_auth')}); + + if ($forgotten) + { + // if there were no errors + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth/login", 'refresh'); //we should display a confirmation page here instead of the login page + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + } + + // reset password - final step for forgotten password + public function reset_password($code = NULL) + { + if (!$code) + { + show_404(); + } + + $user = $this->ion_auth->forgotten_password_check($code); + + if ($user) + { + // if the code is valid then display the password reset form + + $this->form_validation->set_rules('new', $this->lang->line('reset_password_validation_new_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[new_confirm]'); + $this->form_validation->set_rules('new_confirm', $this->lang->line('reset_password_validation_new_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == false) + { + // display the form + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors()) ? validation_errors() : $this->session->flashdata('message'); + + $this->data['min_password_length'] = $this->config->item('min_password_length', 'ion_auth'); + $this->data['new_password'] = array( + 'name' => 'new', + 'id' => 'new', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['new_password_confirm'] = array( + 'name' => 'new_confirm', + 'id' => 'new_confirm', + 'type' => 'password', + 'pattern' => '^.{'.$this->data['min_password_length'].'}.*$', + ); + $this->data['user_id'] = array( + 'name' => 'user_id', + 'id' => 'user_id', + 'type' => 'hidden', + 'value' => $user->id, + ); + $this->data['csrf'] = $this->_get_csrf_nonce(); + $this->data['code'] = $code; + + // render + $this->_render_page('auth/reset_password', $this->data); + } + else + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $user->id != $this->input->post('user_id')) + { + + // something fishy might be up + $this->ion_auth->clear_forgotten_password_code($code); + + show_error($this->lang->line('error_csrf')); + + } + else + { + // finally change the password + $identity = $user->{$this->config->item('identity', 'ion_auth')}; + + $change = $this->ion_auth->reset_password($identity, $this->input->post('new')); + + if ($change) + { + // if the password was successfully changed + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth/login", 'refresh'); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect('auth/reset_password/' . $code, 'refresh'); + } + } + } + } + else + { + // if the code is invalid then send them back to the forgot password page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + + + // activate the user + function activate($id, $code=false) + { + if ($code !== false) + { + $activation = $this->ion_auth->activate($id, $code); + } + else if ($this->ion_auth->is_admin()) + { + $activation = $this->ion_auth->activate($id); + } + + if ($activation) + { + // redirect them to the auth page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + } + else + { + // redirect them to the forgot password page + $this->session->set_flashdata('message', $this->ion_auth->errors()); + redirect("auth/forgot_password", 'refresh'); + } + } + + // deactivate the user + function deactivate($id = NULL) + { + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + // redirect them to the home page because they must be an administrator to view this + return show_error('You must be an administrator to view this page.'); + } + + $id = (int) $id; + + $this->load->library('form_validation'); + $this->form_validation->set_rules('confirm', $this->lang->line('deactivate_validation_confirm_label'), 'required'); + $this->form_validation->set_rules('id', $this->lang->line('deactivate_validation_user_id_label'), 'required|alpha_numeric'); + + if ($this->form_validation->run() == FALSE) + { + // insert csrf check + $this->data['csrf'] = $this->_get_csrf_nonce(); + $this->data['user'] = $this->ion_auth->user($id)->row(); + + $this->_render_page('auth/deactivate_user', $this->data); + } + else + { + // do we really want to deactivate? + if ($this->input->post('confirm') == 'yes') + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + + // do we have the right userlevel? + if ($this->ion_auth->logged_in() && $this->ion_auth->is_admin()) + { + $this->ion_auth->deactivate($id); + } + } + + // redirect them back to the auth page + redirect('auth', 'refresh'); + } + } + + // create a new user + function create_user() + { + $this->data['title'] = "Create User"; + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $tables = $this->config->item('tables','ion_auth'); + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('create_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('create_user_validation_lname_label'), 'required'); + $this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'required|valid_email|is_unique['.$tables['users'].'.email]'); + $this->form_validation->set_rules('phone', $this->lang->line('create_user_validation_phone_label'), 'required'); + $this->form_validation->set_rules('company', $this->lang->line('create_user_validation_company_label'), 'required'); + $this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required'); + + if ($this->form_validation->run() == true) + { + $username = strtolower($this->input->post('first_name')) . ' ' . strtolower($this->input->post('last_name')); + $email = strtolower($this->input->post('email')); + $password = $this->input->post('password'); + + $additional_data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + } + if ($this->form_validation->run() == true && $this->ion_auth->register($username, $password, $email, $additional_data)) + { + // check to see if we are creating the user + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + } + else + { + // display the create user form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('first_name'), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('last_name'), + ); + $this->data['email'] = array( + 'name' => 'email', + 'id' => 'email', + 'type' => 'text', + 'value' => $this->form_validation->set_value('email'), + ); + $this->data['company'] = array( + 'name' => 'company', + 'id' => 'company', + 'type' => 'text', + 'value' => $this->form_validation->set_value('company'), + ); + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'value' => $this->form_validation->set_value('phone'), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password', + 'value' => $this->form_validation->set_value('password'), + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password', + 'value' => $this->form_validation->set_value('password_confirm'), + ); + + $this->_render_page('auth/create_user', $this->data); + } + } + + // edit a user + function edit_user($id) + { + $this->data['title'] = "Edit User"; + + if (!$this->ion_auth->logged_in() || (!$this->ion_auth->is_admin() && !($this->ion_auth->user()->row()->id == $id))) + { + redirect('auth', 'refresh'); + } + + $user = $this->ion_auth->user($id)->row(); + $groups=$this->ion_auth->groups()->result_array(); + $currentGroups = $this->ion_auth->get_users_groups($id)->result(); + + // validate form input + $this->form_validation->set_rules('first_name', $this->lang->line('edit_user_validation_fname_label'), 'required'); + $this->form_validation->set_rules('last_name', $this->lang->line('edit_user_validation_lname_label'), 'required'); + $this->form_validation->set_rules('phone', $this->lang->line('edit_user_validation_phone_label'), 'required'); + $this->form_validation->set_rules('company', $this->lang->line('edit_user_validation_company_label'), 'required'); + + if (isset($_POST) && !empty($_POST)) + { + // do we have a valid request? + if ($this->_valid_csrf_nonce() === FALSE || $id != $this->input->post('id')) + { + show_error($this->lang->line('error_csrf')); + } + + // update the password if it was posted + if ($this->input->post('password')) + { + $this->form_validation->set_rules('password', $this->lang->line('edit_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[password_confirm]'); + $this->form_validation->set_rules('password_confirm', $this->lang->line('edit_user_validation_password_confirm_label'), 'required'); + } + + if ($this->form_validation->run() === TRUE) + { + $data = array( + 'first_name' => $this->input->post('first_name'), + 'last_name' => $this->input->post('last_name'), + 'company' => $this->input->post('company'), + 'phone' => $this->input->post('phone'), + ); + + // update the password if it was posted + if ($this->input->post('password')) + { + $data['password'] = $this->input->post('password'); + } + + + + // Only allow updating groups if user is admin + if ($this->ion_auth->is_admin()) + { + //Update the groups user belongs to + $groupData = $this->input->post('groups'); + + if (isset($groupData) && !empty($groupData)) { + + $this->ion_auth->remove_from_group('', $id); + + foreach ($groupData as $grp) { + $this->ion_auth->add_to_group($grp, $id); + } + + } + } + + // check to see if we are updating the user + if($this->ion_auth->update($user->id, $data)) + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->messages() ); + if ($this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + redirect('/', 'refresh'); + } + + } + else + { + // redirect them back to the admin page if admin, or to the base url if non admin + $this->session->set_flashdata('message', $this->ion_auth->errors() ); + if ($this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + redirect('/', 'refresh'); + } + + } + + } + } + + // display the edit user form + $this->data['csrf'] = $this->_get_csrf_nonce(); + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['user'] = $user; + $this->data['groups'] = $groups; + $this->data['currentGroups'] = $currentGroups; + + $this->data['first_name'] = array( + 'name' => 'first_name', + 'id' => 'first_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('first_name', $user->first_name), + ); + $this->data['last_name'] = array( + 'name' => 'last_name', + 'id' => 'last_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('last_name', $user->last_name), + ); + $this->data['company'] = array( + 'name' => 'company', + 'id' => 'company', + 'type' => 'text', + 'value' => $this->form_validation->set_value('company', $user->company), + ); + $this->data['phone'] = array( + 'name' => 'phone', + 'id' => 'phone', + 'type' => 'text', + 'value' => $this->form_validation->set_value('phone', $user->phone), + ); + $this->data['password'] = array( + 'name' => 'password', + 'id' => 'password', + 'type' => 'password' + ); + $this->data['password_confirm'] = array( + 'name' => 'password_confirm', + 'id' => 'password_confirm', + 'type' => 'password' + ); + + $this->_render_page('auth/edit_user', $this->data); + } + + // create a new group + function create_group() + { + $this->data['title'] = $this->lang->line('create_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('create_group_validation_name_label'), 'required|alpha_dash'); + + if ($this->form_validation->run() == TRUE) + { + $new_group_id = $this->ion_auth->create_group($this->input->post('group_name'), $this->input->post('description')); + if($new_group_id) + { + // check to see if we are creating the group + // redirect them back to the admin page + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect("auth", 'refresh'); + } + } + else + { + // display the create group form + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name'), + ); + $this->data['description'] = array( + 'name' => 'description', + 'id' => 'description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('description'), + ); + + $this->_render_page('auth/create_group', $this->data); + } + } + + // edit a group + function edit_group($id) + { + // bail if no group id given + if(!$id || empty($id)) + { + redirect('auth', 'refresh'); + } + + $this->data['title'] = $this->lang->line('edit_group_title'); + + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + $group = $this->ion_auth->group($id)->row(); + + // validate form input + $this->form_validation->set_rules('group_name', $this->lang->line('edit_group_validation_name_label'), 'required|alpha_dash'); + + if (isset($_POST) && !empty($_POST)) + { + if ($this->form_validation->run() === TRUE) + { + $group_update = $this->ion_auth->update_group($id, $_POST['group_name'], $_POST['group_description']); + + if($group_update) + { + $this->session->set_flashdata('message', $this->lang->line('edit_group_saved')); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + } + redirect("auth", 'refresh'); + } + } + + // set the flash data error message if there is one + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + // pass the user to the view + $this->data['group'] = $group; + + $readonly = $this->config->item('admin_group', 'ion_auth') === $group->name ? 'readonly' : ''; + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_name', $group->name), + $readonly => $readonly, + ); + $this->data['group_description'] = array( + 'name' => 'group_description', + 'id' => 'group_description', + 'type' => 'text', + 'value' => $this->form_validation->set_value('group_description', $group->description), + ); + + $this->_render_page('auth/edit_group', $this->data); + } + + + function _get_csrf_nonce() + { + $this->load->helper('string'); + $key = random_string('alnum', 8); + $value = random_string('alnum', 20); + $this->session->set_flashdata('csrfkey', $key); + $this->session->set_flashdata('csrfvalue', $value); + + return array($key => $value); + } + + function _valid_csrf_nonce() + { + if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE && + $this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue')) + { + return TRUE; + } + else + { + return FALSE; + } + } + + function _render_page($view, $data=null, $returnhtml=false)//I think this makes more sense + { + + $this->viewdata = (empty($data)) ? $this->data: $data; + + $view_html = $this->load->view($view, $this->viewdata, $returnhtml); + + if ($returnhtml) return $view_html;//This will return html on 3rd argument being true + } + +} diff --git a/2_services/1_metaverse/nodam/application/controllers/Home.php b/2_services/1_metaverse/nodam/application/controllers/Home.php new file mode 100644 index 0000000..1fc4506 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/Home.php @@ -0,0 +1,16 @@ +load->view('public/home', $this->data); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/_Original.php b/2_services/1_metaverse/nodam/application/controllers/_Original.php new file mode 100644 index 0000000..621ea56 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/_Original.php @@ -0,0 +1,16 @@ +load->view('public/home'); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Dashboard.php b/2_services/1_metaverse/nodam/application/controllers/admin/Dashboard.php new file mode 100644 index 0000000..360a583 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Dashboard.php @@ -0,0 +1,22 @@ +load->helper('number'); + $this->load->model('admin/dashboard_model'); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->page_title->push(lang('menu_dashboard')); + $this->data['pagetitle'] = $this->page_title->show(); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->template->admin_render('admin/dashboard/index', $this->data); + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Database.php b/2_services/1_metaverse/nodam/application/controllers/admin/Database.php new file mode 100644 index 0000000..77312a7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Database.php @@ -0,0 +1,42 @@ +load->dbutil(); + $this->lang->load('admin/database'); + + /* Title Page :: Common */ + $this->page_title->push(lang('menu_database_utility')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_database_utility'), 'admin/database'); + } + + + public function index() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Data */ + $this->data['list_tables'] = $this->db->list_tables(); + $this->data['platform'] = $this->db->platform(); + $this->data['version'] = $this->db->version(); + + /* Load Template */ + $this->template->admin_render('admin/database/index', $this->data); + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Files.php b/2_services/1_metaverse/nodam/application/controllers/admin/Files.php new file mode 100644 index 0000000..e3a2a55 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Files.php @@ -0,0 +1,79 @@ +page_title->push(lang('menu_files')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_files'), 'admin/files'); + } + + + public function index() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Data */ + $this->data['error'] = NULL; + + /* Load Template */ + $this->template->admin_render('admin/files/index', $this->data); + } + } + + + public function do_upload() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Conf */ + $config['upload_path'] = './upload/'; + $config['allowed_types'] = 'gif|jpg|png'; + $config['max_size'] = 2048; + $config['max_width'] = 1024; + $config['max_height'] = 1024; + $config['file_ext_tolower'] = TRUE; + + $this->load->library('upload', $config); + + /* Breadcrumbs */ + $this->breadcrumbs->unshift(2, lang('menu_files'), 'admin/files'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + if ( ! $this->upload->do_upload('userfile')) + { + /* Data */ + $this->data['error'] = $this->upload->display_errors(); + + /* Load Template */ + $this->template->admin_render('admin/files/index', $this->data); + } + else + { + /* Data */ + $this->data['upload_data'] = $this->upload->data(); + + /* Load Template */ + $this->template->admin_render('admin/files/upload', $this->data); + } + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Fwords.php b/2_services/1_metaverse/nodam/application/controllers/admin/Fwords.php new file mode 100644 index 0000000..976efec --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Fwords.php @@ -0,0 +1,57 @@ +page_title->push('Fwords'); + $this->data['pagetitle'] = $this->page_title->show(); + $this->breadcrumbs->unshift(1, 'Fwords', 'admin/fwords'); + $this->output->delete_cache(); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->load->model('admin/fword_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + //$this->data['fwords'] = $this->fword_model->get_fwords(); + $this->template->admin_render('admin/fwords/index', $this->data); + } + } + + public function toggle_is_active(){ + $word = $this->input->post('word'); + $this->load->model('admin/fword_model'); + echo $this->fword_model->toggle_is_active($word); + } + + public function add_fword(){ + $word = $this->input->post('word'); + $this->load->model('admin/fword_model'); + echo $this->fword_model->add_fword($word); + } + + public function get_fwords_page(){ + $search = (strlen($this->input->get("search")["value"]) >= 2) ? $this->input->get("search",true)["value"] : false; + $start = intval($this->input->get('start')); + $offset = intval($this->input->get('length')); + $this->load->model('admin/fword_model'); + $datas = $this->fword_model->get_fwords_page($search, $start, $offset); + $query = $this->db->last_query(); + $count = $this->fword_model->get_fwords_page_count($search); + + echo json_encode( + Array( + 'draw' => $_GET['draw'], + 'data' => $datas, + 'query' => $query, + 'recordsTotal' => $count, + 'recordsFiltered' => $count, + 'pageNumber' => ceil($start / $offset) + 1, + 'pageSize' => ceil($count / $offset) + 1, + ) + ); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Groups.php b/2_services/1_metaverse/nodam/application/controllers/admin/Groups.php new file mode 100644 index 0000000..6e026a9 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Groups.php @@ -0,0 +1,177 @@ +lang->load('admin/groups'); + + /* Title Page :: Common */ + $this->page_title->push(lang('menu_security_groups')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_security_groups'), 'admin/groups'); + } + + + public function index() + { + echo '1'; + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + //$this->data['groups'] = $this->ion_auth->groups()->result(); + + /* Load Template */ + $this->template->admin_render('admin/groups/index', $this->data); + } + } + + + public function create() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + + /* Breadcrumbs */ + $this->breadcrumbs->unshift(2, lang('menu_groups_create'), 'admin/groups/create'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Validate form input */ + $this->form_validation->set_rules('group_name', 'lang:create_group_validation_name_label', 'required|alpha_dash'); + + if ($this->form_validation->run() == TRUE) + { + $new_group_id = $this->ion_auth->create_group($this->input->post('group_name'), $this->input->post('description')); + if ($new_group_id) + { + $this->session->set_flashdata('message', $this->ion_auth->messages()); + redirect('admin/groups', 'refresh'); + } + } + else + { + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + + $this->data['group_name'] = array( + 'name' => 'group_name', + 'id' => 'group_name', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('group_name') + ); + $this->data['description'] = array( + 'name' => 'description', + 'id' => 'description', + 'type' => 'text', + 'class' => 'form-control', + 'value' => $this->form_validation->set_value('description') + ); + + /* Load Template */ + $this->template->admin_render('admin/groups/create', $this->data); + } + } + + + public function delete() + { + if ( ! $this->ion_auth->logged_in()) + { + redirect('auth/login', 'refresh'); + } + elseif ( ! $this->ion_auth->is_admin()) + { + return show_error('You must be an administrator to view this page.'); + } + else + { + $this->load->view('admin/groups/delete'); + } + } + + + public function edit($id) + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin() OR ! $id OR empty($id)) + { + redirect('auth', 'refresh'); + } + + /* Breadcrumbs */ + $this->breadcrumbs->unshift(2, lang('menu_groups_edit'), 'admin/groups/edit'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Variables */ + $group = $this->ion_auth->group($id)->row(); + + /* Validate form input */ + $this->form_validation->set_rules('group_name', $this->lang->line('edit_group_validation_name_label'), 'required|alpha_dash'); + + if (isset($_POST) && ! empty($_POST)) + { + if ($this->form_validation->run() == TRUE) + { + $group_update = $this->ion_auth->update_group($id, $_POST['group_name'], $_POST['group_description']); + + if ($group_update) + { + $this->session->set_flashdata('message', $this->lang->line('edit_group_saved')); + + /* IN TEST */ + $this->db->update('groups', array('bgcolor' => $_POST['group_bgcolor']), 'id = '.$id); + } + else + { + $this->session->set_flashdata('message', $this->ion_auth->errors()); + } + + redirect('admin/groups', 'refresh'); + } + } + + $this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message'))); + $this->data['group'] = $group; + + $readonly = $this->config->item('admin_group', 'ion_auth') === $group->name ? 'readonly' : ''; + + $this->data['group_name'] = array( + 'type' => 'text', + 'name' => 'group_name', + 'id' => 'group_name', + 'value' => $this->form_validation->set_value('group_name', $group->name), + 'class' => 'form-control', + $readonly => $readonly + ); + $this->data['group_description'] = array( + 'type' => 'text', + 'name' => 'group_description', + 'id' => 'group_description', + 'value' => $this->form_validation->set_value('group_description', $group->description), + 'class' => 'form-control' + ); + $this->data['group_bgcolor'] = array( + 'type' => 'text', + 'name' => 'group_bgcolor', + 'id' => 'group_bgcolor', + 'value' => $this->form_validation->set_value('group_bgcolor', $group->bgcolor), + 'data-src' => $group->bgcolor, + 'class' => 'form-control' + ); + + /* Load Template */ + $this->template->admin_render('admin/groups/edit', $this->data); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/License.php b/2_services/1_metaverse/nodam/application/controllers/admin/License.php new file mode 100644 index 0000000..5ef5c85 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/License.php @@ -0,0 +1,34 @@ +page_title->push(lang('menu_license')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_license'), 'admin/license'); + } + + + public function index() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Load Template */ + $this->template->admin_render('admin/license/index', $this->data); + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Medias.php b/2_services/1_metaverse/nodam/application/controllers/admin/Medias.php new file mode 100644 index 0000000..0a26e8c --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Medias.php @@ -0,0 +1,37 @@ +page_title->push('Medias'); + $this->data['pagetitle'] = $this->page_title->show(); + $this->breadcrumbs->unshift(1, 'Medias', 'admin/medias'); + $this->output->delete_cache(); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->load->model('admin/media_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['medias'] = $this->media_model->get_medias(); + $this->template->admin_render('admin/medias/index', $this->data); + } + } + + public function set_media(){ + $uid = $this->input->post('uid'); + $path = $this->input->post('path'); + $this->load->model('admin/path_model'); + echo $this->path_model->set_path($uid, $path); + } + + function gen_uid(){ + $data = random_bytes(16); + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Pictures.php b/2_services/1_metaverse/nodam/application/controllers/admin/Pictures.php new file mode 100644 index 0000000..804056d --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Pictures.php @@ -0,0 +1,29 @@ +page_title->push('Pictures'); + $this->data['pagetitle'] = $this->page_title->show(); + $this->breadcrumbs->unshift(1, 'Pictures', 'admin/pictures'); + $this->output->delete_cache(); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->load->model('admin/picture_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['pictures'] = $this->picture_model->gets(); + $this->template->admin_render('admin/pictures/index', $this->data); + } + } + + public function toggle_is_active(){ + $uid = $this->input->post('index'); + $this->load->model('admin/picture_model'); + echo $this->picture_model->toggle_is_active($uid); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Prefs.php b/2_services/1_metaverse/nodam/application/controllers/admin/Prefs.php new file mode 100644 index 0000000..eb490f6 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Prefs.php @@ -0,0 +1,171 @@ +load->model('admin/preferences_model'); + $this->lang->load('admin/preferences'); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_preferences'), 'admin/prefs'); + } + + + public function index() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Title Page */ + $this->page_title->push(lang('menu_preferences')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Load Template */ + $this->template->admin_render('admin/prefs/index', $this->data); + } + } + + + public function interfaces($type = NULL) + { + /* Title Page */ + $this->page_title->push(lang('menu_preferences'), lang('menu_interfaces')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(2, lang('menu_interfaces'), 'admin/prefs/interfaces/admin'); + + if ($type == 'admin') + { + /* Breadcrumbs */ + $this->breadcrumbs->unshift(3, lang('menu_int_admin'), 'admin/prefs/interfaces/admin'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Validate form input */ + $this->form_validation->set_rules('user_panel', 'lang:prefs_user_panel', 'required|is_numeric'); + $this->form_validation->set_rules('sidebar_form', 'lang:prefs_sidebar_form', 'required|is_numeric'); + $this->form_validation->set_rules('messages_menu', 'lang:prefs_messages_menu', 'required|is_numeric'); + $this->form_validation->set_rules('notifications_menu', 'lang:prefs_notifications_menu', 'required|is_numeric'); + $this->form_validation->set_rules('tasks_menu', 'lang:prefs_tasks_menu', 'required|is_numeric'); + $this->form_validation->set_rules('user_menu', 'lang:prefs_user_menu', 'required|is_numeric'); + $this->form_validation->set_rules('ctrl_sidebar', 'lang:prefs_ctrl_sidebar', 'required|is_numeric'); + $this->form_validation->set_rules('transition_page', 'lang:prefs_transition_page', 'required|is_numeric'); + + /* Data */ + $this->data['message_admin'] = (validation_errors()) ? validation_errors() : NULL; + $this->data['admin_pref_interface'] = $this->preferences_model->get_interface('admin_preferences'); + + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'user_panel' => (bool) $this->input->post('user_panel'), + 'sidebar_form' => (bool) $this->input->post('sidebar_form'), + 'messages_menu' => (bool) $this->input->post('messages_menu'), + 'notifications_menu' => (bool) $this->input->post('notifications_menu'), + 'tasks_menu' => (bool) $this->input->post('tasks_menu'), + 'user_menu' => (bool) $this->input->post('user_menu'), + 'ctrl_sidebar' => (bool) $this->input->post('ctrl_sidebar'), + 'transition_page' => (bool) $this->input->post('transition_page') + ); + + $this->preferences_model->update_interfaces('admin_preferences', $data); + + redirect('admin/prefs/interfaces/admin', 'refresh'); + } + else + { + /* Load Template */ + $this->template->admin_render('admin/prefs/interfaces/admin', $this->data); + } + } + elseif ($type == 'public') + { + /* Breadcrumbs */ + $this->breadcrumbs->unshift(3, lang('menu_int_public'), 'admin/prefs/interfaces/public'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Validate form input */ + $this->form_validation->set_rules('transition_page', 'lang:prefs_transition_page', 'required|is_numeric'); + + /* Data */ + $this->data['message_public'] = (validation_errors()) ? validation_errors() : NULL; + $this->data['public_pref_interface'] = $this->preferences_model->get_interface('public_preferences'); + + if ($this->form_validation->run() == TRUE) + { + $data = array( + 'transition_page' => (bool) $this->input->post('transition_page') + ); + + $this->preferences_model->update_interfaces('public_preferences', $data); + + redirect('admin/prefs/interfaces/public', 'refresh'); + } + else + { + /* Load Template */ + $this->template->admin_render('admin/prefs/interfaces/public', $this->data); + } + } + else + { + redirect('admin', 'refresh'); + } + } + + + public function reset_interfaces_admin() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + $data = array( + 'user_panel' => '0', + 'sidebar_form' => '0', + 'messages_menu' => '0', + 'notifications_menu' => '0', + 'tasks_menu' => '0', + 'user_menu' => '1', + 'ctrl_sidebar' => '0', + 'transition_page' => '0' + ); + + $this->preferences_model->update_interfaces('admin_preferences', $data); + + redirect('admin/prefs/interfaces/admin', 'refresh'); + } + } + + + public function reset_interfaces_public() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + $data = array( + 'transition_page' => '0' + ); + + $this->preferences_model->update_interfaces('public_preferences', $data); + + redirect('admin/prefs/interfaces/public', 'refresh'); + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Questions.php b/2_services/1_metaverse/nodam/application/controllers/admin/Questions.php new file mode 100644 index 0000000..acb96a7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Questions.php @@ -0,0 +1,79 @@ +lang->load('admin/users'); + + /* Title Page :: Common */ + $this->page_title->push('Questions'); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, 'Questions', 'admin/questions'); + $this->output->delete_cache(); + } + + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + $this->load->model('admin/question_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['questions'] = $this->question_model->get_questions(); + //echo print_r($this->data['questions']); + //return; + $this->template->admin_render('admin/questions/index', $this->data); + } + } + + public function toggle_is_active(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/question_model'); + echo $this->question_model->toggle_is_active($uid); + } + + public function set_question(){ + $uid = $this->input->post('uid'); + $level = $this->input->post('level'); + $question = $this->input->post('question'); + $answers = $this->input->post('answers'); + $explain = $this->input->post('explain'); + $this->load->model('admin/question_model'); + echo $this->question_model->set_question($uid, $level, $question, $answers, $explain); + } + + function gen_uid(){ + $data = random_bytes(16); + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } + + public function add_question(){ + $uid = $this->gen_uid(); + $level = $this->input->post('level'); + $question = $this->input->post('question'); + $answers = $this->input->post('answers'); + $explain = $this->input->post('explain'); + $this->load->model('admin/question_model'); + echo $this->question_model->add_question($uid, $level, $question, $answers, $explain); + } + + public function get_missions(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/question_model'); + $res = $this->user_level_model->get_missions($uid); + header('Content-Type: application/json'); + echo json_encode($res); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Resources.php b/2_services/1_metaverse/nodam/application/controllers/admin/Resources.php new file mode 100644 index 0000000..1df6244 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Resources.php @@ -0,0 +1,34 @@ +page_title->push(lang('menu_resources')); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_resources'), 'admin/resources'); + } + + + public function index() + { + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth', 'refresh'); + } + else + { + /* Breadcrumbs */ + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + + /* Load Template */ + $this->template->admin_render('admin/resources/index', $this->data); + } + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Survey_results.php b/2_services/1_metaverse/nodam/application/controllers/admin/Survey_results.php new file mode 100644 index 0000000..20bcdbf --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Survey_results.php @@ -0,0 +1,46 @@ +page_title->push('Survey Results'); + $this->data['pagetitle'] = $this->page_title->show(); + $this->breadcrumbs->unshift(1, 'Survey Results', 'admin/suvey_results'); + $this->output->delete_cache(); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->load->model('admin/survey_result_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['surveys'] = $this->survey_result_model->gets(); + $this->data['questions'] = $this->survey_result_model->get_surveys(); + $this->template->admin_render('admin/survey_results/index', $this->data); + } + } + + public function get_answers(){ + $index = $this->input->post('index'); + $this->load->model('admin/survey_result_model'); + //echo print_r($this->survey_result_model->get_answers($index)[0]->answers); + //return; + echo json_encode($this->survey_result_model->get_answers($index)[0]->answers); + } + + public function set_media(){ + $uid = $this->input->post('uid'); + $path = $this->input->post('path'); + $this->load->model('admin/path_model'); + echo $this->path_model->set_path($uid, $path); + } + + function gen_uid(){ + $data = random_bytes(16); + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Surveys.php b/2_services/1_metaverse/nodam/application/controllers/admin/Surveys.php new file mode 100644 index 0000000..f4f6273 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Surveys.php @@ -0,0 +1,52 @@ +page_title->push('Surveys'); + $this->data['pagetitle'] = $this->page_title->show(); + $this->breadcrumbs->unshift(1, 'Surveys', 'admin/surveys'); + $this->output->delete_cache(); + } + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()){ + redirect('auth/login', 'refresh'); + }else{ + $this->load->model('admin/survey_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['questions'] = $this->survey_model->get_questions(); + $this->template->admin_render('admin/surveys/index', $this->data); + } + } + + public function toggle_is_active(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/survey_model'); + echo $this->survey_model->toggle_is_active($uid); + } + + public function set_question(){ + $uid = $this->input->post('uid'); + $question = $this->input->post('question'); + $answers = $this->input->post('answers'); + $this->load->model('admin/survey_model'); + echo $this->survey_model->set_question($uid, $question, $answers); + } + + function gen_uid(){ + $data = random_bytes(16); + $data[6] = chr(ord($data[6]) & 0x0f | 0x40); + $data[8] = chr(ord($data[8]) & 0x3f | 0x80); + return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)); + } + + public function add_question(){ + $uid = $this->gen_uid(); + $question = $this->input->post('question'); + $answers = $this->input->post('answers'); + $this->load->model('admin/survey_model'); + echo $this->survey_model->add_question($uid, $question, $answers); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/Users.php b/2_services/1_metaverse/nodam/application/controllers/admin/Users.php new file mode 100644 index 0000000..4b3a50f --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/Users.php @@ -0,0 +1,72 @@ +lang->load('admin/users'); + + /* Title Page :: Common */ + $this->page_title->push('Users'); + $this->data['pagetitle'] = $this->page_title->show(); + + /* Breadcrumbs :: Common */ + $this->breadcrumbs->unshift(1, lang('menu_users'), 'admin/users'); + $this->output->delete_cache(); + } + + + public function index(){ + if (!$this->ion_auth->logged_in() || !$this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + $this->load->model('admin/user_model'); + $this->data['breadcrumb'] = $this->breadcrumbs->show(); + $this->data['users'] = $this->user_model->get_users(); + $this->template->admin_render('admin/users/index', $this->data); + } + } + + public function toggle_is_active(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/user_model'); + echo $this->user_model->toggle_is_active($uid); + } + + public function set_user(){ + $uid = $this->input->post('uid'); + $id = $this->input->post('id'); + $pw = $this->input->post('pw'); + $name = $this->input->post('name'); + $this->load->model('admin/user_model'); + echo $this->user_model->set_user($uid, $id, $pw, $name); + } + + public function get_missions(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/user_level_model'); + $res = $this->user_level_model->get_missions($uid); + header('Content-Type: application/json'); + echo json_encode($res); + } + + public function set_mission(){ + $uid = $this->input->post('uid'); + $point = $this->input->post('point'); + $this->load->model('admin/user_level_model'); + echo $this->user_level_model->set_mission($uid, $point); + } + + public function reset_missions(){ + $uid = $this->input->post('uid'); + $this->load->model('admin/user_level_model'); + echo $this->user_level_model->reset_missions($uid); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/_Original.php b/2_services/1_metaverse/nodam/application/controllers/admin/_Original.php new file mode 100644 index 0000000..3d07d0c --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/_Original.php @@ -0,0 +1,16 @@ +load->view('public/home'); + } +} diff --git a/2_services/1_metaverse/nodam/application/controllers/admin/index.html b/2_services/1_metaverse/nodam/application/controllers/admin/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/admin/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/controllers/index.html b/2_services/1_metaverse/nodam/application/controllers/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/controllers/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/core/MY_Controller.php b/2_services/1_metaverse/nodam/application/core/MY_Controller.php new file mode 100644 index 0000000..1b83560 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/core/MY_Controller.php @@ -0,0 +1,128 @@ +load->database(); + + /* Data */ + $this->data['lang'] = element($this->config->item('language'), $this->config->item('language_abbr')); + $this->data['charset'] = $this->config->item('charset'); + $this->data['frameworks_dir'] = $this->config->item('frameworks_dir'); + $this->data['plugins_dir'] = $this->config->item('plugins_dir'); + $this->data['avatar_dir'] = $this->config->item('avatar_dir'); + + /* Any mobile device (phones or tablets) */ + if ($this->mobile_detect->isMobile()) + { + $this->data['mobile'] = TRUE; + + if ($this->mobile_detect->isiOS()){ + $this->data['ios'] = TRUE; + $this->data['android'] = FALSE; + } + elseif ($this->mobile_detect->isAndroidOS()) + { + $this->data['ios'] = FALSE; + $this->data['android'] = TRUE; + } + else + { + $this->data['ios'] = FALSE; + $this->data['android'] = FALSE; + } + + if ($this->mobile_detect->getBrowsers('IE')){ + $this->data['mobile_ie'] = TRUE; + } + else + { + $this->data['mobile_ie'] = FALSE; + } + } + else + { + $this->data['mobile'] = FALSE; + $this->data['ios'] = FALSE; + $this->data['android'] = FALSE; + $this->data['mobile_ie'] = FALSE; + } + } +} + + +class Admin_Controller extends MY_Controller +{ + public function __construct() + { + parent::__construct(); + + if ( ! $this->ion_auth->logged_in() OR ! $this->ion_auth->is_admin()) + { + redirect('auth/login', 'refresh'); + } + else + { + /* Load */ + $this->load->config('admin/dp_config'); + $this->load->library(['admin/breadcrumbs', 'admin/page_title']); + $this->load->model('admin/core_model'); + $this->load->helper('menu'); + $this->lang->load(['admin/main_header', 'admin/main_sidebar', 'admin/footer', 'admin/actions']); + + /* Load library function */ + $this->breadcrumbs->unshift(0, $this->lang->line('menu_dashboard'), 'admin/dashboard'); + + /* Data */ + $this->data['title'] = $this->config->item('title'); + $this->data['title_lg'] = $this->config->item('title_lg'); + $this->data['title_mini'] = $this->config->item('title_mini'); + //$this->data['admin_prefs'] = $this->prefs_model->admin_prefs(); + //$this->data['user_login'] = $this->prefs_model->user_info_login($this->ion_auth->user()->row()->id); + + if ($this->router->fetch_class() == 'dashboard') + { + $this->data['dashboard_alert_file_install'] = $this->core_model->get_file_install(); + $this->data['header_alert_file_install'] = NULL; + } + else + { + $this->data['dashboard_alert_file_install'] = NULL; + $this->data['header_alert_file_install'] = NULL; /* << A MODIFIER !!! */ + } + } + } +} + + +class Public_Controller extends MY_Controller +{ + public function __construct() + { + parent::__construct(); + + if ($this->ion_auth->logged_in() && $this->ion_auth->is_admin()) + { + $this->data['admin_link'] = TRUE; + } + else + { + $this->data['admin_link'] = FALSE; + } + + if ($this->ion_auth->logged_in()) + { + $this->data['logout_link'] = TRUE; + } + else + { + $this->data['logout_link'] = FALSE; + } + } +} diff --git a/2_services/1_metaverse/nodam/application/core/index.html b/2_services/1_metaverse/nodam/application/core/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/core/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/helpers/MY_url_helper.php b/2_services/1_metaverse/nodam/application/helpers/MY_url_helper.php new file mode 100644 index 0000000..563d187 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/helpers/MY_url_helper.php @@ -0,0 +1,45 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/helpers/menu_helper.php b/2_services/1_metaverse/nodam/application/helpers/menu_helper.php new file mode 100644 index 0000000..7f1ed6c --- /dev/null +++ b/2_services/1_metaverse/nodam/application/helpers/menu_helper.php @@ -0,0 +1,25 @@ +router->fetch_class(); + + return ($class == $controller) ? 'active' : NULL; + } +} + + +if ( ! function_exists('active_link_function')) +{ + function active_link_function($controller) + { + $CI =& get_instance(); + $class = $CI->router->fetch_method(); + + return ($class == $controller) ? 'active' : NULL; + } +} diff --git a/2_services/1_metaverse/nodam/application/hooks/index.html b/2_services/1_metaverse/nodam/application/hooks/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/hooks/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/hooks/minify_html.php b/2_services/1_metaverse/nodam/application/hooks/minify_html.php new file mode 100644 index 0000000..d15b100 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/hooks/minify_html.php @@ -0,0 +1,27 @@ +output->get_output(); + + $re = '%(?>[^\S ]\s*| \s{2,})(?=[^<]*+(?:<(?!/?(?:textarea|pre|script)\b)[^<]*+)*+(?:<(?>textarea|pre|script)\b| \z))%Six'; + + $new_buffer = preg_replace($re, '', $buffer); + + if ($new_buffer === NULL) + { + $new_buffer = $buffer; + } + + $CI->output->set_output($new_buffer); + $CI->output->_display(); + } +} diff --git a/2_services/1_metaverse/nodam/application/index.html b/2_services/1_metaverse/nodam/application/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/english/admin/actions_lang.php b/2_services/1_metaverse/nodam/application/language/english/admin/actions_lang.php new file mode 100644 index 0000000..cda5230 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/english/admin/actions_lang.php @@ -0,0 +1,26 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/english/admin/main_header_lang.php b/2_services/1_metaverse/nodam/application/language/english/admin/main_header_lang.php new file mode 100644 index 0000000..1315a6b --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/english/admin/main_header_lang.php @@ -0,0 +1,24 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/english/ion_auth_lang.php b/2_services/1_metaverse/nodam/application/language/english/ion_auth_lang.php new file mode 100644 index 0000000..082089f --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/english/ion_auth_lang.php @@ -0,0 +1,78 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/french/admin/actions_lang.php b/2_services/1_metaverse/nodam/application/language/french/admin/actions_lang.php new file mode 100644 index 0000000..8439ace --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/french/admin/actions_lang.php @@ -0,0 +1,26 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/french/admin/main_header_lang.php b/2_services/1_metaverse/nodam/application/language/french/admin/main_header_lang.php new file mode 100644 index 0000000..7335a64 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/french/admin/main_header_lang.php @@ -0,0 +1,24 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/french/ion_auth_lang.php b/2_services/1_metaverse/nodam/application/language/french/ion_auth_lang.php new file mode 100644 index 0000000..b78d61a --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/french/ion_auth_lang.php @@ -0,0 +1,81 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/index.html b/2_services/1_metaverse/nodam/application/language/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/portuguese/admin/actions_lang.php b/2_services/1_metaverse/nodam/application/language/portuguese/admin/actions_lang.php new file mode 100644 index 0000000..b042c43 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/portuguese/admin/actions_lang.php @@ -0,0 +1,26 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/portuguese/admin/main_header_lang.php b/2_services/1_metaverse/nodam/application/language/portuguese/admin/main_header_lang.php new file mode 100644 index 0000000..e4c0db7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/portuguese/admin/main_header_lang.php @@ -0,0 +1,24 @@ +%s'; +$lang['deactivate_confirm_y_label'] = 'Sim:'; +$lang['deactivate_confirm_n_label'] = 'Não:'; +$lang['deactivate_submit_btn'] = 'Enviar'; +$lang['deactivate_validation_confirm_label'] = 'confirmação'; +$lang['deactivate_validation_user_id_label'] = 'user ID'; + +// Create User +$lang['create_user_heading'] = 'Criar Usuário'; +$lang['create_user_subheading'] = 'Por favor informe os dados do usuário.'; +$lang['create_user_fname_label'] = 'Nome:'; +$lang['create_user_lname_label'] = 'Sobrenome:'; +$lang['create_user_company_label'] = 'Empresa:'; +$lang['create_user_email_label'] = 'Email:'; +$lang['create_user_phone_label'] = 'Telefone:'; +$lang['create_user_password_label'] = 'Senha:'; +$lang['create_user_password_confirm_label'] = 'Confirmar senha:'; +$lang['create_user_submit_btn'] = 'Criar Usuário'; +$lang['create_user_validation_fname_label'] = 'Nome'; +$lang['create_user_validation_lname_label'] = 'Sobrenome'; +$lang['create_user_validation_email_label'] = 'Email'; +$lang['create_user_validation_phone_label'] = 'Telefone'; +$lang['create_user_validation_company_label'] = 'Empresa'; +$lang['create_user_validation_password_label'] = 'Senha'; +$lang['create_user_validation_password_confirm_label'] = 'Confirmação de Senha'; + +// Edit User +$lang['edit_user_heading'] = 'Editar Usuário'; +$lang['edit_user_subheading'] = 'Por favor informe os dados sobre o usuário abaixo.'; +$lang['edit_user_fname_label'] = 'Nome:'; +$lang['edit_user_lname_label'] = 'Sobrenome:'; +$lang['edit_user_company_label'] = 'Empresa:'; +$lang['edit_user_email_label'] = 'Email:'; +$lang['edit_user_phone_label'] = 'Telefone:'; +$lang['edit_user_password_label'] = 'Senha: (se quiser mudar a senha)'; +$lang['edit_user_password_confirm_label'] = 'Confirme a senha: (se quiser mudar a senha)'; +$lang['edit_user_groups_heading'] = 'Membro dos grupos'; +$lang['edit_user_submit_btn'] = 'Salvar Usuário'; +$lang['edit_user_validation_fname_label'] = 'Nome'; +$lang['edit_user_validation_lname_label'] = 'Sobrenome'; +$lang['edit_user_validation_email_label'] = 'Email'; +$lang['edit_user_validation_phone_label'] = 'Telefone'; +$lang['edit_user_validation_company_label'] = 'Empresa'; +$lang['edit_user_validation_groups_label'] = 'Grupos'; +$lang['edit_user_validation_password_label'] = 'Senha'; +$lang['edit_user_validation_password_confirm_label'] = 'Confirme a senha'; + +// Create Group +$lang['create_group_title'] = 'Criar Grupo'; +$lang['create_group_heading'] = 'Criar Grupo'; +$lang['create_group_subheading'] = 'Por favor informe os dados sobre o grupo abaixo.'; +$lang['create_group_name_label'] = 'Nome:'; +$lang['create_group_desc_label'] = 'Descrição:'; +$lang['create_group_submit_btn'] = 'Criar Grupo'; +$lang['create_group_validation_name_label'] = 'Nome'; +$lang['create_group_validation_desc_label'] = 'Descrição'; + +// Edit Group +$lang['edit_group_title'] = 'Editar Grupo'; +$lang['edit_group_saved'] = 'Grupo Salvo'; +$lang['edit_group_heading'] = 'Editar Group'; +$lang['edit_group_subheading'] = 'Por favor informe os dados sobre o grupo abaixo.'; +$lang['edit_group_name_label'] = 'Nome:'; +$lang['edit_group_desc_label'] = 'Descrição:'; +$lang['edit_group_submit_btn'] = 'Salvar Grupo'; +$lang['edit_group_validation_name_label'] = 'Nome'; +$lang['edit_group_validation_desc_label'] = 'Descrição'; + +// Change Password +$lang['change_password_heading'] = 'Mudar Senha'; +$lang['change_password_old_password_label'] = 'Senha Antiga:'; +$lang['change_password_new_password_label'] = 'Nova senha: (mínimo de %s caracteres)'; +$lang['change_password_new_password_confirm_label'] = 'Confirme sua Nova Senha:'; +$lang['change_password_submit_btn'] = 'Mudar'; +$lang['change_password_validation_old_password_label'] = 'Senha Antiga'; +$lang['change_password_validation_new_password_label'] = 'Nova Senha'; +$lang['change_password_validation_new_password_confirm_label'] = 'Confirme sua Nova Senha'; + +// Forgot Password +$lang['forgot_password_heading'] = 'Esqueceu a Senha'; +$lang['forgot_password_subheading'] = 'Por favor, informe seu %s para que possamos enviar para você uma mensagem para recuparar sua senha.'; +$lang['forgot_password_email_label'] = '%s:'; +$lang['forgot_password_submit_btn'] = 'Enviar'; +$lang['forgot_password_validation_email_label'] = 'Email'; +$lang['forgot_password_username_identity_label'] = 'Login'; +$lang['forgot_password_email_identity_label'] = 'Email'; +$lang['forgot_password_email_not_found'] = 'Este email não foi encontrado.'; + +// Reset Password +$lang['reset_password_heading'] = 'Mudar Senha'; +$lang['reset_password_new_password_label'] = 'Nova senha: (mínimo de %s caracteres)'; +$lang['reset_password_new_password_confirm_label'] = 'Confirme sua Nova Senha:'; +$lang['reset_password_submit_btn'] = 'Mudar'; +$lang['reset_password_validation_new_password_label'] = 'Senha Antiga'; +$lang['reset_password_validation_new_password_confirm_label'] = 'Confirme sua Nova Senha'; diff --git a/2_services/1_metaverse/nodam/application/language/portuguese/index.html b/2_services/1_metaverse/nodam/application/language/portuguese/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/portuguese/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/language/portuguese/ion_auth_lang.php b/2_services/1_metaverse/nodam/application/language/portuguese/ion_auth_lang.php new file mode 100644 index 0000000..f5769b0 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/language/portuguese/ion_auth_lang.php @@ -0,0 +1,78 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/libraries/Template.php b/2_services/1_metaverse/nodam/application/libraries/Template.php new file mode 100644 index 0000000..b98b763 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/Template.php @@ -0,0 +1,50 @@ +CI =& get_instance(); + } + + + public function admin_render($content, $data = NULL) + { + if ( ! $content) + { + return NULL; + } + else + { + $this->template['header'] = $this->CI->load->view('admin/_templates/header', $data, TRUE); + $this->template['main_header'] = $this->CI->load->view('admin/_templates/main_header', $data, TRUE); + $this->template['main_sidebar'] = $this->CI->load->view('admin/_templates/main_sidebar', $data, TRUE); + $this->template['content'] = $this->CI->load->view($content, $data, TRUE); + //$this->template['control_sidebar'] = $this->CI->load->view('admin/_templates/control_sidebar', $data, TRUE); + $this->template['footer'] = $this->CI->load->view('admin/_templates/footer', $data, TRUE); + + return $this->CI->load->view('admin/_templates/template', $this->template); + } + } + + + public function auth_render($content, $data = NULL) + { + if ( ! $content) + { + return NULL; + } + else + { + $this->template['header'] = $this->CI->load->view('auth/_templates/header', $data, TRUE); + $this->template['content'] = $this->CI->load->view($content, $data, TRUE); + $this->template['footer'] = $this->CI->load->view('auth/_templates/footer', $data, TRUE); + + return $this->CI->load->view('auth/_templates/template', $this->template); + } + } + +} diff --git a/2_services/1_metaverse/nodam/application/libraries/admin/Breadcrumbs.php b/2_services/1_metaverse/nodam/application/libraries/admin/Breadcrumbs.php new file mode 100644 index 0000000..39dfc11 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/admin/Breadcrumbs.php @@ -0,0 +1,85 @@ +> https://github.com/nobuti/Codeigniter-breadcrumbs +class Breadcrumbs { + + protected $CI; + + private $breadcrumbs = array(); + + public function __construct() + { + $this->CI =& get_instance(); + + $this->breadcrumb_open = $this->CI->config->item('breadcrumb_open'); + $this->breadcrumb_close = $this->CI->config->item('breadcrumb_close'); + $this->breadcrumb_el_open = $this->CI->config->item('breadcrumb_el_open'); + $this->breadcrumb_el_close = $this->CI->config->item('breadcrumb_el_close'); + $this->breadcrumb_el_first = $this->CI->config->item('breadcrumb_el_first'); + $this->breadcrumb_el_last_open = $this->CI->config->item('breadcrumb_el_last'); + } + + + function array_sorter($key) + { + return function ($a, $b) use ($key) + { + return strnatcmp($a[$key], $b[$key]); + }; + } + + + function push($id, $page, $url) + { + if (!$page OR !$url) return; + + $url = site_url($url); + + $this->breadcrumbs[$url] = array('id' => $id, 'page' => $page, 'href' => $url); + } + + + function unshift($id, $page, $url) + { + if (!$page OR !$url) return; + + $url = site_url($url); + + array_unshift($this->breadcrumbs, array('id' => $id, 'page' => $page, 'href' => $url)); + } + + + function show() + { + if ($this->breadcrumbs) + { + $output = $this->breadcrumb_open ."\n"; + + usort($this->breadcrumbs, $this->array_sorter('id')); + + foreach ($this->breadcrumbs as $key => $value) + { + $keys = array_keys($this->breadcrumbs); + + if (reset($keys) == $key) + { + $output.= "\t\t\t". $this->breadcrumb_el_open .''. $this->breadcrumb_el_first .' '. $value['page'] .' '. $this->breadcrumb_el_close ."\n"; + } + elseif (end($keys) == $key) + { + $output.= "\t\t\t". $this->breadcrumb_el_last_open . $value['page'] . $this->breadcrumb_el_close ."\n"; + } + else + { + $output.= "\t\t\t". $this->breadcrumb_el_open .''. $value['page'] .' '. $this->breadcrumb_el_close ."\n"; + } + } + + return $output. "\t\t\t". $this->breadcrumb_close ."\n"; + } + + return NULL; + } + +} diff --git a/2_services/1_metaverse/nodam/application/libraries/admin/Page_title.php b/2_services/1_metaverse/nodam/application/libraries/admin/Page_title.php new file mode 100644 index 0000000..2a23720 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/admin/Page_title.php @@ -0,0 +1,56 @@ +CI =& get_instance(); + + $this->pagetitle_open = $this->CI->config->item('pagetitle_open'); + $this->pagetitle_close = $this->CI->config->item('pagetitle_close'); + $this->pagetitle_el_open = $this->CI->config->item('pagetitle_el_open'); + $this->pagetitle_el_close = $this->CI->config->item('pagetitle_el_close'); + } + + + function push($title, $subtitle = '') + { + if (!$title) return; + + array_unshift($this->page_title, array('title' => $title, 'subtitle' => $subtitle)); + } + + + function show() + { + if ($this->page_title) + { + $output = $this->pagetitle_open; + + foreach ($this->page_title as $key => $value) + { + if (!empty($value['subtitle'])) + { + $subtitle = ' ' . $this->pagetitle_el_open . $value['subtitle'] . $this->pagetitle_el_close; + } + else + { + $subtitle = NULL; + } + + $output.= $value['title'] . $subtitle; + } + + return $output. $this->pagetitle_close ."\n"; + } + + return NULL; + } + +} diff --git a/2_services/1_metaverse/nodam/application/libraries/admin/index.html b/2_services/1_metaverse/nodam/application/libraries/admin/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/admin/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/libraries/common/Mobile_detect.php b/2_services/1_metaverse/nodam/application/libraries/common/Mobile_detect.php new file mode 100644 index 0000000..6ccf39b --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/common/Mobile_detect.php @@ -0,0 +1,1472 @@ + + * Nick Ilyin + * + * Original author: Victor Stanciu + * + * @license Code and contributions have 'MIT License' + * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt + * + * @link Homepage: http://mobiledetect.net + * GitHub Repo: https://github.com/serbanghita/Mobile-Detect + * Google Code: http://code.google.com/p/php-mobile-detect/ + * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md + * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples + * + * @version 2.8.30 + */ + +class Mobile_Detect +{ + /** + * Mobile detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_MOBILE = 'mobile'; + + /** + * Extended detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_EXTENDED = 'extended'; + + /** + * A frequently used regular expression to extract version #s. + * + * @deprecated since version 2.6.9 + */ + const VER = '([\w._\+]+)'; + + /** + * Top-level device. + */ + const MOBILE_GRADE_A = 'A'; + + /** + * Mid-level device. + */ + const MOBILE_GRADE_B = 'B'; + + /** + * Low-level device. + */ + const MOBILE_GRADE_C = 'C'; + + /** + * Stores the version number of the current release. + */ + const VERSION = '2.8.30'; + + /** + * A type for the version() method indicating a string return value. + */ + const VERSION_TYPE_STRING = 'text'; + + /** + * A type for the version() method indicating a float return value. + */ + const VERSION_TYPE_FLOAT = 'float'; + + /** + * A cache for resolved matches + * @var array + */ + protected $cache = array(); + + /** + * The User-Agent HTTP header is stored in here. + * @var string + */ + protected $userAgent = null; + + /** + * HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE. + * @var array + */ + protected $httpHeaders = array(); + + /** + * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer. + * @var array + */ + protected $cloudfrontHeaders = array(); + + /** + * The matching Regex. + * This is good for debug. + * @var string + */ + protected $matchingRegex = null; + + /** + * The matches extracted from the regex expression. + * This is good for debug. + * @var string + */ + protected $matchesArray = null; + + /** + * The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED. + * + * @deprecated since version 2.6.9 + * + * @var string + */ + protected $detectionType = self::DETECTION_TYPE_MOBILE; + + /** + * HTTP headers that trigger the 'isMobile' detection + * to be true. + * + * @var array + */ + protected static $mobileHeaders = array( + + 'HTTP_ACCEPT' => array('matches' => array( + // Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/ + 'application/x-obml2d', + // BlackBerry devices. + 'application/vnd.rim.html', + 'text/vnd.wap.wml', + 'application/vnd.wap.xhtml+xml' + )), + 'HTTP_X_WAP_PROFILE' => null, + 'HTTP_X_WAP_CLIENTID' => null, + 'HTTP_WAP_CONNECTION' => null, + 'HTTP_PROFILE' => null, + // Reported by Opera on Nokia devices (eg. C3). + 'HTTP_X_OPERAMINI_PHONE_UA' => null, + 'HTTP_X_NOKIA_GATEWAY_ID' => null, + 'HTTP_X_ORANGE_ID' => null, + 'HTTP_X_VODAFONE_3GPDPCONTEXT' => null, + 'HTTP_X_HUAWEI_USERID' => null, + // Reported by Windows Smartphones. + 'HTTP_UA_OS' => null, + // Reported by Verizon, Vodafone proxy system. + 'HTTP_X_MOBILE_GATEWAY' => null, + // Seen this on HTC Sensation. SensationXE_Beats_Z715e. + 'HTTP_X_ATT_DEVICEID' => null, + // Seen this on a HTC. + 'HTTP_UA_CPU' => array('matches' => array('ARM')), + ); + + /** + * List of mobile devices (phones). + * + * @var array + */ + protected static $phoneDevices = array( + 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes + 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+', + 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel', + 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6', + // @todo: Is 'Dell Streak' a tablet or a phone? ;) + 'Dell' => 'Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b', + 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b|XT1068|XT1092', + 'Samsung' => '\bSamsung\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F', + 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323)', + 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533', + 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile', + 'NokiaLumia' => 'Lumia [0-9]{3,4}', + // http://www.micromaxinfo.com/mobiles/smartphones + // Added because the codes might conflict with Acer Tablets. + 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b', + // @todo Complete the regex. + 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; + 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;) + // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH) + // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android. + 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790', + // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones. + 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250', + // http://fr.wikomobile.com + 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM', + 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', + // Added simvalley mobile just for fun. They have some interesting devices. + // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html + 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b', + // Wolfgang - a brand that is sold by Aldi supermarkets. + // http://www.wolfgangmobile.com/ + 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q', + 'Alcatel' => 'Alcatel', + 'Nintendo' => 'Nintendo 3DS', + // http://en.wikipedia.org/wiki/Amoi + 'Amoi' => 'Amoi', + // http://en.wikipedia.org/wiki/INQ + 'INQ' => 'INQ', + // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039 + 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser', + ); + + /** + * List of tablet devices. + * + * @var array + */ + protected static $tabletDevices = array( + // @todo: check for mobile friendly emails topic. + 'iPad' => 'iPad|iPad.*Mobile', + // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$ + // @see #442 + 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)', + 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. + // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html + 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)', + // Only the Surface tablets with Windows RT are considered mobile. + // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx + 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)', + // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT + 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10', + // Watch out for PadFone, see #132. + // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/ + 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\bP027\b', + 'BlackBerryTablet' => 'PlayBook|RIM Tablet', + 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410', + 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617', + 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2', + // http://www.acer.ro/ac/ro/RO/content/drivers + // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) + // http://us.acer.com/ac/en/US/content/group/tablets + // http://www.acer.de/ac/de/DE/content/models/tablets/ + // Can conflict with Micromax and Motorola phones codes. + 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30', + // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ + // http://us.toshiba.com/tablets/tablet-finder + // http://www.toshiba.co.jp/regza/tablet/ + 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO', + // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html + // http://www.lg.com/us/tablets + 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b', + 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b', + // Prestigio Tablets http://www.prestigio.com/support + 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002', + // http://support.lenovo.com/en_GB/downloads/default.page?# + 'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304F|TB-8703F', + // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets + 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7', + // http://www.yarvik.com/en/matrix/tablets/ + 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b', + 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', + 'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2', + // http://www.intenso.de/kategorie_en.php?kategorie=33 + // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate + 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004', + // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/ + 'IRUTablet' => 'M702pro', + 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b', + // http://www.e-boda.ro/tablete-pc.html + 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)', + // http://www.allview.ro/produse/droseries/lista-tablete-pc/ + 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', + // http://wiki.archosfans.com/index.php?title=Main_Page + // @note Rewrite the regex format after we add more UAs. + 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b', + // http://www.ainol.com/plugin.php?identifier=ainol&module=product + 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', + 'NokiaLumiaTablet' => 'Lumia 2520', + // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER + // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser + // http://www.sony.jp/support/tablet/ + 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31', + // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8 + 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b', + // db + http://www.cube-tablet.com/buy-products.html + 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT', + // http://www.cobyusa.com/?p=pcat&pcat_id=3001 + 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', + // http://www.match.net.cn/products.asp + 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10', + // http://www.msi.com/support + // @todo Research the Windows Tablets. + 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b', + // @todo http://www.kyoceramobile.com/support/drivers/ + // 'KyoceraTablet' => null, + // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/ + // 'IntextTablet' => null, + // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) + // http://www.imp3.net/14/show.php?itemid=20454 + 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)', + // http://www.rock-chips.com/index.php?do=prod&pid=2 + 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A', + // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/ + 'FlyTablet' => 'IQ310|Fly Vision', + // http://www.bqreaders.com/gb/tablets-prices-sale.html + 'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus', + // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 + // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) + 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L', + // Nec or Medias Tab + 'NecTablet' => '\bN-06D|\bN-08D', + // Pantech Tablets: http://www.pantechusa.com/phones/ + 'PantechTablet' => 'Pantech.*P4100', + // Broncho Tablets: http://www.broncho.cn/ (hard to find) + 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)', + // http://versusuk.com/support.html + 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b', + // http://www.zync.in/index.php/our-products/tablet-phablets + 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900', + // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ + 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA', + // https://www.nabitablet.com/ + 'NabiTablet' => 'Android.*\bNabi', + 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build', + // French Danew Tablets http://www.danew.com/produits-tablette.php + 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b', + // Texet Tablets and Readers http://www.texet.ru/tablet/ + 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE', + // Avoid detecting 'PLAYSTATION 3' as mobile. + 'PlaystationTablet' => 'Playstation.*(Portable|Vita)', + // http://www.trekstor.de/surftabs.html + 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab', + // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets + 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b', + // http://www.advandigital.com/index.php?link=content-product&jns=JP001 + // because of the short codenames we have to include whitespaces to reduce the possible conflicts. + 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ', + // http://www.danytech.com/category/tablet-pc + 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1', + // http://www.galapad.net/product.html + 'GalapadTablet' => 'Android.*\bG1\b', + // http://www.micromaxinfo.com/tablet/funbook + 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', + // http://www.karbonnmobiles.com/products_tablet.php + 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b', + // http://www.myallfine.com/Products.asp + 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide', + // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= + 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b', + // http://www.yonesnav.com/products/products.php + 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026', + // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 + // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html) + 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503', + // http://www.gloryunion.cn/products.asp + // http://www.allwinnertech.com/en/apply/mobile.html + // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB) + // @todo: Softwiner tablets? + // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions. + 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G + // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118 + 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10', + // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ + // @todo: add more tests. + 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027', + // http://hclmetablet.com/India/index.php + 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync', + // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html + 'DPSTablet' => 'DPS Dream 9|DPS Dual 7', + // http://www.visture.com/index.asp + 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10', + // http://www.mijncresta.nl/tablet + 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989', + // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309 + 'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b', + // Concorde tab + 'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan', + // GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/ + 'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042', + // Modecom Tablets - http://www.modecom.eu/tablets/portal/ + 'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003', + // Vonino Tablets - http://www.vonino.eu/tablets + 'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b', + // ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0 + 'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1', + // Storex Tablets - http://storex.fr/espace_client/support.html + // @note: no need to add all the tablet codes since they are guided by the first regex. + 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab', + // Generic Vodafone tablets. + 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497', + // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb + // Aka: http://www.essentielb.fr/ + 'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2', + // Ross & Moor - http://ross-moor.ru/ + 'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711', + // i-mobile http://product.i-mobilephone.com/Mobile_Device + 'iMobileTablet' => 'i-mobile i-note', + // http://www.tolino.de/de/vergleichen/ + 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine', + // AudioSonic - a Kmart brand + // http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1 + 'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b', + // AMPE Tablets - http://www.ampe.com.my/product-category/tablets/ + // @todo: add them gradually to avoid conflicts. + 'AMPETablet' => 'Android.* A78 ', + // Skk Mobile - http://skkmobile.com.ph/product_tablets.php + 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)', + // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1 + 'TecnoTablet' => 'TECNO P9', + // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3 + 'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b', + // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/ + 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)', + // http://www.intracon.eu/tablet + 'FX2Tablet' => 'FX2 PAD7|FX2 PAD10', + // http://www.xoro.de/produkte/ + // @note: Might be the same brand with 'Simply tablets' + 'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151', + // http://www1.viewsonic.com/products/computing/tablets/ + 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a', + // https://www.verizonwireless.com/tablets/verizon/ + 'VerizonTablet' => 'QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1', + // http://www.odys.de/web/internet-tablet_en.html + 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10', + // http://www.captiva-power.de/products.html#tablets-en + 'CaptivaTablet' => 'CAPTIVA PAD', + // IconBIT - http://www.iconbit.com/products/tablets/ + 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S', + // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63 + 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi', + // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price + 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+', + 'JaytechTablet' => 'TPC-PA762', + 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010', + // http://www.digma.ru/support/download/ + // @todo: Ebooks also (if requested) + 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b', + // http://www.evolioshop.com/ro/tablete-pc.html + // http://www.evolio.ro/support/downloads_static.html?cat=2 + // @todo: Research some more + 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b', + // @todo http://www.lavamobiles.com/tablets-data-cards + 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b', + // http://www.breezetablet.com/ + 'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712', + // http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/ + 'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010', + // https://www.celkonmobiles.com/?_a=categoryphones&sid=2 + 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b', + // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab + 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b', + // http://www.mi.com/en + 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b', + // http://www.nbru.cn/index.html + 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One', + // http://navroad.com/products/produkty/tablety/ + // http://navroad.com/products/produkty/tablety/ + 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI', + // http://leader-online.com/new_site/product-category/tablets/ + // http://www.leader-online.net.au/List/Tablet + 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100', + // http://www.datawind.com/ubislate/ + 'UbislateTablet' => 'UbiSlate[\s]?7C', + // http://www.pocketbook-int.com/ru/support + 'PocketBookTablet' => 'Pocketbook', + // http://www.kocaso.com/product_tablet.html + 'KocasoTablet' => '\b(TB-1207)\b', + // http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm + 'HisenseTablet' => '\b(F5281|E2371)\b', + // http://www.tesco.com/direct/hudl/ + 'Hudl' => 'Hudl HT7S3|Hudl 2', + // http://www.telstra.com.au/home-phone/thub-2/ + 'TelstraTablet' => 'T-Hub2', + 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b|\bQTAQZ3\b' + ); + + /** + * List of mobile Operating Systems. + * + * @var array + */ + protected static $operatingSystems = array( + 'AndroidOS' => 'Android', + 'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os', + 'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino', + 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', + // @reference: http://en.wikipedia.org/wiki/Windows_Mobile + 'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;', + // @reference: http://en.wikipedia.org/wiki/Windows_Phone + // http://wifeng.cn/?r=blog&a=view&id=106 + // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx + // http://msdn.microsoft.com/library/ms537503.aspx + // https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx + 'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;', + 'iOS' => '\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia', + // http://en.wikipedia.org/wiki/MeeGo + // @todo: research MeeGo in UAs + 'MeeGoOS' => 'MeeGo', + // http://en.wikipedia.org/wiki/Maemo + // @todo: research Maemo in UAs + 'MaemoOS' => 'Maemo', + 'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135 + 'webOS' => 'webOS|hpwOS', + 'badaOS' => '\bBada\b', + 'BREWOS' => 'BREW', + ); + + /** + * List of mobile User Agents. + * + * IMPORTANT: This is a list of only mobile browsers. + * Mobile Detect 2.x supports only mobile browsers, + * it was never designed to detect all browsers. + * The change will come in 2017 in the 3.x release for PHP7. + * + * @var array + */ + protected static $browsers = array( + //'Vivaldi' => 'Vivaldi', + // @reference: https://developers.google.com/chrome/mobile/docs/user-agent + 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?', + 'Dolfin' => '\bDolfin\b', + 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+', + 'Skyfire' => 'Skyfire', + 'Edge' => 'Mobile Safari/[.0-9]* Edge', + 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ + 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS', + 'Bolt' => 'bolt', + 'TeaShark' => 'teashark', + 'Blazer' => 'Blazer', + // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3 + 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', + // http://en.wikipedia.org/wiki/Midori_(web_browser) + //'Midori' => 'midori', + //'Tizen' => 'Tizen', + 'UCBrowser' => 'UC.*Browser|UCWEB', + 'baiduboxapp' => 'baiduboxapp', + 'baidubrowser' => 'baidubrowser', + // https://github.com/serbanghita/Mobile-Detect/issues/7 + 'DiigoBrowser' => 'DiigoBrowser', + // http://www.puffinbrowser.com/index.php + 'Puffin' => 'Puffin', + // http://mercury-browser.com/index.html + 'Mercury' => '\bMercury\b', + // http://en.wikipedia.org/wiki/Obigo_Browser + 'ObigoBrowser' => 'Obigo', + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NF-Browser', + // @reference: http://en.wikipedia.org/wiki/Minimo + // http://en.wikipedia.org/wiki/Vision_Mobile_Browser + 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', + // @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser) + 'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon', + ); + + /** + * Utilities. + * + * @var array + */ + protected static $utilities = array( + // Experimental. When a mobile device wants to switch to 'Desktop Mode'. + // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/ + // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 + // https://developers.facebook.com/docs/sharing/best-practices + 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom', + 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2', + 'DesktopMode' => 'WPDesktop', + 'TV' => 'SonyDTV|HbbTV', // experimental + 'WebKit' => '(webkit)[ /]([\w.]+)', + // @todo: Include JXD consoles. + 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b', + 'Watch' => 'SM-V700', + ); + + /** + * All possible HTTP headers that represent the + * User-Agent string. + * + * @var array + */ + protected static $uaHttpHeaders = array( + // The default User-Agent string. + 'HTTP_USER_AGENT', + // Header can occur on devices using Opera Mini. + 'HTTP_X_OPERAMINI_PHONE_UA', + // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/ + 'HTTP_X_DEVICE_USER_AGENT', + 'HTTP_X_ORIGINAL_USER_AGENT', + 'HTTP_X_SKYFIRE_PHONE', + 'HTTP_X_BOLT_PHONE_UA', + 'HTTP_DEVICE_STOCK_UA', + 'HTTP_X_UCBROWSER_DEVICE_UA' + ); + + /** + * The individual segments that could exist in a User-Agent string. VER refers to the regular + * expression defined in the constant self::VER. + * + * @var array + */ + protected static $properties = array( + + // Build + 'Mobile' => 'Mobile/[VER]', + 'Build' => 'Build/[VER]', + 'Version' => 'Version/[VER]', + 'VendorID' => 'VendorID/[VER]', + + // Devices + 'iPad' => 'iPad.*CPU[a-z ]+[VER]', + 'iPhone' => 'iPhone.*CPU[a-z ]+[VER]', + 'iPod' => 'iPod.*CPU[a-z ]+[VER]', + //'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'), + 'Kindle' => 'Kindle/[VER]', + + // Browser + 'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'), + 'Coast' => array('Coast/[VER]'), + 'Dolfin' => 'Dolfin/[VER]', + // @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox + 'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'), + 'Fennec' => 'Fennec/[VER]', + // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx + // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx + 'Edge' => 'Edge/[VER]', + 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'), + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NetFront/[VER]', + 'NokiaBrowser' => 'NokiaBrowser/[VER]', + 'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ), + 'Opera Mini' => 'Opera Mini/[VER]', + 'Opera Mobi' => 'Version/[VER]', + 'UCBrowser' => array( 'UCWEB[VER]', 'UC.*Browser/[VER]' ), + 'MQQBrowser' => 'MQQBrowser/[VER]', + 'MicroMessenger' => 'MicroMessenger/[VER]', + 'baiduboxapp' => 'baiduboxapp/[VER]', + 'baidubrowser' => 'baidubrowser/[VER]', + 'SamsungBrowser' => 'SamsungBrowser/[VER]', + 'Iron' => 'Iron/[VER]', + // @note: Safari 7534.48.3 is actually Version 5.1. + // @note: On BlackBerry the Version is overwriten by the OS. + 'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ), + 'Skyfire' => 'Skyfire/[VER]', + 'Tizen' => 'Tizen/[VER]', + 'Webkit' => 'webkit[ /][VER]', + 'PaleMoon' => 'PaleMoon/[VER]', + + // Engine + 'Gecko' => 'Gecko/[VER]', + 'Trident' => 'Trident/[VER]', + 'Presto' => 'Presto/[VER]', + 'Goanna' => 'Goanna/[VER]', + + // OS + 'iOS' => ' \bi?OS\b [VER][ ;]{1}', + 'Android' => 'Android [VER]', + 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), + 'BREW' => 'BREW [VER]', + 'Java' => 'Java/[VER]', + // @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx + // @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases + 'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'), + 'Windows Phone' => 'Windows Phone [VER]', + 'Windows CE' => 'Windows CE/[VER]', + // http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd + 'Windows NT' => 'Windows NT [VER]', + 'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'), + 'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'), + ); + + /** + * Construct an instance of this class. + * + * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored. + * If left empty, will use the global _SERVER['HTTP_*'] vars instead. + * @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT + * from the $headers array instead. + */ + public function __construct( + array $headers = null, + $userAgent = null + ) { + $this->setHttpHeaders($headers); + $this->setUserAgent($userAgent); + } + + /** + * Get the current script version. + * This is useful for the demo.php file, + * so people can check on what version they are testing + * for mobile devices. + * + * @return string The version number in semantic version format. + */ + public static function getScriptVersion() + { + return self::VERSION; + } + + /** + * Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers. + * + * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract + * the headers. The default null is left for backwards compatibility. + */ + public function setHttpHeaders($httpHeaders = null) + { + // use global _SERVER if $httpHeaders aren't defined + if (!is_array($httpHeaders) || !count($httpHeaders)) { + $httpHeaders = $_SERVER; + } + + // clear existing headers + $this->httpHeaders = array(); + + // Only save HTTP headers. In PHP land, that means only _SERVER vars that + // start with HTTP_. + foreach ($httpHeaders as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $this->httpHeaders[$key] = $value; + } + } + + // In case we're dealing with CloudFront, we need to know. + $this->setCfHeaders($httpHeaders); + } + + /** + * Retrieves the HTTP headers. + * + * @return array + */ + public function getHttpHeaders() + { + return $this->httpHeaders; + } + + /** + * Retrieves a particular header. If it doesn't exist, no exception/error is caused. + * Simply null is returned. + * + * @param string $header The name of the header to retrieve. Can be HTTP compliant such as + * "User-Agent" or "X-Device-User-Agent" or can be php-esque with the + * all-caps, HTTP_ prefixed, underscore seperated awesomeness. + * + * @return string|null The value of the header. + */ + public function getHttpHeader($header) + { + // are we using PHP-flavored headers? + if (strpos($header, '_') === false) { + $header = str_replace('-', '_', $header); + $header = strtoupper($header); + } + + // test the alternate, too + $altHeader = 'HTTP_' . $header; + + //Test both the regular and the HTTP_ prefix + if (isset($this->httpHeaders[$header])) { + return $this->httpHeaders[$header]; + } elseif (isset($this->httpHeaders[$altHeader])) { + return $this->httpHeaders[$altHeader]; + } + + return null; + } + + public function getMobileHeaders() + { + return self::$mobileHeaders; + } + + /** + * Get all possible HTTP headers that + * can contain the User-Agent string. + * + * @return array List of HTTP headers. + */ + public function getUaHttpHeaders() + { + return self::$uaHttpHeaders; + } + + + /** + * Set CloudFront headers + * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device + * + * @param array $cfHeaders List of HTTP headers + * + * @return boolean If there were CloudFront headers to be set + */ + public function setCfHeaders($cfHeaders = null) { + // use global _SERVER if $cfHeaders aren't defined + if (!is_array($cfHeaders) || !count($cfHeaders)) { + $cfHeaders = $_SERVER; + } + + // clear existing headers + $this->cloudfrontHeaders = array(); + + // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that + // start with cloudfront-. + $response = false; + foreach ($cfHeaders as $key => $value) { + if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') { + $this->cloudfrontHeaders[strtoupper($key)] = $value; + $response = true; + } + } + + return $response; + } + + /** + * Retrieves the cloudfront headers. + * + * @return array + */ + public function getCfHeaders() + { + return $this->cloudfrontHeaders; + } + + /** + * @param string $userAgent + * @return string + */ + private function prepareUserAgent($userAgent) { + $userAgent = trim($userAgent); + $userAgent = substr($userAgent, 0, 500); + return $userAgent; + } + + /** + * Set the User-Agent to be used. + * + * @param string $userAgent The user agent string to set. + * + * @return string|null + */ + public function setUserAgent($userAgent = null) + { + // Invalidate cache due to #375 + $this->cache = array(); + + if (false === empty($userAgent)) { + return $this->userAgent = $this->prepareUserAgent($userAgent); + } else { + $this->userAgent = null; + foreach ($this->getUaHttpHeaders() as $altHeader) { + if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban) + $this->userAgent .= $this->httpHeaders[$altHeader] . " "; + } + } + + if (!empty($this->userAgent)) { + return $this->userAgent = $this->prepareUserAgent($this->userAgent); + } + } + + if (count($this->getCfHeaders()) > 0) { + return $this->userAgent = 'Amazon CloudFront'; + } + return $this->userAgent = null; + } + + /** + * Retrieve the User-Agent. + * + * @return string|null The user agent if it's set. + */ + public function getUserAgent() + { + return $this->userAgent; + } + + /** + * Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or + * self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set. + * + * @deprecated since version 2.6.9 + * + * @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default + * parameter is null which will default to self::DETECTION_TYPE_MOBILE. + */ + public function setDetectionType($type = null) + { + if ($type === null) { + $type = self::DETECTION_TYPE_MOBILE; + } + + if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) { + return; + } + + $this->detectionType = $type; + } + + public function getMatchingRegex() + { + return $this->matchingRegex; + } + + public function getMatchesArray() + { + return $this->matchesArray; + } + + /** + * Retrieve the list of known phone devices. + * + * @return array List of phone devices. + */ + public static function getPhoneDevices() + { + return self::$phoneDevices; + } + + /** + * Retrieve the list of known tablet devices. + * + * @return array List of tablet devices. + */ + public static function getTabletDevices() + { + return self::$tabletDevices; + } + + /** + * Alias for getBrowsers() method. + * + * @return array List of user agents. + */ + public static function getUserAgents() + { + return self::getBrowsers(); + } + + /** + * Retrieve the list of known browsers. Specifically, the user agents. + * + * @return array List of browsers / user agents. + */ + public static function getBrowsers() + { + return self::$browsers; + } + + /** + * Retrieve the list of known utilities. + * + * @return array List of utilities. + */ + public static function getUtilities() + { + return self::$utilities; + } + + /** + * Method gets the mobile detection rules. This method is used for the magic methods $detect->is*(). + * + * @deprecated since version 2.6.9 + * + * @return array All the rules (but not extended). + */ + public static function getMobileDetectionRules() + { + static $rules; + + if (!$rules) { + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers + ); + } + + return $rules; + + } + + /** + * Method gets the mobile detection rules + utilities. + * The reason this is separate is because utilities rules + * don't necessary imply mobile. This method is used inside + * the new $detect->is('stuff') method. + * + * @deprecated since version 2.6.9 + * + * @return array All the rules + extended. + */ + public function getMobileDetectionRulesExtended() + { + static $rules; + + if (!$rules) { + // Merge all rules together. + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers, + self::$utilities + ); + } + + return $rules; + } + + /** + * Retrieve the current set of rules. + * + * @deprecated since version 2.6.9 + * + * @return array + */ + public function getRules() + { + if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) { + return self::getMobileDetectionRulesExtended(); + } else { + return self::getMobileDetectionRules(); + } + } + + /** + * Retrieve the list of mobile operating systems. + * + * @return array The list of mobile operating systems. + */ + public static function getOperatingSystems() + { + return self::$operatingSystems; + } + + /** + * Check the HTTP headers for signs of mobile. + * This is the fastest mobile check possible; it's used + * inside isMobile() method. + * + * @return bool + */ + public function checkHttpHeadersForMobile() + { + + foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) { + if (isset($this->httpHeaders[$mobileHeader])) { + if (is_array($matchType['matches'])) { + foreach ($matchType['matches'] as $_match) { + if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) { + return true; + } + } + + return false; + } else { + return true; + } + } + } + + return false; + + } + + /** + * Magic overloading method. + * + * @method boolean is[...]() + * @param string $name + * @param array $arguments + * @return mixed + * @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is' + */ + public function __call($name, $arguments) + { + // make sure the name starts with 'is', otherwise + if (substr($name, 0, 2) !== 'is') { + throw new BadMethodCallException("No such method exists: $name"); + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + $key = substr($name, 2); + + return $this->matchUAAgainstKey($key); + } + + /** + * Find a detection rule that matches the current User-agent. + * + * @param null $userAgent deprecated + * @return boolean + */ + protected function matchDetectionRulesAgainstUA($userAgent = null) + { + // Begin general search. + foreach ($this->getRules() as $_regex) { + if (empty($_regex)) { + continue; + } + + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * Search for a certain key in the rules array. + * If the key is found then try to match the corresponding + * regex against the User-Agent. + * + * @param string $key + * + * @return boolean + */ + protected function matchUAAgainstKey($key) + { + // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc. + $key = strtolower($key); + if (false === isset($this->cache[$key])) { + + // change the keys to lower case + $_rules = array_change_key_case($this->getRules()); + + if (false === empty($_rules[$key])) { + $this->cache[$key] = $this->match($_rules[$key]); + } + + if (false === isset($this->cache[$key])) { + $this->cache[$key] = false; + } + } + + return $this->cache[$key]; + } + + /** + * Check if the device is mobile. + * Returns true if any type of mobile device detected, including special ones + * @param null $userAgent deprecated + * @param null $httpHeaders deprecated + * @return bool + */ + public function isMobile($userAgent = null, $httpHeaders = null) + { + + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + if ($this->checkHttpHeadersForMobile()) { + return true; + } else { + return $this->matchDetectionRulesAgainstUA(); + } + + } + + /** + * Check if the device is a tablet. + * Return true if any type of tablet device is detected. + * + * @param string $userAgent deprecated + * @param array $httpHeaders deprecated + * @return bool + */ + public function isTablet($userAgent = null, $httpHeaders = null) + { + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + foreach (self::$tabletDevices as $_regex) { + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * This method checks for a certain property in the + * userAgent. + * @todo: The httpHeaders part is not yet used. + * + * @param string $key + * @param string $userAgent deprecated + * @param string $httpHeaders deprecated + * @return bool|int|null + */ + public function is($key, $userAgent = null, $httpHeaders = null) + { + // Set the UA and HTTP headers only if needed (eg. batch mode). + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + $this->setDetectionType(self::DETECTION_TYPE_EXTENDED); + + return $this->matchUAAgainstKey($key); + } + + /** + * Some detection rules are relative (not standard), + * because of the diversity of devices, vendors and + * their conventions in representing the User-Agent or + * the HTTP headers. + * + * This method will be used to check custom regexes against + * the User-Agent string. + * + * @param $regex + * @param string $userAgent + * @return bool + * + * @todo: search in the HTTP headers too. + */ + public function match($regex, $userAgent = null) + { + $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); + // If positive match is found, store the results for debug. + if ($match) { + $this->matchingRegex = $regex; + $this->matchesArray = $matches; + } + + return $match; + } + + /** + * Get the properties array. + * + * @return array + */ + public static function getProperties() + { + return self::$properties; + } + + /** + * Prepare the version number. + * + * @todo Remove the error supression from str_replace() call. + * + * @param string $ver The string version, like "2.6.21.2152"; + * + * @return float + */ + public function prepareVersionNo($ver) + { + $ver = str_replace(array('_', ' ', '/'), '.', $ver); + $arrVer = explode('.', $ver, 2); + + if (isset($arrVer[1])) { + $arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions. + } + + return (float) implode('.', $arrVer); + } + + /** + * Check the version of the given property in the User-Agent. + * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) + * + * @param string $propertyName The name of the property. See self::getProperties() array + * keys for all possible properties. + * @param string $type Either self::VERSION_TYPE_STRING to get a string value or + * self::VERSION_TYPE_FLOAT indicating a float value. This parameter + * is optional and defaults to self::VERSION_TYPE_STRING. Passing an + * invalid parameter will default to the this type as well. + * + * @return string|float The version of the property we are trying to extract. + */ + public function version($propertyName, $type = self::VERSION_TYPE_STRING) + { + if (empty($propertyName)) { + return false; + } + + // set the $type to the default if we don't recognize the type + if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) { + $type = self::VERSION_TYPE_STRING; + } + + $properties = self::getProperties(); + + // Check if the property exists in the properties array. + if (true === isset($properties[$propertyName])) { + + // Prepare the pattern to be matched. + // Make sure we always deal with an array (string is converted). + $properties[$propertyName] = (array) $properties[$propertyName]; + + foreach ($properties[$propertyName] as $propertyMatchString) { + + $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString); + + // Identify and extract the version. + preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match); + + if (false === empty($match[1])) { + $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]); + + return $version; + } + + } + + } + + return false; + } + + /** + * Retrieve the mobile grading, using self::MOBILE_GRADE_* constants. + * + * @return string One of the self::MOBILE_GRADE_* constants. + */ + public function mobileGrade() + { + $isMobile = $this->isMobile(); + + if ( + // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 || + + // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5) + // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM + // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices + // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7 + ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) || + + // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8) + $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 || + + // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10) + $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 || + // Blackberry Playbook (1.0-2.0) - Tested on PlayBook + $this->match('Playbook.*Tablet') || + + // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0) + ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) || + // Palm WebOS 3.0 - Tested on HP TouchPad + $this->match('hp.*TouchPad') || + + // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices + ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) || + + // Chrome for Android - Tested on Android 4.0, 4.1 device + ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) || + + // Skyfire 4.1 - Tested on Android 2.3 device + ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Opera Mobile 11.5-12: Tested on Android 2.3 + ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) || + + // Meego 1.2 - Tested on Nokia 950 and N9 + $this->is('MeeGoOS') || + + // Tizen (pre-release) - Tested on early hardware + $this->is('Tizen') || + + // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser + // @todo: more tests here! + $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 || + + // UC Browser - Tested on Android 2.3 device + ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Kindle 3 and Fire - Tested on the built-in WebKit browser for each + ( $this->match('Kindle Fire') || + $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) || + + // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet + $this->is('AndroidOS') && $this->is('NookTablet') || + + // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7 + $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile || + + // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7 + $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile || + + // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7 + $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile || + + // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7 + $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile || + + // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7 + $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile + ){ + return self::MOBILE_GRADE_A; + } + + if ( + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 || + + // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770 + $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 || + + //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3 + ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 && + ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) || + + // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1) + $this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') || + + // @todo: report this (tested on Nokia N71) + $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS') + ){ + return self::MOBILE_GRADE_B; + } + + if ( + // Blackberry 4.x - Tested on the Curve 8330 + $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 || + // Windows Mobile - Tested on the HTC Leo (WinMo 5.2) + $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 || + + // Tested on original iPhone (3.1), iPhone 3 (3.2) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 || + + // Internet Explorer 7 and older - Tested on Windows XP + $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile + ){ + return self::MOBILE_GRADE_C; + } + + // All older smartphone platforms and featurephones - Any device that doesn't support media queries + // will receive the basic, C grade experience. + return self::MOBILE_GRADE_C; + } +} diff --git a/2_services/1_metaverse/nodam/application/libraries/common/index.html b/2_services/1_metaverse/nodam/application/libraries/common/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/common/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/libraries/index.html b/2_services/1_metaverse/nodam/application/libraries/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/libraries/public/index.html b/2_services/1_metaverse/nodam/application/libraries/public/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/libraries/public/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/third_party/index.html b/2_services/1_metaverse/nodam/application/third_party/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/index.html b/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/ion_auth.php b/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/ion_auth.php new file mode 100644 index 0000000..fef255d --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/config/ion_auth.php @@ -0,0 +1,186 @@ +ion_auth->is_max_login_attempts_exceeded(). + | The controller should check this function and act + | appropriately. If this variable set to 0, there is no maximum. + */ +$config['site_title'] = "Example.com"; // Site Title, example.com +$config['admin_email'] = "admin@example.com"; // Admin Email, admin@example.com +$config['default_group'] = 'members'; // Default group, use name +$config['admin_group'] = 'admin'; // Default administrators group, use name +$config['identity'] = 'email'; // You can use any unique column in your table as identity column. The values in this column, alongside password, will be used for login purposes +$config['min_password_length'] = 8; // Minimum Required Length of Password +$config['max_password_length'] = 20; // Maximum Allowed Length of Password +$config['email_activation'] = FALSE; // Email Activation for registration +$config['manual_activation'] = FALSE; // Manual Activation for registration +$config['remember_users'] = TRUE; // Allow users to be remembered and enable auto-login +$config['user_expire'] = 86500; // How long to remember the user (seconds). Set to zero for no expiration +$config['user_extend_on_login'] = FALSE; // Extend the users cookies every time they auto-login +$config['track_login_attempts'] = TRUE; // Track the number of failed login attempts for each user or ip. +$config['track_login_ip_address'] = TRUE; // Track login attempts by IP Address, if FALSE will track based on identity. (Default: TRUE) +$config['maximum_login_attempts'] = 3; // The maximum number of failed login attempts. +$config['lockout_time'] = 600; /* The number of seconds to lockout an account due to exceeded attempts + You should not use a value below 60 (1 minute) */ +$config['forgot_password_expiration'] = 0; // The number of seconds after which a forgot password request will expire. If set to 0, forgot password requests will not expire. +$config['recheck_timer'] = 0; /* The number of seconds after which the session is checked again against database to see if the user still exists and is active. + Leave 0 if you don't want session recheck. if you really think you need to recheck the session against database, we would + recommend a higher value, as this would affect performance */ + +/* + | ------------------------------------------------------------------------- + | Cookie options. + | ------------------------------------------------------------------------- + | remember_cookie_name Default: remember_code + | identity_cookie_name Default: identity + */ +$config['remember_cookie_name'] = 'remember_code'; +$config['identity_cookie_name'] = 'identity'; + +/* + | ------------------------------------------------------------------------- + | Email options. + | ------------------------------------------------------------------------- + | email_config: + | 'file' = Use the default CI config or use from a config file + | array = Manually set your email config settings + */ +$config['use_ci_email'] = FALSE; // Send Email using the builtin CI email class, if false it will return the code and the identity +$config['email_config'] = array( + 'mailtype' => 'html', +); + +/* + | ------------------------------------------------------------------------- + | Email templates. + | ------------------------------------------------------------------------- + | Folder where email templates are stored. + | Default: auth/ + */ +$config['email_templates'] = 'auth/email/'; + +/* + | ------------------------------------------------------------------------- + | Activate Account Email Template + | ------------------------------------------------------------------------- + | Default: activate.tpl.php + */ +$config['email_activate'] = 'activate.tpl.php'; + +/* + | ------------------------------------------------------------------------- + | Forgot Password Email Template + | ------------------------------------------------------------------------- + | Default: forgot_password.tpl.php + */ +$config['email_forgot_password'] = 'forgot_password.tpl.php'; + +/* + | ------------------------------------------------------------------------- + | Forgot Password Complete Email Template + | ------------------------------------------------------------------------- + | Default: new_password.tpl.php + */ +$config['email_forgot_password_complete'] = 'new_password.tpl.php'; + +/* + | ------------------------------------------------------------------------- + | Salt options + | ------------------------------------------------------------------------- + | salt_length Default: 22 + | + | store_salt: Should the salt be stored in the database? + | This will change your password encryption algorithm, + | default password, 'password', changes to + | fbaa5e216d163a02ae630ab1a43372635dd374c0 with default salt. + */ +$config['salt_length'] = 22; +$config['store_salt'] = FALSE; + +/* + | ------------------------------------------------------------------------- + | Message Delimiters. + | ------------------------------------------------------------------------- + */ +$config['delimiters_source'] = 'config'; // "config" = use the settings defined here, "form_validation" = use the settings defined in CI's form validation library +$config['message_start_delimiter'] = '

    '; // Message start delimiter +$config['message_end_delimiter'] = '

    '; // Message end delimiter +$config['error_start_delimiter'] = '

    '; // Error message start delimiter +$config['error_end_delimiter'] = '

    '; // Error message end delimiter diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/index.html b/2_services/1_metaverse/nodam/application/third_party/ion_auth/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Bcrypt.php b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Bcrypt.php new file mode 100644 index 0000000..c2ea95a --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Bcrypt.php @@ -0,0 +1,231 @@ + 7, 'salt_prefix' => '$2y$')) + { + + if (CRYPT_BLOWFISH != 1) + { + throw new Exception("bcrypt not supported in this installation. See http://php.net/crypt"); + } + + $this->rounds = $params['rounds']; + $this->salt_prefix = $params['salt_prefix']; + } + + /** + * @param string $input + * + * @return bool|string + */ + public function hash($input) + { + $hash = crypt($input, $this->getSalt()); + + if (strlen($hash) > 13) + { + return $hash; + } + + return FALSE; + } + + /** + * @param string $input + * @param string $existingHash + * + * @return bool + */ + public function verify($input, $existingHash) + { + $hash = crypt($input, $existingHash); + return $this->hashEquals($existingHash, $hash); + } + + /** + * Polyfill for hash_equals() + * Code mainly taken from hash_equals() compat function of CodeIgniter 3 + * + * @param string $known_string + * @param string $user_string + * + * @return bool + */ + private function hashEquals($known_string, $user_string) + { + // For CI3 or PHP >= 5.6 + if (function_exists('hash_equals')) + { + return hash_equals($known_string, $user_string); + } + + // For CI2 with PHP < 5.6 + // Code from CI3 https://github.com/bcit-ci/CodeIgniter/blob/develop/system/core/compat/hash.php + if (!is_string($known_string)) + { + trigger_error('hash_equals(): Expected known_string to be a string, ' . strtolower(gettype($known_string)) . ' given', E_USER_WARNING); + return FALSE; + } + else if (!is_string($user_string)) + { + trigger_error('hash_equals(): Expected user_string to be a string, ' . strtolower(gettype($user_string)) . ' given', E_USER_WARNING); + return FALSE; + } + else if (($length = strlen($known_string)) !== strlen($user_string)) + { + return FALSE; + } + + $diff = 0; + for ($i = 0; $i < $length; $i++) + { + $diff |= ord($known_string[$i]) ^ ord($user_string[$i]); + } + + return ($diff === 0); + } + + /** + * @return string + */ + private function getSalt() + { + $salt = sprintf($this->salt_prefix . '%02d$', $this->rounds); + + $bytes = $this->getRandomBytes(16); + + $salt .= $this->encodeBytes($bytes); + + return $salt; + } + + /** + * @param $count + * + * @return string + */ + private function getRandomBytes($count) + { + $bytes = ''; + + if (function_exists('openssl_random_pseudo_bytes') && + (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN')) + { + // OpenSSL slow on Win + $bytes = openssl_random_pseudo_bytes($count); + } + + if ($bytes === '' && @is_readable('/dev/urandom') && + ($hRand = @fopen('/dev/urandom', 'rb')) !== FALSE) + { + $bytes = fread($hRand, $count); + fclose($hRand); + } + + if (strlen($bytes) < $count) + { + $bytes = ''; + + if ($this->randomState === NULL) + { + $this->randomState = microtime(); + if (function_exists('getmypid')) + { + $this->randomState .= getmypid(); + } + } + + for ($i = 0; $i < $count; $i += 16) + { + $this->randomState = md5(microtime() . $this->randomState); + + if (PHP_VERSION >= '5') + { + $bytes .= md5($this->randomState, TRUE); + } + else + { + $bytes .= pack('H*', md5($this->randomState)); + } + } + + $bytes = substr($bytes, 0, $count); + } + + return $bytes; + } + + /** + * @param string $input + * + * @return string + */ + private function encodeBytes($input) + { + // The following is code from the PHP Password Hashing Framework + $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + $output = ''; + $i = 0; + do + { + $c1 = ord($input[$i++]); + $output .= $itoa64[$c1 >> 2]; + $c1 = ($c1 & 0x03) << 4; + if ($i >= 16) + { + $output .= $itoa64[$c1]; + break; + } + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 4; + $output .= $itoa64[$c1]; + $c1 = ($c2 & 0x0f) << 2; + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 6; + $output .= $itoa64[$c1]; + $output .= $itoa64[$c2 & 0x3f]; + } while (1); + + return $output; + } +} diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Ion_auth.php b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Ion_auth.php new file mode 100644 index 0000000..7a1c260 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/Ion_auth.php @@ -0,0 +1,563 @@ +config->load('ion_auth', TRUE); + $this->load->library(array('email')); + $this->lang->load('ion_auth'); + $this->load->helper(array('cookie', 'language','url')); + + $this->load->library('session'); + + $this->load->model('ion_auth_model'); + + $this->_cache_user_in_group =& $this->ion_auth_model->_cache_user_in_group; + + $email_config = $this->config->item('email_config', 'ion_auth'); + + if ($this->config->item('use_ci_email', 'ion_auth') && isset($email_config) && is_array($email_config)) + { + $this->email->initialize($email_config); + } + + $this->ion_auth_model->trigger_events('library_constructor'); + } + + /** + * __call + * + * Acts as a simple way to call model methods without loads of stupid alias' + * + * @param string $method + * @param array $arguments + * + * @return mixed + * @throws Exception + */ + public function __call($method, $arguments) + { + if (!method_exists( $this->ion_auth_model, $method) ) + { + throw new Exception('Undefined method Ion_auth::' . $method . '() called'); + } + if($method == 'create_user') + { + return call_user_func_array(array($this, 'register'), $arguments); + } + if($method=='update_user') + { + return call_user_func_array(array($this, 'update'), $arguments); + } + return call_user_func_array( array($this->ion_auth_model, $method), $arguments); + } + + /** + * __get + * + * Enables the use of CI super-global without having to define an extra variable. + * + * I can't remember where I first saw this, so thank you if you are the original author. -Militis + * + * @param string $var + * + * @return mixed + */ + public function __get($var) + { + return get_instance()->$var; + } + + /** + * Forgotten password feature + * + * @param string $identity + * + * @return array|bool + * @author Mathew + */ + public function forgotten_password($identity) + { + if ($this->ion_auth_model->forgotten_password($identity)) + { + // Get user information + $identifier = $this->ion_auth_model->identity_column; // use model identity column, so it can be overridden in a controller + $user = $this->where($identifier, $identity)->where('active', 1)->users()->row(); + + if ($user) + { + $data = array( + 'identity' => $user->{$this->config->item('identity', 'ion_auth')}, + 'forgotten_password_code' => $user->forgotten_password_code + ); + + if (!$this->config->item('use_ci_email', 'ion_auth')) + { + $this->set_message('forgot_password_successful'); + return $data; + } + else + { + $message = $this->load->view($this->config->item('email_templates', 'ion_auth') . $this->config->item('email_forgot_password', 'ion_auth'), $data, TRUE); + $this->email->clear(); + $this->email->from($this->config->item('admin_email', 'ion_auth'), $this->config->item('site_title', 'ion_auth')); + $this->email->to($user->email); + $this->email->subject($this->config->item('site_title', 'ion_auth') . ' - ' . $this->lang->line('email_forgotten_password_subject')); + $this->email->message($message); + + if ($this->email->send()) + { + $this->set_message('forgot_password_successful'); + return TRUE; + } + else + { + $this->set_error('forgot_password_unsuccessful'); + return FALSE; + } + } + } + else + { + $this->set_error('forgot_password_unsuccessful'); + return FALSE; + } + } + else + { + $this->set_error('forgot_password_unsuccessful'); + return FALSE; + } + } + + /** + * forgotten_password_complete + * + * @param string $code + * + * @return array|bool + * @author Mathew + */ + public function forgotten_password_complete($code) + { + $this->ion_auth_model->trigger_events('pre_password_change'); + + $identity = $this->config->item('identity', 'ion_auth'); + $profile = $this->where('forgotten_password_code', $code)->users()->row(); // pass the code to profile + + if (!$profile) + { + $this->ion_auth_model->trigger_events(array('post_password_change', 'password_change_unsuccessful')); + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + + $new_password = $this->ion_auth_model->forgotten_password_complete($code, $profile->salt); + + if ($new_password) + { + $data = array( + 'identity' => $profile->{$identity}, + 'new_password' => $new_password + ); + if(!$this->config->item('use_ci_email', 'ion_auth')) + { + $this->set_message('password_change_successful'); + $this->ion_auth_model->trigger_events(array('post_password_change', 'password_change_successful')); + return $data; + } + else + { + $message = $this->load->view($this->config->item('email_templates', 'ion_auth').$this->config->item('email_forgot_password_complete', 'ion_auth'), $data, true); + + $this->email->clear(); + $this->email->from($this->config->item('admin_email', 'ion_auth'), $this->config->item('site_title', 'ion_auth')); + $this->email->to($profile->email); + $this->email->subject($this->config->item('site_title', 'ion_auth') . ' - ' . $this->lang->line('email_new_password_subject')); + $this->email->message($message); + + if ($this->email->send()) + { + $this->set_message('password_change_successful'); + $this->ion_auth_model->trigger_events(array('post_password_change', 'password_change_successful')); + return TRUE; + } + else + { + $this->set_error('password_change_unsuccessful'); + $this->ion_auth_model->trigger_events(array('post_password_change', 'password_change_unsuccessful')); + return FALSE; + } + + } + } + + $this->ion_auth_model->trigger_events(array('post_password_change', 'password_change_unsuccessful')); + return FALSE; + } + + /** + * forgotten_password_check + * + * @param string $code + * + * @return object|bool + * @author Michael + */ + public function forgotten_password_check($code) + { + $profile = $this->where('forgotten_password_code', $code)->users()->row(); // pass the code to profile + + if (!is_object($profile)) + { + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + else + { + if ($this->config->item('forgot_password_expiration', 'ion_auth') > 0) + { + //Make sure it isn't expired + $expiration = $this->config->item('forgot_password_expiration', 'ion_auth'); + if (time() - $profile->forgotten_password_time > $expiration) + { + //it has expired + $this->ion_auth_model->clear_forgotten_password_code($code); + $this->set_error('password_change_unsuccessful'); + return FALSE; + } + } + return $profile; + } + } + + /** + * register + * + * @param string $identity + * @param string $password + * @param string $email + * @param array $additional_data + * @param array $group_ids + * + * @return int|array|bool The new user's ID if e-mail activation is disabled or Ion-Auth e-mail activation was + * completed; or an array of activation details if CI e-mail validation is enabled; or FALSE + * if the operation failed. + * @author Mathew + */ + public function register($identity, $password, $email, $additional_data = array(), $group_ids = array()) + { + $this->ion_auth_model->trigger_events('pre_account_creation'); + + $email_activation = $this->config->item('email_activation', 'ion_auth'); + + $id = $this->ion_auth_model->register($identity, $password, $email, $additional_data, $group_ids); + + if (!$email_activation) + { + if ($id !== FALSE) + { + $this->set_message('account_creation_successful'); + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_successful')); + return $id; + } + else + { + $this->set_error('account_creation_unsuccessful'); + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_unsuccessful')); + return FALSE; + } + } + else + { + if (!$id) + { + $this->set_error('account_creation_unsuccessful'); + return FALSE; + } + + // deactivate so the user much follow the activation flow + $deactivate = $this->ion_auth_model->deactivate($id); + + // the deactivate method call adds a message, here we need to clear that + $this->ion_auth_model->clear_messages(); + + + if (!$deactivate) + { + $this->set_error('deactivate_unsuccessful'); + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_unsuccessful')); + return FALSE; + } + + $activation_code = $this->ion_auth_model->activation_code; + $identity = $this->config->item('identity', 'ion_auth'); + $user = $this->ion_auth_model->user($id)->row(); + + $data = array( + 'identity' => $user->{$identity}, + 'id' => $user->id, + 'email' => $email, + 'activation' => $activation_code, + ); + if(!$this->config->item('use_ci_email', 'ion_auth')) + { + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_successful', 'activation_email_successful')); + $this->set_message('activation_email_successful'); + return $data; + } + else + { + $message = $this->load->view($this->config->item('email_templates', 'ion_auth').$this->config->item('email_activate', 'ion_auth'), $data, true); + + $this->email->clear(); + $this->email->from($this->config->item('admin_email', 'ion_auth'), $this->config->item('site_title', 'ion_auth')); + $this->email->to($email); + $this->email->subject($this->config->item('site_title', 'ion_auth') . ' - ' . $this->lang->line('email_activation_subject')); + $this->email->message($message); + + if ($this->email->send() === TRUE) + { + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_successful', 'activation_email_successful')); + $this->set_message('activation_email_successful'); + return $id; + } + + } + + $this->ion_auth_model->trigger_events(array('post_account_creation', 'post_account_creation_unsuccessful', 'activation_email_unsuccessful')); + $this->set_error('activation_email_unsuccessful'); + return FALSE; + } + } + + /** + * Logout + * + * @return true + * @author Mathew + **/ + public function logout() + { + $this->ion_auth_model->trigger_events('logout'); + + $identity = $this->config->item('identity', 'ion_auth'); + + if (substr(CI_VERSION, 0, 1) == '2') + { + $this->session->unset_userdata(array($identity => '', 'id' => '', 'user_id' => '')); + } + else + { + $this->session->unset_userdata(array($identity, 'id', 'user_id')); + } + + // delete the remember me cookies if they exist + if (get_cookie($this->config->item('identity_cookie_name', 'ion_auth'))) + { + delete_cookie($this->config->item('identity_cookie_name', 'ion_auth')); + } + if (get_cookie($this->config->item('remember_cookie_name', 'ion_auth'))) + { + delete_cookie($this->config->item('remember_cookie_name', 'ion_auth')); + } + + // Destroy the session + $this->session->sess_destroy(); + + //Recreate the session + if (substr(CI_VERSION, 0, 1) == '2') + { + $this->session->sess_create(); + } + else + { + if (version_compare(PHP_VERSION, '7.0.0') >= 0) + { + session_start(); + } + $this->session->sess_regenerate(TRUE); + } + + $this->set_message('logout_successful'); + return TRUE; + } + + /** + * Auto logs-in the user if they are remembered + * @return bool Whether the user is logged in + * @author Mathew + **/ + public function logged_in() + { + /* + $this->ion_auth_model->trigger_events('logged_in'); + + $recheck = $this->ion_auth_model->recheck_session(); + + // auto-login the user if they are remembered + if (!$recheck && get_cookie($this->config->item('identity_cookie_name', 'ion_auth')) && get_cookie($this->config->item('remember_cookie_name', 'ion_auth'))) + { + $recheck = $this->ion_auth_model->login_remembered_user(); + } + + return $recheck; + */ + if($this->session->userdata('id') == 'admin@admin.com'){ + return TRUE; + }else{ + return FALSE; + } + } + + /** + * @return int|null The user's ID from the session user data or NULL if not found + * @author jrmadsen67 + **/ + public function get_user_id() + { + $user_id = $this->session->userdata('user_id'); + if (!empty($user_id)) + { + return $user_id; + } + return NULL; + } + + /** + * @param int|string|bool $id + * + * @return bool Whether the user is an administrator + * @author Ben Edmunds + */ + public function is_admin($id = FALSE) + { + //$this->ion_auth_model->trigger_events('is_admin'); + + //$admin_group = $this->config->item('admin_group', 'ion_auth'); + + //return $this->in_group($admin_group, $id); + if($this->session->userdata('id') == 'admin@admin.com'){ + return TRUE; + }else{ + return FALSE; + } + } + + /** + * @param int|string|array $check_group group(s) to check + * @param int|string|bool $id user id + * @param bool $check_all check if all groups is present, or any of the groups + * + * @return bool Whether the/all user(s) with the given ID(s) is/are in the given group + * @author Phil Sturgeon + **/ + public function in_group($check_group, $id = FALSE, $check_all = FALSE) + { + $this->ion_auth_model->trigger_events('in_group'); + + $id || $id = $this->session->userdata('user_id'); + + if (!is_array($check_group)) + { + $check_group = array($check_group); + } + + if (isset($this->_cache_user_in_group[$id])) + { + $groups_array = $this->_cache_user_in_group[$id]; + } + else + { + $users_groups = $this->ion_auth_model->get_users_groups($id)->result(); + $groups_array = array(); + foreach ($users_groups as $group) + { + $groups_array[$group->id] = $group->name; + } + $this->_cache_user_in_group[$id] = $groups_array; + } + foreach ($check_group as $key => $value) + { + $groups = (is_string($value)) ? $groups_array : array_keys($groups_array); + + /** + * if !all (default), in_array + * if all, !in_array + */ + if (in_array($value, $groups) xor $check_all) + { + /** + * if !all (default), true + * if all, false + */ + return !$check_all; + } + } + + /** + * if !all (default), false + * if all, true + */ + return $check_all; + } + +} diff --git a/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/index.html b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/third_party/ion_auth/libraries/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/control_sidebar.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/control_sidebar.php new file mode 100644 index 0000000..e18fe88 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/control_sidebar.php @@ -0,0 +1,72 @@ + + + + +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/footer.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/footer.php new file mode 100644 index 0000000..ca597dc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/footer.php @@ -0,0 +1,35 @@ + + +
    + + © Blossom, Inc. . +
    + + + + + + + + +router->fetch_class() == 'users' && ($this->router->fetch_method() == 'create' OR $this->router->fetch_method() == 'edit')): ?> + + +router->fetch_class() == 'groups' && ($this->router->fetch_method() == 'create' OR $this->router->fetch_method() == 'edit')): ?> + + + + + + + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/header.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/header.php new file mode 100644 index 0000000..daa2728 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/header.php @@ -0,0 +1,60 @@ + + + + + + <?php echo $title; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +router->fetch_class() == 'groups' && ($this->router->fetch_method() == 'create' OR $this->router->fetch_method() == 'edit')): ?> + + + + + + + + + + +
    + +
    + diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/index.html b/2_services/1_metaverse/nodam/application/views/admin/_templates/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/main_header.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/main_header.php new file mode 100644 index 0000000..3519471 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/main_header.php @@ -0,0 +1,111 @@ + +
    + + + +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/main_sidebar.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/main_sidebar.php new file mode 100644 index 0000000..4791df8 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/main_sidebar.php @@ -0,0 +1,74 @@ + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/_templates/template.php b/2_services/1_metaverse/nodam/application/views/admin/_templates/template.php new file mode 100644 index 0000000..cfb1acf --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/_templates/template.php @@ -0,0 +1,38 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/dashboard/index.php b/2_services/1_metaverse/nodam/application/views/admin/dashboard/index.php new file mode 100644 index 0000000..e1e1584 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/dashboard/index.php @@ -0,0 +1,224 @@ + +
    +
    + + +
    +
    +
    + +
    +
    + + + +
    + USERS IN PARK +
    +
    +
    +
    +
    +
    +
    + + + +
    + CHAT +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + + +
    + MAP +
    + 시청각실 +
    +
    +
    +
    + 실험실 +
    +
    +
    +
    +
    +
    +
    + + + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/database/index.html b/2_services/1_metaverse/nodam/application/views/admin/database/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/database/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/database/index.php b/2_services/1_metaverse/nodam/application/views/admin/database/index.php new file mode 100644 index 0000000..916e190 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/database/index.php @@ -0,0 +1,74 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    xxx

    +
    +
    + +

    Platform

    + + +

    Version

    + + + + +

    List Tables

    + + + + + + + + + + + + + + + + +db->field_data($db) as $field):?> + + + + + + + + + + + +
     nametypemax_lengthprimary_key
     
     name; ?>type; ?>max_length; ?>primary_key; ?>
    + + + + + + + + + + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/files/index.html b/2_services/1_metaverse/nodam/application/views/admin/files/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/files/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/files/index.php b/2_services/1_metaverse/nodam/application/views/admin/files/index.php new file mode 100644 index 0000000..a3c2025 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/files/index.php @@ -0,0 +1,33 @@ + + +
    +
    + + +
    + +
    +
    +
    + + + + + + + + +

    + + + + + + +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/files/upload.php b/2_services/1_metaverse/nodam/application/views/admin/files/upload.php new file mode 100644 index 0000000..0dc1e53 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/files/upload.php @@ -0,0 +1,31 @@ + + +
    +
    + + +
    + +
    +
    +
    + + +
      + $value):?> +
    • :
    • + +
    + +

    + + + + +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/fwords/index.html b/2_services/1_metaverse/nodam/application/views/admin/fwords/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/fwords/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/fwords/index.php b/2_services/1_metaverse/nodam/application/views/admin/fwords/index.php new file mode 100644 index 0000000..81e9482 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/fwords/index.php @@ -0,0 +1,176 @@ + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + +
    금지어상태상태 변경
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/groups/create.php b/2_services/1_metaverse/nodam/application/views/admin/groups/create.php new file mode 100644 index 0000000..d602e71 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/groups/create.php @@ -0,0 +1,50 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    +
    +
    + + + 'form-horizontal', 'id' => 'form-create_group')); ?> +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    +
    +
    + 'submit', 'class' => 'btn btn-primary btn-flat', 'content' => lang('actions_submit'))); ?> + 'reset', 'class' => 'btn btn-warning btn-flat', 'content' => lang('actions_reset'))); ?> + 'btn btn-default btn-flat')); ?> +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/groups/delete.php b/2_services/1_metaverse/nodam/application/views/admin/groups/delete.php new file mode 100644 index 0000000..e4328f7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/groups/delete.php @@ -0,0 +1,5 @@ + + +

    Groups - Delete

    diff --git a/2_services/1_metaverse/nodam/application/views/admin/groups/edit.php b/2_services/1_metaverse/nodam/application/views/admin/groups/edit.php new file mode 100644 index 0000000..20a348a --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/groups/edit.php @@ -0,0 +1,57 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    +
    +
    + + + 'form-horizontal', 'id' => 'form-edit_group')); ?> +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    +
    +
    + 'submit', 'class' => 'btn btn-primary btn-flat', 'content' => lang('actions_submit'))); ?> + 'reset', 'class' => 'btn btn-warning btn-flat', 'content' => lang('actions_reset'))); ?> + 'btn btn-default btn-flat')); ?> +
    +
    +
    + +
    +
    +
    +
    +
    +
    + diff --git a/2_services/1_metaverse/nodam/application/views/admin/groups/index.html b/2_services/1_metaverse/nodam/application/views/admin/groups/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/groups/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/groups/index.php b/2_services/1_metaverse/nodam/application/views/admin/groups/index.php new file mode 100644 index 0000000..c6d7f9a --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/groups/index.php @@ -0,0 +1,45 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    '. lang('groups_create'), array('class' => 'btn btn-block btn-primary btn-flat')); ?>

    +
    +
    + + + + + + + + + + + + + + + + + + + +
    name, ENT_QUOTES, 'UTF-8'); ?>description, ENT_QUOTES, 'UTF-8'); ?>id, lang('actions_edit')); ?>
    +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/index.html b/2_services/1_metaverse/nodam/application/views/admin/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/license/index.html b/2_services/1_metaverse/nodam/application/views/admin/license/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/license/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/license/index.php b/2_services/1_metaverse/nodam/application/views/admin/license/index.php new file mode 100644 index 0000000..ba471e0 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/license/index.php @@ -0,0 +1,153 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    domProjects, Inc.

    +
    +
    + +
    +
    + From +
    + domProjects, Inc.
    + 29 rue Pasteur
    + 91380 Chilly-Mazarin
    + France
    + Email: contact@domprojects.com +
    +
    +
    + To +
    + John Doe
    + 10 rue de Cambrais
    + 75010 Paris
    + France
    + Email: john.doe@example.com +
    +
    +
    +

    + Order ID: 4F3S8J
    + Payment Due: 2/22/2014
    + Account: 968-34567 +

    + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    QtyProductSerial #DescriptionSubtotal
    1CodeIgniter100-000-301Framework$0.00
    1Bootstrap110-000-335Framework$0.00
    1jQuery120-000-214Framework$0.00
    1AdminLTE130-000-203Framework$0.00
    +
    +
    + +
    +
    +

    Payment Methods:

    + + + + + + +

    + Etsy doostang zoodles disqus groupon greplin oooj voxy zoodles, weebly ning heekya handango imeem plugg dopplr jibjab, movity jajah plickers sifteo edmodo ifttt zimbra. +

    +
    +
    +

    Amount Due 2/22/2014

    +
    + + + + + + + + + + + + + + + + + + + +
    Subtotal:$0.00
    Tax (19.6%)$0.00
    Shipping:$0.00
    Total:$0.00
    +
    +
    +
    + +
    +
    + Print + + +
    +
    + +
    +
    +
    +
    + +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/medias/index.html b/2_services/1_metaverse/nodam/application/views/admin/medias/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/medias/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/medias/index.php b/2_services/1_metaverse/nodam/application/views/admin/medias/index.php new file mode 100644 index 0000000..406cf57 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/medias/index.php @@ -0,0 +1,146 @@ + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    인덱스미션종류경로상세
    index ?>level ?>type == 0 ? '영상' : ($media->type == 1 ? '소리' : '그림')) ?>path ?>index.'\',\''.$media->type.'\',\''.$media->path.'\',\''.$media->level.'\')" class="btn btn-xs btn-default">확인' ?>
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/pictures/index.html b/2_services/1_metaverse/nodam/application/views/admin/pictures/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/pictures/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/pictures/index.php b/2_services/1_metaverse/nodam/application/views/admin/pictures/index.php new file mode 100644 index 0000000..4c604c6 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/pictures/index.php @@ -0,0 +1,64 @@ + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    순서아이디이름스크린샷
    index ?>id ?>name ?>
    +
    +
    +
    +
    +
    +
    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/prefs/index.html b/2_services/1_metaverse/nodam/application/views/admin/prefs/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/prefs/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/prefs/index.php b/2_services/1_metaverse/nodam/application/views/admin/prefs/index.php new file mode 100644 index 0000000..1d52775 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/prefs/index.php @@ -0,0 +1,21 @@ + + + +
    +
    + + +
    + +
    +
    +
    + + + +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/admin.php b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/admin.php new file mode 100644 index 0000000..746af70 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/admin.php @@ -0,0 +1,129 @@ + + +
    +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/index.html b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/public.php b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/public.php new file mode 100644 index 0000000..e19c530 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/prefs/interfaces/public.php @@ -0,0 +1,53 @@ + + +
    +
    + + +
    + +
    +
    +
    + +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/questions/index.html b/2_services/1_metaverse/nodam/application/views/admin/questions/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/questions/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/questions/index.php b/2_services/1_metaverse/nodam/application/views/admin/questions/index.php new file mode 100644 index 0000000..b86c31e --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/questions/index.php @@ -0,0 +1,319 @@ + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    인덱스미션문제상태상세
    index ?>level ?>question ?>is_active == 1 ? '' : ''?>uid.'\', \''.$question->level.'\', \''.$question->question.'\', \''.(json_decode($question->answers)[0]->a).'\', \''.(json_decode($question->answers)[0]->c).'\', \''.(json_decode($question->answers)[1]->a).'\', \''.(json_decode($question->answers)[1]->c).'\', \''.(json_decode($question->answers)[2]->a).'\', \''.(json_decode($question->answers)[2]->c).'\', \''.$question->explain.'\', \''.$question->is_active.'\')" class="btn btn-xs btn-default">확인' ?>
    +
    +
    +
    +
    +
    +
    + + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/resources/index.html b/2_services/1_metaverse/nodam/application/views/admin/resources/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/resources/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/resources/index.php b/2_services/1_metaverse/nodam/application/views/admin/resources/index.php new file mode 100644 index 0000000..5ad5d07 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/resources/index.php @@ -0,0 +1,28 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    Default Box Example

    +
    +
    + + + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.html b/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.php b/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.php new file mode 100644 index 0000000..6946929 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/survey_results/index.php @@ -0,0 +1,133 @@ + +
    +
    + + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    인덱스아이디이름총점상세
    index ?>id ?>name ?>amount ?>index.'\',\''.$survey->id.'\',\''.$survey->name.'\',\''.$survey->amount.'\')" class="btn btn-xs btn-default">확인' ?>
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/surveys/index.html b/2_services/1_metaverse/nodam/application/views/admin/surveys/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/surveys/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/surveys/index.php b/2_services/1_metaverse/nodam/application/views/admin/surveys/index.php new file mode 100644 index 0000000..530e4d8 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/surveys/index.php @@ -0,0 +1,272 @@ + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    인덱스설문상태상세
    index ?>question ?>is_active == 1 ? '' : '' ?>uid.'\', \''.$question->question.'\', \''.$question->is_active.'\')" class="btn btn-xs btn-default">확인' ?>
    +
    +
    +
    +
    +
    +
    + + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/create.php b/2_services/1_metaverse/nodam/application/views/admin/users/create.php new file mode 100644 index 0000000..c12adf9 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/create.php @@ -0,0 +1,83 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    +
    +
    + + + 'form-horizontal', 'id' => 'form-create_user')); ?> +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    +
    +
    + 'submit', 'class' => 'btn btn-primary btn-flat', 'content' => lang('actions_submit'))); ?> + 'reset', 'class' => 'btn btn-warning btn-flat', 'content' => lang('actions_reset'))); ?> + 'btn btn-default btn-flat')); ?> +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/deactivate.php b/2_services/1_metaverse/nodam/application/views/admin/users/deactivate.php new file mode 100644 index 0000000..f47a302 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/deactivate.php @@ -0,0 +1,47 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    '.$firstname.$lastname).'';?>

    +
    +
    + 'form-horizontal', 'id' => 'form-status_user')); ?> +
    +
    + + +
    +
    +
    +
    + + $id)); ?> +
    + 'submit', 'class' => 'btn btn-primary btn-flat', 'content' => lang('actions_submit'))); ?> + 'btn btn-default btn-flat')); ?> +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/delete.php b/2_services/1_metaverse/nodam/application/views/admin/users/delete.php new file mode 100644 index 0000000..e8f0046 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/delete.php @@ -0,0 +1,5 @@ + + +

    Users - Delete

    diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/edit.php b/2_services/1_metaverse/nodam/application/views/admin/users/edit.php new file mode 100644 index 0000000..94171af --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/edit.php @@ -0,0 +1,107 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    +
    +
    + + + 'form-horizontal', 'id' => 'form-edit_user')); ?> +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    +
    +
    +
    +
    + 'col-sm-2 control-label')); ?> +
    + +
    +
    + +ion_auth->is_admin()): ?> +
    + +
    + +id) { + $checked = ' checked="checked"'; + break; + } + } +?> +
    + +
    + +
    +
    + +
    +
    + id);?> + +
    + 'submit', 'class' => 'btn btn-primary btn-flat', 'content' => lang('actions_submit'))); ?> + 'reset', 'class' => 'btn btn-warning btn-flat', 'content' => lang('actions_reset'))); ?> + 'btn btn-default btn-flat')); ?> +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/index.html b/2_services/1_metaverse/nodam/application/views/admin/users/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/index.php b/2_services/1_metaverse/nodam/application/views/admin/users/index.php new file mode 100644 index 0000000..0f6528a --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/index.php @@ -0,0 +1,257 @@ + +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + index != 1){ ?> + + + + + + + + + + +
    인덱스아이디이름상태상세
    index ?>id ?>name ?>is_active == 1 ? '' : ''); +?>uid.'\', \''.$user->id.'\', \''.$user->pw.'\', \''.$user->name.'\', \''.$user->is_active.'\')" class="btn btn-xs btn-default">확인' ?>
    +
    +
    +
    +
    +
    +
    + + + + diff --git a/2_services/1_metaverse/nodam/application/views/admin/users/profile.php b/2_services/1_metaverse/nodam/application/views/admin/users/profile.php new file mode 100644 index 0000000..751ab87 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/admin/users/profile.php @@ -0,0 +1,93 @@ + + +
    +
    + + +
    + +
    +
    +
    +
    +
    +

    xxxx

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ip_address; ?>
    first_name, ENT_QUOTES, 'UTF-8'); ?>
    last_name, ENT_QUOTES, 'UTF-8'); ?>
    username, ENT_QUOTES, 'UTF-8'); ?>
    email, ENT_QUOTES, 'UTF-8'); ?>
    created_on); ?>
    last_login)) ? date('d-m-Y', $user->last_login) : NULL; ?>
    active) ? ''.lang('users_active').'' : ''.lang('users_inactive').''; ?>
    company, ENT_QUOTES, 'UTF-8'); ?>
    phone; ?>
    +groups as $group):?> + + bgcolor.'">'.htmlspecialchars($group->name, ENT_QUOTES, 'UTF-8').''; ?> + '.htmlspecialchars($group->name, ENT_QUOTES, 'UTF-8').''; ?> + +
    +
    +
    +
    + +
    +
    +
    +

    xxxx

    +
    +
    + + +
    +
    +
    +
    +
    +
    diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/change_password.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/change_password.php new file mode 100644 index 0000000..f8ce60b --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/change_password.php @@ -0,0 +1,25 @@ +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + + +

    + + diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/create_group.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/create_group.php new file mode 100644 index 0000000..86b07e9 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/create_group.php @@ -0,0 +1,20 @@ +

    +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/create_user.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/create_user.php new file mode 100644 index 0000000..2e043f2 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/create_user.php @@ -0,0 +1,46 @@ +

    +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + + +

    + + diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/deactivate_user.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/deactivate_user.php new file mode 100644 index 0000000..85e9c36 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/deactivate_user.php @@ -0,0 +1,18 @@ +

    +

    username);?>

    + +id);?> + +

    + + + + +

    + + + $user->id)); ?> + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_group.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_group.php new file mode 100644 index 0000000..080dad7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_group.php @@ -0,0 +1,20 @@ +

    +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_user.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_user.php new file mode 100644 index 0000000..46e4190 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/edit_user.php @@ -0,0 +1,66 @@ +

    +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + +

    +
    + +

    + + ion_auth->is_admin()): ?> + +

    + + + + + + + id);?> + + +

    + + diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/email/activate.tpl.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/activate.tpl.php new file mode 100644 index 0000000..e2436cf --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/activate.tpl.php @@ -0,0 +1,6 @@ + + +

    +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/email/forgot_password.tpl.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/forgot_password.tpl.php new file mode 100644 index 0000000..2cc5b02 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/forgot_password.tpl.php @@ -0,0 +1,6 @@ + + +

    +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/email/index.html b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/email/new_password.tpl.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/new_password.tpl.php new file mode 100644 index 0000000..f223986 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/email/new_password.tpl.php @@ -0,0 +1,7 @@ + + +

    + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/forgot_password.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/forgot_password.php new file mode 100644 index 0000000..e9a42e7 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/forgot_password.php @@ -0,0 +1,15 @@ +

    +

    + +
    + + + +

    +
    + +

    + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/index.html b/2_services/1_metaverse/nodam/application/views/auth/_Original/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/index.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/index.php new file mode 100644 index 0000000..d957644 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/index.php @@ -0,0 +1,31 @@ +

    +

    + +
    + + + + + + + + + + + + + + + + + + + + +
    first_name,ENT_QUOTES,'UTF-8');?>last_name,ENT_QUOTES,'UTF-8');?>email,ENT_QUOTES,'UTF-8');?> + groups as $group):?> + id, htmlspecialchars($group->name,ENT_QUOTES,'UTF-8')) ;?>
    + +
    active) ? anchor("auth/deactivate/".$user->id, lang('index_active_link')) : anchor("auth/activate/". $user->id, lang('index_inactive_link'));?>id, 'Edit') ;?>
    + +

    |

    \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/login.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/login.php new file mode 100644 index 0000000..58ff16d --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/login.php @@ -0,0 +1,28 @@ +

    +

    + +
    + + + +

    + + +

    + +

    + + +

    + +

    + + +

    + + +

    + + + +

    \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_Original/reset_password.php b/2_services/1_metaverse/nodam/application/views/auth/_Original/reset_password.php new file mode 100644 index 0000000..7101704 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_Original/reset_password.php @@ -0,0 +1,22 @@ +

    + +
    + + + +

    +
    + +

    + +

    +
    + +

    + + + + +

    + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_templates/footer.php b/2_services/1_metaverse/nodam/application/views/auth/_templates/footer.php new file mode 100644 index 0000000..0860782 --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_templates/footer.php @@ -0,0 +1,20 @@ + +
    + + + + + + + \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/application/views/auth/_templates/header.php b/2_services/1_metaverse/nodam/application/views/auth/_templates/header.php new file mode 100644 index 0000000..782b30e --- /dev/null +++ b/2_services/1_metaverse/nodam/application/views/auth/_templates/header.php @@ -0,0 +1,32 @@ + + + + + + <?php echo $title; ?> + + + + + + + + + + + + + + + + + + ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/2_services/1_metaverse/nodam/assets/frameworks/bootstrap/js/index.html b/2_services/1_metaverse/nodam/assets/frameworks/bootstrap/js/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/bootstrap/js/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/dp.min.css b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/dp.min.css new file mode 100644 index 0000000..139597f --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/dp.min.css @@ -0,0 +1,2 @@ + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/index.html b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/css/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/domprojects/index.html b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/dp.min.js b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/dp.min.js new file mode 100644 index 0000000..4584de3 --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/dp.min.js @@ -0,0 +1,64 @@ +$(document).ready(function(){ + /* + if ($('.animsition').length) { + $('.animsition').animsition({ + inClass : 'fade-in', + outClass : 'fade-out', + inDuration : 400, + outDuration : 200, + linkElement : 'a[href]:not([target="_blank"]):not([href^="mailto\\:"]):not([href^="\\#"])', + loading : true, + loadingParentElement: 'body', + loadingClass : 'animsition-loading', + unSupportCss : ['animation-duration', '-webkit-animation-duration', '-o-animation-duration'], + overlay : false, + overlayClass : 'animsition-overlay-slide', + overlayParentElement: 'body' + }); + } + */ + + if ($('#password').length) { + var options = {}; + + options.ui = { + container: '#pwd-container', + showVerdictsInsideProgressBar: true, + viewports: { + progress: '.pwstrength_viewport_progress' + } + }; + options.common = { + debug: false, + onLoad: function() { + $('#messages').text('Start typing password'); + } + }; + + $('#password').pwstrength(options); + } + + if ($('#group_bgcolor').length) { + var elem = $('#group_bgcolor'); + + elem.ColorPickerSliders({ + size: 'lg', + placement: 'auto bottom', + previewformat: 'hex', + color: elem.attr('data-src'), + swatches: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#009688', '#FF5722', '#795548', '#607D8B', '#000000'], + customswatches: false, + order: {} + }); + + $('button[type="reset"]').on('click', function(e){ + elem.trigger('colorpickersliders.updateColor', elem.attr('data-src')); + }); + } +}); + + +$(window).load(function(){ + + +}); diff --git a/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/index.html b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/domprojects/js/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/font-awesome.min.css b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/font-awesome.min.css new file mode 100644 index 0000000..540440c --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/font-awesome.min.css @@ -0,0 +1,4 @@ +/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/index.html b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/css/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/FontAwesome.otf b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70 GIT binary patch literal 134808 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 literal 0 HcmV?d00001 diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.eot b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928 GIT binary patch literal 165742 zcmd443w)Ht)jvM-T=tf|Uz5#kH`z;W1W0z103j^*Tev7F2#5hiQ9w~aka}5_DkxP1 zRJ3Y?7YePlysh?CD|XvjdsAv#YOS?>W2@EHO9NV8h3u2x_sp}KECIB>@9+Qn{FBV{ zJTr4<=FH5QnRCvZnOu5{#2&j@Vw_3r#2?PKa|-F4dtx{Ptp0P(#$Rn88poKQO<|X@ zOW8U$o^4<&*p=|D!J9EVI}`7V*m|~_En`<8B*M-{$Q6LOSfmND1Z!lia3ffVHQ_mu zwE*t)c_Na~v9UCh+1x2p=FeL7+|;L;bTeUAHg(eEDN-*};9m=WXwJOhO^lgVEPBX5Gh_bo8QSSFY{vM^4hsD-mzHX!X?>-tpg$&tfe27?V1mUAbb} z1dVewCjIN7C5$=lXROG% zX4%HIa)VTc_%^_YE?u@}#b58a4S8RL@|2s`UUucWZ{P9NJxp5Fi!#@Xx+(mZ+kdt3 zobw#*|6)Z(BxCGw^Gi+ncRvs|a|3xz=tRA9@HDV~1eqD)`^`KTPEg`UdXhq18})-@}JTHp30^)`L{?* z;c)alkYAc@67|W!7RDPu6Tsy@xJCK8{2T9-fJw6?@=A(w^}KCVjwlOd=JTO=3Zr+< zIdd?1zo-M^76}Jf!cpLfH`+2q=}d5id5XLcPw#xVocH5RVG7;@@%R>Sxpy8{(H9JH zY1V)?J1-AIeIxKhoG1%;AWq7C50ok3DSe?!Gatbry_zpS*VoS6`$~lK9E?(!mcrm1 z^cLZ1fmx5Ds`-ethCvMtDTz zMd=G1)gR$jic|1SaTLaL-{ePJOFkUs%j634IMp}dnR5yGMtsXmA$+JDyxRuSq*)bk zt3tSN2(J<@ooh3|!(R%VsE#5%U{m-mB7fcy&h(8kC(#>yA(JCmQ6|O1<=_U=0+$AY zC)@~M`UboR6Xm2?$e8Z$r#u8)TEP0~`viw@@+){#874R?kHRP|IU4&!?+9Cy52v^I zPV4Xd{9yc;)#l?0VS#6g@ z`#y))03Laq@^6Z#Z*uvzpl{$JzFJgn&xHlNBS|Eb!E@}~Z$^m!a9k34KX zT|VETZ;B_E$Ai8J#t5#kATCAUlqbr&P~-s)k^FfWyz}iK@`B$FI6L0u1uz5fgfqgU zRBmB>F8s_qp1HWm1!aXOEbpf`U?X|>{F`8Md500U3i;Mh9Kvbd(CeuC>077ww4g^h zKgM(A48W`XEDE~N*Th^NqP#S7&^w2Vpq+df2#@A*&4u~I+>t)9&GYcop9OtUo=;2d zGSq?IMBAYZffMC1v^|Z|AWdQ38UdJS4(H(nFI<|%=>0iAn3lvcSjIR(^7r7QuQI0a zm+@Z9QXmf!efG1**%Ryq_G-AQs-mi^*WO#v+tE9_cWLjXz1Q{L-uqzh z-Vb`UBlaT|M;ecG9GQJ&>5)s1TzBO5BM%;V{K#`h4juXPkq?e&N9{)|j&>ZKeRS#3 zOOIZ6^!B3<9)0}ib4L#y{qxZe{ss8}C5PC)Atkb2XK%PS)jPMht9Na0x_5hTckhAT zOz+FRJ-xk0*b(QE(2)^GQb*<<={mCZNczb3Bi%<19LXGc`AE-^-lOcO^Jw^J>ge2~ zT}Rg*O&{HUwEO6RqnV>GAMK$M`~TX%q<>-my#5LOBmex)pWgq|V@{jX>a;k`PLtE< zG&ohK;*_0|<6n-C93MK4I*vGc9shKE;CSEhp5tA|KOBE|yyJM=@i)g?jyD~Db^OKg zhNH*vXUCr$uRH$ec+K$#$E%LtJ6>`8&T-iBTicKH)SNMZS zB8UG!{1{Y=QL&oLMgLzR(}0Y>sN0TqgG|kLqv_VcVSLD)aJ?AC^D!bLa6K5Ut1)YA zghRXq;YBrYhrzOK23vXorq6v~v*CBb?*bYw$l-3J@cY5H}8Gr;t8{e8!J}L*5e>!hOQnM3g=8eoXDiYZBlmBW?=(Qvo;ib;hP4-|5>J zo6*MD%*UW90?aI=ncV;fJZB$fY|a73<^rd=!0(I%TsLE9TH#hRHV<&~b~82~@n<2= z1-*oTQL{zWh}4H zGjX>}SbW{R;(k^VBouiebp<&Q9S1P`GIlM(uLaz7TNt~37h`FJ-B1j-jj@}iF}B$Yhy1^cv|oM`3X|20-GXwq z0QapK#%@FUZ9ik|D}cWpad#li_7EK6?wrrq4l5kOc5H@2*p5ENc6Pxb%`OEl1=q{i zU1`Sdjxcu562^8fWbEEDi1(A=o?`5)DC_=i#vVX^45ZpSrpE35`g>WA+_QYDo!1%Byk?;4A*Y^%H_McC{^)mJp(mf6Mr$1rr8Klp< z@9$&m+0Bd{OfmMH!q^XxU*>tneq@E)#@LU6-}5Nz`DYpXi4*QA#$MRP*w045^)U8x zl=XAu_Y36n%QPIqUi^r$mjH7JWgdEmv0oiv>}BNj>jtO;GSSiGr=LO--M;f3$4%-kcdA5=kp1;?w1)iU%_3WyqWQmjf@AcVZ3xc<7I~# zFHgbYU4b-}3LN4>NEZft6=17@TlH$jBZ!NjjQC2%Yu;hJu9NWwZ@DynQp=tBj8Wjw$e9<5A{>pD{iW zZqogXPX_!HxT$LypN98z;4>ox_a@^r4>R7`&G@Wh#%HG(p9^;e{AczsK5r7^^FxfE z1>DZ=f&=UVl(8@Y2be_)+!n?cUjPUAC8+bcuQI+Aab3F@Uxu=lJpt$oQq38DE=X{7U3=m6P!eKVy6&>UK5q-?WYKFCon} zcwbuv_Xy+HBi;48;XYwJy_)eGknfFvzbOHS_{~WFRt)zJ zijpU?=0x zkwe%IkXL3J<39wBKYX6?A1iQgGX8uw<3E|t_zN{~?=k)}E8{7uHGX6%I@xLJ5o5hU3g}A@9GyXR4dV3$^??m7ZGyeD0jQ;~={sZ6d0>}3fa8JQ~ z#Q6Kj>z^jLM;Px_;9g|>2lp6?Oy32JW8UD|ZH#LugXW9=mzl&9Ov2uUBsVZgS;-{zFeKKwOfnbOFe$i&Nu~HMe}YLB^Wk1(Qs^2cg^_pF zV@!&4GARo9*fb`^0bBDClWMmysSaUvuQREB7n2(BZbV*M)y$0@8CXG!nX&m5FyO}f|^_bYrq)EtQ3jEW$ z;E;a$iwt`}|2xOlf`@fNIFLzjYz@1@vMcQB;TbKpR_b1>hK{W@uw#sVI6JqW86H;C ztQ;P%k-Nf8ey^cATop^SG>2V0mP~Z;=5SL5H#}UQ-NIABSS;9=rYBEjx70^!0%|%? z6H%vBBRb1si5UK{xwWyrI#6mdl~NhlB{DFSQ4f#HYnQ4Tr9_9++!S!BCwdbtt-PhV z2|9^MD=%7f(aK494ZCcz4t6dY`X;_62ywrIPovV+sT0pH?+{mwxjh%^> zh_?T`uiv2^KX}>z4HVY!Y%V1QDcBvi>!sD@MEbj99(bg@lcBxTD9~gYzfIm>7jFFl;^hEgOD8Clhu+6jw>0z&OhJ=2DoJ42R3QaA zWOOLCseE6;o!xG!?ra~f^>o~D+1yBE?qxT0^k{Eo?@YU;MW)Dk7u-Ja^-t=jry`Nm z^!iU;|I=I9eR|&CLf`eUDtM5Q2iZ}-MO8dOpsgMv)7Ge`r77T1(I!FduCuw%>+xyh zv~lQApLDjitE7#8{D!C9^9KL8O}^S6)E?BVMw_qP`rdoia-YG@KjOf%Qh4Bnt8Mcoi9h#JRYY3kEvn*UVbReO50BrmV+ z;MZw4c4)uX7XS38vL%mZ(`R5ww4GL|?R_+gqd5vmpyBRdmy(bdo1(0=sB8@yxdn)~lxbJjigu9=)pPhNBHJ@OCr@Hfy7 zMKpelG=3bck_~6$*c^5qw$ra?cd)OqZ$smlOvLJWm7$z_{bM*t_;dW+m52!n&yhSI z0)LYKbKpO(yrBb!r(;1ei=F17uvjq5XquDp?1L{4s1~Hu@I46id3j>UeJTcx0fQ!$ z&o9RBJJn}4D52n3P@|_Z2y%SzQ!WJ22E$LC;WNiX*{T?@;Pj!}DC|#~nZ>-HpIS<2 za>P22_kUiz%sLYqOLTT7B=H>lmeZ$;kr+*xoe54)>BRz1U!muO7@@$$G=552gn*!9 zJ(lYeq-%(OX#D?e|IqRz)>flsYTDXrc#58b-%`5Jmp#FEV%&+o&w?z>k%vUF^x&@! zd}aqf<-yN_(1OoX0~BNi5+XV}sW1Mo_rky5sw&#MPqeg*Iv+ow^-qi|g!>=1)d@|( zIJ=tJ4Yw%YfhiFbenxIIR1N1mmKeveFq!eFI?k+2%4<3`YlV3hM zS45R<;g^uVtW5iZbSGet@1^}8sBUEktA@_c>)?i}IE-EQTR@N-j%b9$Syc1{S3U?8e~d3B1?Lij0H27USiF&gR}A>wG-vBGIPuh*4ry;{Khxekv}wCTm%_>vhFZSJ)Pw2iv6Q4YVoQ`J2w?yCkiavVTWeVa)j|q=T9@J0pTtcQX!VHnIM6Al- z^*7Og!1y$xN4)5fYK&2X5x-Om4A;1k20|=O+$wl^1T}IRHkcq<^P$a{C0fAii(ypB z{ef1n(U1a&g|>5}zY?N{!tOqN_uYr3yPejjJ>KeR7IW!#ztw(g!*Hj~SpH|bkC%t5kd^Q2w*f{D8tJPwQ z++kT&2yEHVY_jXXBg!P7SUbSC;y1@rj$sqoMWF2=y$%ua1S%Nn_dvGwR*;O^!Fd?1 z8#WkKL1{>+GcdW?sX2^RC#k8D;~{~1M4#fpPxGDbOWPf?oRS^(Y!}arFj}-9Ta5B$ zZhP0#34P$Fx`;w}a*AU%t?#oPQ+U$umO}+(WIxS!wnBcQuM;%yiYhbKnNwXa7LiRjmf+(2(ZG}wiz%sgWJi>jgGIsPnZ=KfX?8mJ2^L!4-hBx#UR zZa((80+3k2t!n9h@La(dm&Qrs_teRTeB}Y= zShqm6zJdPGS+juA6^_Mu3_1sz1Hvx#*|M6pnqz`jk<&F@Wt;g%i&gunm7lM5)wE@q zvbn6Q=6IU;C_@UMWs|fmylAcBqr(MowarQT7@9BsXzyH534G z1e0`Rlnqb_RAIW{M7dQoxdg$ z;&VZRA?1jrgF9nN0lg?)7VU>c#YI}iVKVtMV&I^SUL2sA9Xn2<8mY@_)qZF;^OV!$ z;QVMjZTMUtC^eDXuo)DkX75sJ*#d6g{w?U1!Fbwid(nlSiF_z zStRqVrV`8MJBg{|ZM^Kzrps2`fI(Eq&qUZ%VCjWLQn)GthGkFz0LcT(tUy)_i~PWb ze1obC@Hu0-n}r4LO@8%lp3+uoAMDWnx#|WFhG&pQo@eXSCzjp(&Xl4$kfY60LiIx^ zs+SA=sm(K<-^V>WxOdf!NXC0qN&86q?xh#r;L)>)B|KXvOuO+4*98HO?4jfcxpk`^ zU^8+npM|PWn*7Nj9O_U%@pt)^gcu2m|17^}h}J6KWCJ>t zv@Qsc2z0711@V0%PDVqW?i)a)=GC>nC+Kx~*FeS}p5iNes=&dpY_lv9^<|K`GOJMG zE5^7&yqgjFK*qz6I-su3QFo4`PbRSbk|gNIa3+>jPUVH}5I6C)+!U&5lUe4HyYIe4 z>&a$lqL(n;XP)9F?USc6ZA6!;oE+i8ksYGTfe8;xbPFg9e&VVdrRpkO9Zch#cxJH7 z%@Bt~=_%2;shO9|R5K-|zrSznwM%ZBp3!<;&S0$4H~PJ&S3PrGtf}StbLZKDF_le= z9k)|^Do10}k~3$n&#EP*_H_-3h8^ZuQ2JXaU@zY|dW@$oQAY%Z@s0V8+F~YQ=#aqp z=je#~nV5}oI1J`wLIQ^&`Mj01oDZ;O`V>BvWCRJd%56g!((T@-{aY6fa;a0Vs+v@O z0IK2dXum&DKB?-ese^F~xB8#t6TFirdTy3(-MedKc;2cI&D}ztv4^I%ThCj* ziyQ90UpuyI`FYm%sUlWqP(!Qcg-7n%dk-&uY15{cw0HD+gbuz}CQP*u8*(+KCYFiz80m1pT=kmx0(q(xrCPMsUH1k{mefDSp) zD5G^q?m1N%Jbl&_iz65-uBs{~7YjNpQ%+H^=H7i%nHnwimHSGDPZ(Z;cWG1wcZw|v z%*juq&!(bo!`O7T>Wkon^QZ-rLvkd_^z#)5Hg zxufObryg!`lzZc#{xRRv6592P5fce0Hl-xEm^*nBcP$v z0`KR64y6=xK{a*oNxW9jv+9)$I9SxN-Oig_c%UK7hZDj_WEb$BDlO#*M?@b>eU7 zxN!%UE+w#Wg$bqFfc# zeDOpwnoY)%(93rx(=q9nQKg6?XKJZrRP#oo(u>h_l6NOMld)_IF( zs6M+iRmTC+ALc}C7V>JEuRjk9o)*YO8Y}oKQNl2t?D;qFLv4U`StSyoFzFYuq>i@C zEa1!N?B0BK0gjTwsL04McVmu=$6B!!-4bi1u_j7ZpCQm-l2u7AlYMmx zH!4a*@eEhENs{b-gUMy{c*AjMjcwAWGv@lW4YQtoQvvf*jQ2wL8+EGF4rQjAc;uiEzG%4uf z9wX{X3(U5*s$>6M z)n+q=_&#l6nEa|4ez8YOb9q{(?8h1|AYN<53x+g()8?U_N+)sEV;tdoV{pJ^DTD)ZvO|;^t&(V6L2z~TSiWu zI&#bLG#NGMHVY^mJXXH_jBGA?Np1q;)EYzS3U=1VKn3aXyU}xGihu`L8($R|e#HpJ zzo`QozgXO&25>bM*l>oHk|GV&2I+U-2>)u7C$^yP7gAuth~}8}eO^2>X_8+G@2GX0 zUG8;wZgm*=I4#ww{Ufg2!~-Uu*`{`!$+eE)in1}WPMJ%i|32CjmFLR8);bg^+jrF* zW0A!Zuas6whwVl!G+Vp(ysAHq9%glv8)6>Sr8w=pzPe1s`fRb9oO^yGOQW^-OZ=5? zNNaJk+iSAxa}{PtjC&tu_+{8J_cw=JiFhMqFC!}FHB@j}@Q$b&*h-^U)Y&U$fDWad zC!K&D&RZgww6M(~`@DA92;#vDM1_`->Ss*g8*57^PdIP-=;>u#;wD4g#4|T7ZytTY zx(Q8lO+5Ris0v-@GZXC@|&A*DPrZ51ZeSyziwc>%X>dNyCAL zOSDTJAwK7d2@UOGmtsjCPM9{#I9Gbb7#z25{*;Tyl-Zho(Oh~-u(5CLQl;2ot%#Nl z_cf{VEA=LuSylKv$-{%A=U+QBv0&8bP;vDOcU|zc3n!Nu{9=5j6^6DL&6tm-J4|~) z9#1w(@m3N|G3n9Xf)O<|NO+P)+F(TgqN3E#F8`eIrDZn0=@MQ%cDBb8e*D_eBUXH+ zOtn|s5j9y2W~uaQm*j{3fV=j|wxar?@^xjmPHKMYy0eTPkG*<=QA$Wf)g`tfRlZ0v ztEyRwH(8<%&+zbQ+pg>z^Ucf8Jj>x$N*h{buawh;61^S+&ZX>H^j?#nw!}!~35^Z# zqU|=INy-tBD+E^RCJdtvC_M2+Bx*2%C6nTfGS!1b*MJvhKZZPkBfkjIFf@kLBCdo) zszai4sxmBgklbZ>Iqddc=N%2_4$qxi==t>5E!Ll+-y(NJc+^l)uMgMZH+KM<|+cUS^t~AUy&z{UpW?AA~QO;;xntfuA^Rj7SU%j)& zVs~)K>u%=e(ooP|$In{9cdb}2l?KYZinZ8o+i;N-baM#CG$-JMDcX1$y9-L(TsuaT zfPY9MCb3xN8WGxNDB@4sjvZ10JTUS1Snvy5l9QPbZJ1#AG@_xCVXxndg&0Cz99x`Z zKvV%^1YbB2L)tU+ww(e6EZYzc6gI5g;!?*}TsL=hotb0Mow8kxW*HVdXfdVep4yL` zdfTcM*7nwv5)3M-)^@ASp~`(sR`IsMgXV>xPx0&5!lR8(L&vn@?_Oi2EXy)sj?Q8S$Mm zP{=PsbQ)rJtxy*+R9EqNek1fupF(7d1z|uHBZdEQMm`l!QnDTsJ_DX2E=_R?o*D5) z4}Rh2eEvVeTQ^UXfsDXgAf@6dtaXG>!t?(&-a~B^KF@z*dl$BLVOt|yVElz!`rm5n z&%<$O{7{?+>7|f%3ctTlD}Sc0Zs_hY;YO-&eOIT+Kh%FJdM|_@8b7qIL;aj#^MhF1 z(>x4_KPKYTl+AOj0Q$t3La4&;o`HP%m8bgb`*0vs83ZT@J#{j%7e8dKm;){k%rMw* zG9eKbw_mh1PHLUB$7VNcJ=oL;nV~#W;r|rv;ISD5+Q-FH5g~=&gD`RrnNm>lGJ1GE zw`K+PW!P*uxsEyAzhLvBOEUkj>)1sV6q-RhP*nGS(JD%Z$|wijTm)a5S+oj03MzBz zPjp$XjyM!3`cFtv`8wrA`EpL(8Soof9J(X7wr2l^Y-+>){TrmrhW&h}yVPonlai>; zrF!_zz4@5^8y@95z(7+GLY@+~o<>}!RDp|@N4vi4Y-r@AF@6Q7ET8d9j~&O$3l#Yuo`voKB12v8pK*p3sJO+k{- zak5sNppfOFju-S9tC#^&UI}&^S-3TB^fmi<0$e%==MK3AqBrn!K@ZCzuah-}pRZc{ z?&7p`mEU5_{>6x=RAFr4-F+FYOMN%GSL@mvX-UT3jRI;_TJH7}l*La_ztFn+GQ3;r zNk;eb?nh&>e?Z$I<$LDON!e1tJ26yLILq`~hFYrCA|rj2uGJHxzz@8b<} z&bETBnbLPG9E*iz!<03Ld4q;C140%fzRO5j*Ql#XY*C-ELCtp24zs*#$X0ZhlF~Qj zq$4Nq9U@=qSTzHghxD(IcI0@hO0e}l7_PKLX|J5jQe+67(8W~90a!?QdAYyLs6f^$ zgAUsZ6%aIOhqZ;;;WG@EpL1!Mxhc_XD!cTY%MEAnbR^8{!>s|QGte5Y=ivx6=T9Ei zP_M&x-e`XKwm+O(fpg~P{^7QV&DZPW)$j@GX#kClVjXN6u+n=I$K0{Y-O4?f;0vgV zY+%5cgK;dNK1}{#_x-Zyaw9sN`r9jST(^5&m&8IY?IBml#h0G3e?uSWfByzKHLe8) z9oCU{cfd~u97`w2ATe{wQPagk*)FX|S+YdySpplm-DSKB*|c>@nSp$=zj{v3WyAgw zqtk_K3c5J|0pC zSpww86>3JZSitYm_b*{%7cv?=elhCFy1v6m)^n?211803vG_;TRU3WPV`g7=>ywvsW6B76c-kXXYuS7~J+@Lc zSf%7^`HIJ4D|VX9{BlBG~IV;M->JId%#U?}jR@kQ&o5A3HyYDx}6Nc^pMjj0Jeun)M=&7-NLZ9@2 z)j60}@#z8oft^qhO`qgPG;Gf4Q@Zbq!Fx_DP1GkX<}_%EF`!5fg*xCsir}$yMH#85 zT3Y4bdV)bucC=X;w24>D>XjaA@K`En^++$6E!jmvauA$rc9F%b=P&f^I7M+{{--HM z0JXFl21+}*Oz8zr@T8JQp9Td0TZ7rr0+&rWePPKdaG}l-^)$@O*ON;2pkAjf4ZSg# zy{PLo>hhTUUK_q5L{o!vKb^7AIkbXB zm3BG{rbFE>fKfZsL4iKVYubQMO_AvYWH<3F_@;7*b}ss*4!r5a-5Mr{qoVbpXW1cja+YCd!nQ3xt*CEBq_FNhDc93rhj=>>F59=AN5 zoRmKmL))oDox0VF;gltwNSdcF9cb*OX3{Gx?X{Q-krC~b9}_3yG8Bn{`W6m}6YD#q zAkEzk)zB|ZA2Ao`dW^gC77j#kXk7>zOYg~2Y0NyG9@9L)X=yRL!=`tj7; z^S=K3l)dWTz%eniebMP!Z)q@7d(l_cR;2OvPv7I~Va{X>R@4XXh- zOMOMef=}m)U?`>^E`qUO(+Ng$xKwZ1|FQ|>X41&zvAf`(9 zj3GGCzGHqa8_lMGV+Q3A(d5seacFHJ92meB0vj+?SfQ~dL#3UE!1{}wjz|HPWCEHI zW{zYTeA(UwAEq6F%|@%!oD5ebM$D`kG45gkQ6COfjjk-==^@y6=Tp0-#~0px=I@H# z7Z|LQii;EBSfjse{lo}m?iuTG`$i6*F?L9m*kGMV_JUqsuT##HNJkrNL~cklwZK&3 zgesq4oycISoHuCg>Jo;0K(3&I(n-j7+uaf)NPK7+@p8+z!=r!xa45cmV`Mna1hT=i zAkgv-=xDHofR+dHn7FZvghtoxVqmi^U=Tk5i*(?UbiEGt9|mBN4tXfwT0b zIQSzTbod84Y<){2C!IJja=k65vqPM|!xFS?-HOK!3%&6=!T(Z$<>g6+rTpioPBf57 z$!8fVo=}&Z?KB-UB4$>vfxffiJ*^StPHhnl@7Fw@3-N|6BAyp|HhmV#(r=Ll2Y3af zNJ44J*!nZfs0Z5o%Qy|_7UzOtMt~9CA*sTy5=4c0Q9mP-JJ+p-7G&*PyD$6sj+4b>6a~%2eXf~A?KRzL4v_GQ!SRxsdZi`B(7Jx*fGf@DK z&P<|o9z*F!kX>I*;y78= z>JB#p1zld#NFeK3{?&UgU*1uzsxF7qYP34!>yr;jKktE5CNZ3N_W+965o=}3S?jx3 zv`#Wqn;l-4If#|AeD6_oY2Y||U?Fss}Sa>HvkP$9_KPcb_jB*Jc;M0XIE+qhbP$U2d z&;h?{>;H=Sp?W2>Uc{rF29ML>EiCy?fyim_mQtrgMA~^uv?&@WN@gUOPn(379I}U4Vg~Qo)jwJb7e_Pg^`Gmp+s5vF{tNzJVhBQ z$VB8M@`XJsXC!-){6wetDsTY94 G*yFsbY~cLNXLP73aA74Mq6M9f^&YV`isWW zU@CY~qxP|&bnWBDi{LM9r0!uDR`&3$@xh)p^>voF;SAaZi_ozepkmLV+&hGKrp0jy9{6cAs)nGCitl6Cw2c%Z0GVz1C zH-$3>en`tRh)Z(8))4y=esC5oyjkopd;K_uLM(K16Uoowyo4@9gTv5u=A_uBd0McB zG~8g=+O1_GWtp;w*7oD;g7xT0>D9KH`rx%cs^JH~P_@+@N5^&vZtAIXZ@TH+Rb$iX zv8(8dKV^46(Z&yFGFn4hNolFPVozn;+&27G?m@2LsJe7YgGEHj?!M`nn`S-w=q$Y4 zB>(63Fnnw_J_&IJT0ztZtSecc!QccI&<3XK0KsV4VV(j@25^A-xlh_$hgq6}Ke~GZ zhiQV3X|Mlv6UKb8uXL$*D>r^GD8;;u+Pi;zrDxZzjvWE#@cNGO`q~o7B+DH$I?5#T zf_t7@)B41BzjIgI68Bcci{s-$P8pU>=kLG8SB$x;c&X=_mE3UN@*eF+YgP|eXQVn) z)pd&9U^7r1QaaX{+Wb-9S8_jQZC19~W) z*_+RuH*MPD=B_m7we#2A@YwQv$kH2gA%qk7H)?k!jWbzcHWK497Ke<$ggzW+IYI2A zFQ_A$Ae4bxFvl4XPu2-7cn1vW-EWQ6?|>Qm*6uI!JNaRLXZFc5@3r48t0~)bwpU*5 z-KNE}N45AiuXh{&18l_quuV$6w|?c-PtzqcPhY)q{d+Hc_@OkartG`dddteZXK&Je zGpYJ-+PmEUR`sOnx42*X$6KT~@9ze#J>YvvaN24jI}4QG3M;w<>~!2i@r)9lI!6N1 z0GN((xJjHUB^|#9vJgy=07qv}Kw>zE+6qQns-L}JIqLFtY3pDu_$~YrZOO$WEpF>3 zXTu#w7J9w+@)x-6oW(5`w;GI8gk@*+!5ew8iD$g=DR*n@|2*R`zxe7azdr7~Z;$%< zSH@*lQ9U(Hx^%Fb|1?Smv({(NaZW+DGsnNWwX(DFUG8)(b6Rn>MzUxlZhNbVe>`mS zl&aJjk3F~9{lT-}y>e~pI}kOf@0^%Vdj&m(iK4LTf6kmF!_0HQ$`f-eBnmdTsf$_3 zR`hz2EjKIKWL6z@jj1}us>ZmY)iQInPifzSiOFN92j9$pX*CuV8SPrD#b%Qa97~TI zS6)?BPUgFnkqG8{{HUwd)%ZsvurI~=Jr8YSkhUA!RANJ;o|D->9S9QB5DxTybH&PGFtc0Z>dLwr|Ah}aX`XwTtE&UssYSEILtNijh)8)WWjMm$uT;+p1|=L z><4lEg%APBLn+FRr&2tGd)7icqrVXFE;+3j`3p~mvsiDMU>yK$19$B@8$Dy4GClfzo4)s_o2NuM3t-WhCrXE>LQ z_CQtR*!a0mhnw#I2S=WxT_H@^Saif`)uhLNJC zq4{bSCwYBd!4>6KGH5y~WZc@7_X~RqtaSN(`jfT!KhgGR)3iN50ecR$!|?Vq8|xa+ zY#*+B=>j4;wypclu7?wd+y06`GlVf2vBXzuPA;JgpfkIa1gXG88sZ*aS`(w z_9`LL4@aT0p!4H7sWP`mwUZRKCu@UWdNi-yebkfmNN+*QU+N*lf6BAJ$FNs^SLmDz z^algGcLq`f>-uKOd_Ws4y^1_2ucQaL>xyaQjy!eVD6OQi>km;_zvHS=ZpZZrw4)}Z zPz(rC?a`hZiQV9o^s>b?f-~ljm1*4IE<3plqCV}_shIiuQl=uKB4vUx2T$RCFr0{u z1v660Y3?>kX@{19i6;*CA}pJsFpo{nculW61+66XAOBZD< z{H|h`mJS5C2;ymL##}U*MC%fL0R97OSQ@lUXQ-j?i{z{=l-!$64H{LlTLo{Ln<|OV zBWq*5LP`KJl74fC{GzzP_Z;;;6i--QpZUrtHC@+RBlt+=_3TyV4gk=4b{TBJAx!GehYbTby(&-R337 zQ%g2)Uc&K|x|eL0yR*VCXDBqZ89C(obOFYYht(k`^q0OaQ*Y{)@7xE~KQ7XN)hGlZ zl5$1<#s!tyf%>mbIG(9WR`R*{Qc_h(ZGT^8>7lXOw^g1iIE2EdRaR^3nx_UUDy#W6 zy!q(v^QLL*42nxBK!$WVOv)I9Z4InlKtv#qJOzoZTxx86<5tQ*v528nxJ^sm+_tRp zT7oVNE7-NgcoqA#NPr*AT|8xEa)x&K#QaWEb{M34!cH-0Ro63!ec@APIJoOuP&|13 z9CFAVMAe@*(L6g{3h&p2m!K zEG?(A$c(3trJ5LHQ@(h3@`CB*ep}GDYSOwpgT=cZU;F&F6(b=V*TLLD z*fq(p>yRHTG1ttB*(Q8xLAl4cZdp^?6=QjcG;_V(q>MY0FOru|-SE}@^WElQTpCQZ zAMJy_$l;GISf1ZmbTzkD(^S!#q?(lDIA?SIrj2H$hs*|^{b|Kp!zXPTcjcCcfA+KN zdlV!rFo2RY@10$^a_d*-?j7HJC;KhfoB%@;*{;(hx_iP`#qI(?qa{b zH|YEvx~cE^RQ4J}dS>z%gK-XYm&uvZcgoyLClEhS(`FJ^zV!Vl&2c{U4N9z_|1($J znob`V2~>KDKA&dTi9YwyS#e-5dYkH?3rN(#;$}@K&5Yu}2s&MGF*w{xhbAzS@z(qi z&k99O!34}xTQ`?X!RRgjc)80Qud0{3UN4(nS5uZ1#K=^l&$CdhVr%4<67S=#uNP z$hnqV471K$Gy&){4ElZt?A?0NLoW2o_3R)!o~sw#>7&;Vq954STsM(+32Z#w^MksO zsrqpE@Js9$)|uQzKbXiMwttapenf8iB|j(wIa2-@GqE@(2P#M09Rvvhdu!sE0Mx&cK&$EtK}}WywYEC~MF5r3cUj%d$|lLwY4>`) z_D++uNojUl@4Cz8YF3nvwp>JWtwGtSG`nnfeNp(_RYv`S2?qhgb_(1$KD6ymTRgnD zx^~3GBD2+4vB9{=V_iMG*kQTX;ycG^`f{n+VxR4Ah!t~JQ6Z?Q;ws}Jw|#YE0jR0S z+36oq6_8xno^4J?Y02d!iad3xPm+8~r^*Vvr4A<|$^#UEbKvJ9YHF=Ch2jF`4!QS# zl8We8%)x>ejzT^IH%ymE#EBe2~-$}ZXtz&vZ_NgVk4kc zOv-dk(6ie2e{lAqYwn9Q$weL#^Nh?MpPUK z#Cb)4d96*6`>t7Zwsz#_qbv6CnswLS9Jt|b`8Mqz?`?H1tT99K#4#d+VwAy}#eC74 z;%UFxaNB!Zw`R9){Pncrny4>k;D}TV2BU0ua-+Fsp>wmcX#SGkn`h0O`pN*`jUj8q zIlnc7x6NRbR)=wP1g`-}2unC>O6ow=s{=NV6pfEo3=tY8 z=*$TKFk8Wv0K8B_**m*Q>+VW*1&gD#{#GSc(h#YQL?*<(ZUx~>L^RyAG3}j0&Q|mJtT7ec|Y7cr~ z+A`Wz!Sqz9bk0u-kftk^q{FPl4N+T(>4(fl@jEEVfNE$b*XSE)(t-A>4>`O^cXfrj zd_nrA-@@u?czM(o3OVDok%p3(((12`76;LwysK$;diTl$BdV)!p5Gj=swpb=j2N>b zqJ1D5E#zO9e(vJ6+rGuy<(PS-B6=gHvFat&)qr%j7T`vT1ju zIvHwGCk5)id{uDi@-e?0J*(-W-RGZs)uhSeqv7TA&h|CUx(R0ysoiQC8XnxL&RXI3 zO`H`8Pe&^ePw*`{rIJhzUg@MuhUL`IONG^*V?R0h5@BRDFgEF45b0jSrg0r{<4X)nw^c)uQ_Ai_p>ic!=K$pmnyqYb=`6fUo40ru#Gh= zMRJxOD(1n?Mjz_|IWyJK5^fh3*n>eI0MmEKq%=-oIdGd4F-LT>RL)Bp5FWxb4aNLNXB^o?YBSXQ`SwN zI*N~(CQW~P$HpzwrMG4IZKI>TVI4nQ$a-#)zV}LE(xgQ5MG@L#e!e@ ziNtg{Ph&qpX9FLaMlqMh>3)Nu%sAO#1NEsbe=#4Vqx0Y;<~+mV!xwj%}Z=xZn= zSqjxSH4T~v>Xd*=2wmHPN?@+9!}aQz-9(UIITZ==EB9}pgY1H4xu^-WdOFSK!ocZc zd-qhN$eZcN#Q^0>8J%)XI$4W(IW6R810*ucIM7Q#`twI|?$LYR1kr>3#{B{Z4X(xm&Cb21d^F9MKiD=wk_r+a=nyK!s^$zdXglCdshbfKBqa5aMwN#LmSNj6+DPhH4K-GxRl;#@=IJc zm{h}JsmQFrHCioWCBGzjr5p9L4$t4`c5#Cz(NJ#+R7q-)Tx2)6>#WZDhLGJD964iJ zJXu`snOYJYy=`<+b*HDiI9XPo8XK$TF86)Ub5=NC@VN#f$~GDsjk01g$;wDY!KqOh zC$x={(PT7CH7c?ZPH{RNz}Tel$>M0p;je4|O2|%Yq8@sCb7gRhgR4a*qf+WGD>E8~ z`wb<@^QX)i-7&*Z>U6qXMt_B2M#tzmqZTA1PNgzcvs|(|-E z4t*ZT-`kgepLl0g1>H!{(h8b`Ko=fR+|!L_Iji>5-Qf34-}z%X8+*Qwe^XrIS4Re$ zWUblH=yEfj!IgeIQ>m}+`V(4u?6c;s&Ym_6+pt|V`IQ1!oAC@R1XC3tL4BQ7`!TnU zWaoqG=nhI@e7dV7)8VzO8ivuC!q{hcxO7fo#2I=<`rktP0OfAO-CQE!ZT@}e7lw;{c) z@2l7RV$@&S5H@{=Bj~^Kp5At=Jq=Y92rXP@{-D4j>U=-a^gM2s-nIZA;u=fbm2BP=Zca5W81_cA>Tr z)x+r@{pu_la2Q(wm`Zqyd@GhNDNT&4oNHb_>w4{jIU}m&iXykMxvi;WL8;y7t}cp& z9CEpR)WlI1qmOq!zg4QTmzv#eP3>NLd7V-+YKmuyLFP533rd>WnvL$F3b}g39PYk; z)^hXQ%5jO(B}-TMio7@t<(V?7M5!ycd)u4Z+~!hym9+KwPVO^Wkhi^Dc7$R@)o$oh z^mRbgQ@5EvalJa}V4Bi3cs^w5pYtbXXz5W|e%+z-K;8M%Lf~BlZRvNI7=)cG6lbjg z?)l8iOw!mU`uaKN@UL4>d#edM9^-ePb(VICy6Cg-H^Ew$n_s801w`A83W!_Z{D+1G z(<9A>WB@>)D%cxw7c?Xv7N}6gg?&TkLX|0@k&VL)YMI~SsE^dzj2^3BKL7SM$!0Lt zj;ytKWw|(58n6_NNH$JVRh!W*wewMr7)H2jOCruuJAIIfPMFpf6j=hL!D3nVT9Dpo zut}|VoG<%v&w;HrQtz<%%T&X##*z5{D!!egoRN}R_Xxuy+E3dhx6!7mlNyuqsKR-P zlP#8EKGt{Ij~8kXY?&*%q)PkPG;rziWPd>HefyPwV49!>f&Q_@Fn{8Cyz{HCXuo+( zJMu<#{Tl}^-dh%nM0IrDa@V zMHgAog4`tk;DNK-c{HwRhx%Fn%ir3mex!XeZQ4QY)vQ_iZ(j4-GcO?@6Z-Y*f?u7_ zmf!}WRoGkI#BO9;5CFvMobtV@Qm?#eNKbbX!O@xEVhnm z6LFnWu=E}6kB82ZEf!g}n5&IuivccTHk-_5cazDAe+O!_j+dQ~aUBy~PM34Eq0X-LOl zjunFnO<4Nq|BL`!xwvyj&g9Q0(A_*xLT~l{^nM&kGzB7+^hP^L&bD7iVdXe3wobJXVX~o*tX$ zI5xthE?gAl!4+v~+ASbN2nYIqNn_#3>!fi2k=g*Hg_%caA#plNQR+RtHTiW>(*OFG*-nzu~6DMCrX>xzP`3sj}D!||8 zf3dk-w(NCUMu^C%k|t?sa>9gU_Ms-R2Hhm~4jNfPPyH!3Zy zV0QFf=MWK%>|(eV$pB5qOkC)uou{oIJwb_i4epV{W95%N)`+uOrLx7fNtD^czsq4B znAWb+Zsk|YX}a?b+sS-!*t2w1JUqU6Ol`&Jrqa5=4eeLWzr1DX1fWW`6MYf+8SOW< z+EMJ|fp${RJ7q9G7J+`pLof$#kBJP^i@%wNnG3fnK?&k>3IUVo3dbs9Nt)x_q|wIB zlBAi#1Xv-<+nr<13SBfkdzI?dJ|3~?-e>MzG(yRsA}I_oEd{HEGZ&7H|Km9mEbL6r z{Ubhh;h6_QXN_?>r(eWJ@CM1-yn6Y#am!aXXW!EfCpu}=btdYT?EJ>j+jeuc%;P2g z5*J%*$9La$^cy>u0DqjO#J%*IdaaPnAX#A6rRQ+sAHhY@o32==Ct3IF&sM14!2`FD zA))>ZKsccTyp$U0)vjABEY_N5lh(@e+Gj>sYOTgf?=82K)zw-?JX2d$x}n2Y0v%SjDtBXDxV2TyyxQmN?2%8zkKkKF*!AA$P$1#qrF%fUu~URt`tp3C_(>^tkcbHhO0Hh0A zpTVQR{DjsD=y-Bsl#nuTVKRxYbjpSJg|K+SEP+^Y*z3S9p(_-s9^YP5Zc?Vz*o(Qx z?f03co`dGfW}0T>UdEZaW>s0XVEzlw@s&bc+B-9;^^AGsx$AE~!1-7?tn9z|p4}_? zRsM&sjg1>#Rb#6jFBRKMeZ>I_4<%=&rF3yqUD&Lik@7<@2*(0rC)UqPj`Gfe8L&{S zhGtB67KhF{GnLZCF}gN0IrIPU_9lQ)mFNEOyl0tx-!qeCCX<;7*??>lNC*Q7`xe43 z2$7wD3MhiII4W*v6;Y775v{FSYqhp+|6)6BZR@Rdz4}#KZR4%=+E%T%_gX8-9KPT4 zo|$Aa1ohtUet#uro3p&@^FHhEX`OcGjq==$UeAQ~<6AZzZ|l75nn<#}+mo0rqWv5$ z1N<|1yMgX+Qmz?53v|%P=^&74bwqfH?xIC`L()W{|G`j^>kbs7q<$hb6fL@S za#nHyi$$TJ7*i!6estChR}QriMs#yy!@Po#AYdeWL~* zUR%)FT#4Q~O-N!O&it}b8zFOmbe=egH*Ka<9jT?dFCMAcagAo<>tKrW%w?P_A_gd& zXwHTn>a>WEWRzimu7EJ*$3~Jfv|@bLg}6iH4mgJB!o60eP#_N!xYrQoMf4&rGLau~D9ila zYGD*3*MNN?v*n6op+dQM!Kkr@qH1|^ zh7skG&aC;+$C$OSR2!ke>7|B6JDpjV%$Jo5hI14PGyx1I=Diw7>h@vzL?PLTzC;`; z?}nkmP%J6$BG!9mxz?+Np zIHbVy&<#H&Ekz1(ksSJ_NDQ+XHyg-!YcW8YvE5v*jFQ->F;|Q-IB@Mw6YP~v=jY$~9n@~8MVO{1g z@g=-I$aXs1BH&>hK(~|d>Y9n*;xRm&07=pLuqVYV-bwyCUIKgMdLSrovEs2f3{b z<++d|UX&}*7)y8){Ntc{RL*udOS8r%JV4EZ64fUF85n7%NAWejYbLV}NB|lS>SnYN z?PFpysSR*OodDcNK;OVKsSbKS^g;|bSdogA=};1?3rYq|Nc_tR!b2ln>=bNTL59uS zZjF^Y1RoS7qF^>LEqt<#Mu0ZjpiUNLtsc5%t*8}5lW4OWwFXfqGn-q~H)5}2mSRZ^ zKpfQxOe+KC(M5V`tz1zQ)@pTTQ2?NgStmwpvPCi&U9wd)m<^I-w&{(`Vb?Q*4ApV5 z(G}DMfgox!S_C+OTa5UkEbB#G$SC<8vLrDPPT_Uq5N~7`%Js5Ut3!o!f@HJm?b;(N zbbv90V6J7=E&)E`b|}N4n`VOOuvo$IEMx`%EkX8mpug0yY80enF3?M57gI zQ((b(;dv_v7PDKFgL|6)q^sb%Gp_aU)wp^uX96>jGEsOmBhyuDZ8}+y{bG?UqGqyDfYMtJ{6@xXI>fVC9g+uG zbQzl4fY>P6VAkv8GEpapl2>quqSIoui)Mr95Nuw@voGBux%Mq zYqG!&A9RXvoI%gZRwI->g2SYPB1tbg0U9UkC70cRFPTKU0L{E!2e?|as;p-wNwA;> zm}yKfYURNzE545Jz^T+srPZUGX{3qx0H&3ol`)Eow3xXj!2lx+DkB=}EoF`(n^)2W z_26hljpwvSdw}akJQN9;WAQnnHTN=3Ko19hR`Qqt#60*^1acxN84Oi8W-4nXd^@w0 zVpMzKqWw_(cHwQ`*uQ>F4F;Ncc?}XU{q867ZF>zihsu1j_i%f38%41S53RkO-5Bq< z<^ffy6fQNDn;z=lDz2OXjU+MMr0ziZ)HseHI3+}-N8v$8UWEK_n5pL6VPUS@YH^ z-F?^bJ%5Vt}@l0B2B$XfpF!7J0KUW$rc!~hPD3+Ms%)ia=pl{0nuS0_) zMk9rt16uqE&;%{gtVGqhUs{u$%()O~zzC_11`vYVVXfdfEU}YwTDn~JYTSiTDRNih z4#ap?$m%48h4*c`rhEH7?VLTW9aCi~b>z~)W0xM$c|y(8H%u~4?Yic=Yr3WyCvBMC z9P;P}Ra`!CY1TVd3~%qgX48EO<*6O5d**2Osm_lAM&ZKw?7XUKU$o?gjCIcqH|%NJ zuxtIAj>_t$YW%D0ShIfD2DzU5%qnHsRN0vm^B3-wcim7D^;K7~Uj8EuKZ;X3tlbVD z(=eh%wxAVAWPvDL3Mmg=TPKpMGzTdG=aT&qTw(TFBIg<;`kFOrB)&>#;&>KE1kb>+ z2B2dhdAN+pj}^ZH_t#P}WOC_RDs4ppbD0<}eknMnviR2G%#`AniYwzKw-y(_5*$-_ zmw5S-TNmxQbkR$TmM>p=*`CF(EG{@lszbazB$k;2MYhTooy&w{`02hJ3>+yIKEOe7 z@JMkSHwDW^-jsRwlSM}sEqQs-p1n(#FUOllp3=O)Tup&?1<^)a@`nk7JGz35N>n$} zBOy~(>fI9qX^_jCE*5|=cn@Q((|dZ4jk)4MmOAk+0xA#wuDRF-%lTtBwIA!9Gr9Ct z$c`7mj%LBTedqC%Rm_T=dk5?Lu6Ta&XaF9q!a$AUtk$ z*e$72Su7q{Rad`o)%w|Sbyv5rzAip{{VH|GtUY1tf`Dk1!6*HuN9YH|>@$Gpvq}N6 zCzbi<_XLxmE|LLdr@JCzPlDyUYO2J>kDK?krp5CY@11*7)8aCVVb&~zrEGE2O>>tojkD`+_dDb1*Ao``HQpP(giSRL)4OKuTMcNVOb@(m7M?noGc?geUJ;8t6u0>WYa5RLDJ>(^Zu~>-DTzEbb z=Pw6=C#Q(ao#It|Sa^jEBWtV8YNL5Ce+KO1 zHqBg6?QNQUAP0QbaOG=Lqb?5ZLlZP3JdqXFBbSG?_!QPegco`UzEDBCfy7n?l|5O(2uWh*{9fh*}OFkZGv)4J9g^Su_Z-y zktO~$6KAdO?4HIhm;a)+gVRbF%BNDw_qH-YUp3>pUiriPU-DaPao4J;%WF%Dllm58 z#~3FQnvO5O$UIv}o~Up(EN-l>@f8Ipwl+*yG^2h|U81N>`H9+~R;Nq6WZk+k_l_|; zqH`}-wki9Eekf?yVOxp~wx$i7mS&wyRfA;|YZ$pD0iFQM7=^Of;Mb5{*g%Q+MV}ZZ z4uCY|_@8q>JQ{}h=B5NG!svf6mRKr5#bVli@?ZR%doi+~75m0rb2XFdcTK&}XtK)Y z#n$?!<(KX3?3gc;rSMQ3)+>e{<=;f)h)dXgJA+DdJ5q_(=fbyjlD zyxOq~%LPEFsh*KmXEIW|_M9hDm%Gdrv97&s&LCvUqb)02CoZ4W(b4X%EB2q(#G5YM z&@wJkH_qwtRocyZt7Y4`(pa=cD4!kEPl#4{yum=*q|U{&O2DV&=)yXRws%3})r>`7 zty6tM=kuW2FpR*(!{^GYty*Jp1woSmG%(Qs4H^#!;!Q>OdkH@{*K(vzM1v#qO$_R{ z7+Jto9d&*4xTs#V1lt-9mM`tTxU{8|32n(X!6M-UNsS#R?m__F|Gn3X9 z&{djT%C$c`e{S8Bi4#KMy0LTS?(Vvq%{y6Caq7xk-@t{Re0DV4heM^6gkrEpL-{{% z)|>$4EU3Gq;JmPH{E@zsRX+#@>gc;qk2i2FwVHuCI??#%xdiMweM zWaT78*EG!|+OV634wd0UaR@TenRhksaP%AUUdHC0VcZ2nT> z|Lq#TX5O&2h!GYviFiX{IRHYEViDCLf^Wf)se&K4oOU>MQK$_!7!L(|E5Bx`dn|^Z z8D!P9pUu^~tYLFpB<~24WRqgt9Jadj5ce6JRV}}8O%6hRA!!0JH5LHs91WhgWWLJ- z!KL(|#^$p^amdJ5g8rZ$Ggy6?%`B;J_Kppf<0XMKcmmW9@>-TJn~gIShXI5aI(xEx zlSd-_6cOeEGR2J$MBqWpK*2%7D7_wEFG0(EP;?Sr1EpZsk|pld3%9nq47KjwNtga; z^X`AUY0HzBudMExSE>hYgVxdT>O;3bbp6&zv#t6lVjtU=7OitgFDbdK>r_jozEYb*t7qdj?MRk%pu)4==CR^bNgHOU-j*emraW7T2WR%b?1^<K?p<`lIUQwM$W=cui|bx}?bTOb6E1v3`QcM^BdcQe z=PpkFc*njs2H)6MH*NX+$l&D3bkD1=@_CF6^b#6m7%YZwDoKJobt%*>6l7EZ=V>@G zzzY{zEr!q?#B%Vk9VD%4E~MxbJ)hcn+q^0Z=@qNy9XNJiUX{8Ns(OzNq-fqrsbhbE ziWT!T7SLhKQavnveOJ`2^uK@O;eGSx?>nsSlq%#_#sdo9iphZ#Jwo|{FhMbfSrS>R zQiwFss8KQy?9j`|&<*8j64q^OVgV#e63^ksE_l^9($wb9f`EyHv4&?kqn<@TAOMm< ze1YGL4dcENbcWZd&n7h~Atmwe(#RoslRpeyDguGF}j}$MRo9?SM8!=4Q2wU($EzceOopeaHDv$UhoQfY3;W=e^g5xM87H z;I{8*GeL)G;HH8ITBt8$#)NOPnG>ql&Qh*h zWt>ty34rm;*F33uigBg#?eg{u7R{5>Q`U$R2j3@_Lkx_M{bOC#*zx1XR_*c*B-IGq(GV|B@o{8hJ3p1*lD@AJn%&$i*n1|9(=hKoMs|KsjeFu0HwhG-gj z6NR02xQ2KllvU2l&Q+ddYuKj6LihSj-&!x-tUR@F>EtCIlkybUel`o1t{IyqKm3Y# z^I%x~1FN64cI~X$=bbnBPUd;Rxn=jXhSG-2Z`jT3lX2q?hsL#({W072*)OlJJQjT){R0dcw$MIV@Im_3E)riYBiU=q`Y_6ca&e9uVeb_jW)Y(*6X`BKYM85 z!b8t)Ui*XT*XL>UuiVO9x8B8yUlNM}WBcAqm)&yESfoE>5R7X!w(jnYSbl8TpaivJ~v3;LD^f$vOykiS%0kDp1GRq zVCg_iC;5ATIf&(~gt_DK_8Vo2`%JbUh z9jfe_*S6Eje-d8cyItyiX=UK|B_;1L?UVG9n?6x~K;xR|0vZ5x!At8OJYq-&B}jT5 z#x}{P70vb-p^szS5EvI&o&q#3;_jrm%4X&6S8u*@Sv#ZVm@V<@Hf3s4l;7vm>@w-r|)yZS%w?(I1*QeIrsG=I+5nepzsGxrc~ z!pSc|SCA)uB~*o*q}1leH+COyX<6)cl^Ly@AOH2^A6)<8mq0BH{PW9E7WVFW74(6f z)`kEd2^SPxr15s^#3*QkxXWqEyk{wqj1GtNbEQ|(J1tK6 zUnIYs&2$CihuMv=&x^lu`v>+G339PrtlYp%HorK*>MU~Tjmr477+hGhviLYl@>d-K zU!uTPY~kv}%w^h&xW}uU?TFq&;?(Rl#6glkWN>Gw4B#URl`pWSWHsaPj-^{T?+Rl%;){@`StD{A2dwJ|V96v& z$16bph~Zles|b2KXKVo$Gy2J6qqP8xDY~bRh4}rn$()b-mt@e#Fwd)MdNQq8Y*-I^ zKqOSY68uyOQhX&e!epDI){mhNNM=IwXQLY2+&brLfPWf!2x1u(hS5ey?BxMlyyvL* z=no!g*pcWU2>q^rYg;4Lqki3-zG)X;d+6E=r*#^~7*m$_EGg_eQ=4jA+oZ8YMYWd6 zb?&a!UGBQcmfE7Cu~J)W?WPsCJoTfeZdoCs5nPtKdb}+(w{hma1+}#c_RZX|z*J-U z`YpG79lHe^?%Xkc?nU**&Cy^m+F0WA*VWfFHrCYF`F$mgbgj9#{-U|#cig$|;T=<^ z?0A^d|2~dA8{jc0T&>LodGPkA2Ce<%xn1wIlX?a%!@Eq4Md6Y$Pjh8C)#tL9&B{-Z zDl*AaMfM==qY6ZMs*j2-_o&#DtOvEgKO^o#a!G8V!FLJa99SgR=R+3-1WD>6kPt4T zQEnn&KOhDe*4&&kDJBfJWl@4anq%Se(e27Iv}pbO#r>3wvWJpUt}zNZYx9klkhS?P zCbrI418eh@4+uTT5z<4YR!}Wu!0bb{)|g-CHs~wgPLx_;gZ}Pe*r4aOmyr#+pp0lb zHFY6iYKHu9A$fn1?OWE+XV41w8uJSK1!e3*OLwh>v1U`ou!Z{BA27G z@n6d|J;N3qwe4uQiV3KTDcpf57p!m?0p3so1Ax@X#2IiaA}2>9&SUXL^1&>Xh8#Oo zQ?C?L-8M|oiJLpU6Q{%GGh;&0K{owhQSY%3!h1qcSn>U|R_L;f`cCNUO-efJ#sSbh zkg5Hb9y)Ys=YeAvt+X|EzTjRz37BGClh(UmXfNBmxvV{Ttan9870vRhk`;uSF?`m! zyWBXXtg*^vTY1s31F*aP^xb!Xf`+yrz9*G!3+V51{2PK^bPhMbp(nxq$mtS*2*~V% z(N&JbY2FYBI?V#24?IeNyZFFOpZ~&zB|@M?sbh`bnlV9zkG}tHdLK zx+5aQXm)byO7#8XHFtDn$5~LO*5aqH%?m z$2wT6nTmGDI)?$JimeWHNO7Kra|S#r4ugug1UgoGf)+&L03keV@p1OHE$p^lBA zt*GJGLDNniq=XZ4I+Mb*82pqbfoQ@+p_JGdB0aQaeTB!Lr#Z$97FjWL@MMe@Z^D+s z&IK)jih;Wbb%1MocDc@#$)|IKVWN*g2&aNVGFMmdoaL`cE`T^;1?Tcf@^i>q-czu= zA7p!sX62V=__ATa&S(g9I0rd{)J6Sdr^qB}JA4(U(1Y-`7)a4D)MA`g7I!Mwm6+KC z^C_nUK7sX}(ukntS*u>(uyyY=UeDi#4Mlus`)o8@(xaLmYhKp;LGw3oP&Rni)G|cQ z7Ur#P!U!VO1g(pNoJAP;`R9fA(}??`-wW?AJpaG_{Fi;Nu)eT^;QuU%IRlFc*+_>_ zx`&U5+e^|ih7FuRhmOU(m+aK71UlNUGH`jW!KA(Xf;sb)=69M;|L@O||H&xL zl74Wt!{fDxvzf&5M8E`Lo>IUfK@P&dqXA1j9Ysfw#32a=jPn2f=>Dps?=)zh0y=nF zlN*J67GXr@2Az6He%|WXWJyrTG^F6<|JoS+k`Xm{tCR{6!43_i__z|&s!LT*4`;a3 zwB^UO!_$ZGtWdT77?_S^7Dqv~y|xiDP)-YnK8%pxr7p+Lxp?4~wPvULd zUmZLLn47GQg>WUt!yAzB$G%F{zYS~B=am%aex&q3x^I|U4B;Xp?}AZk z^YIrlk>Jo6{xrIjl;V~Ot%d0#DhpmMHo+{Xi^Rz)*c5L{kRh`PE-|>;1QQ0h^lDfo zd@>|=U5Y91Dt-M)<#*Gl`Fr}3$-Z}Nfx!+IeZ!v7G% ztcDQl>kp+vdVk8V$G)HSg>V(Daj1A4`JRB+&HA5cq3-~n7Y2oBATKb2YG`uA6X8S{ zY?6>Vt(nsVyAxRF6YnNNtUn~CLrIFaIITfuxMVt=e)j}2Or%oj&|p93A5+|pOZ*pd z#pmb`Sv&G65piAWD5e2SoNSIcgY-cWl#06J$28$_X(YT)8umd{pHg7Zo=kQW0->a_ z7yr))>upwE8ZMWr(itk!ke5-mNGO~-u?owjq}8&~H}EaBRQUYJk_kzaMJ-j~1H#0S z1rxw$&lCSsY5*5Eh9p`{{~@y^&(mjM(r6cji;VSvEmZ0dZ}u7v>WxNaH@lu48ujuc z{04p_HtH?AmEG!dXI$pv!-8`CYpz_XJ(2siAQuczyy!!@pi$wT{)yp>!Xhe@`nl`z z1^zAe8p<`=WnrFL1*!@PPZ=huBJ={PS>a{s$9bBsNe$AX5$!cHKZH|luaOs}hA*pi zw$Rj=>@_5!LqS+x4X9Y`l2I@7_L`@81m(I&E!VL96$Z9khIpPCg?Db=MU?BT)g7f3 z1oR}eOn#rEov2`=TqatC@g-cu`;n}|1~nUG-Vnn;qJfhg6hp5T(E`dSLj-kY;GX6Q zi-z9$l?TDudYiv<9p*t?+4_WO=CNA5llp|}o}F1=q4CAqvoxnl z-+26xjr)Osgn&kH{tC8-tSujYAX&ByDk<0rhH0A)eE8>_MbIX>Z9mf=3Xu{d5DSGe z{bXd;!bUBGMEs02AatuZk6h5A3ny8K=vdpjVylr_0=J@48tARLevxvQQ6xQRF2uMT zDdlo6=qryT!$n?JVgWh91v4nu1G=%?-N5?j)BLSd2l{{#%0EAV&&xf1Dr{4qxZQ5= zL(D1c=mH9)qTh-=!wPQK;G!Plb9%5!QL&)AKmk+G}epRD9NQD(&9O0C6ZElh(DA_jLN=MkxobFd(kGnzu)+M~#d1*vxjpI7N&Q;y&0Q(nt9Ov@ z0UAx~93%#q(<@Bk9CzjhzLPRMRY32Y!M4>0SFb)OeWL#Q0u->@`-CeGuA;1us}BAQ zc@mIQK>2shoeQcVJ#!PiaLyd@Kj_ibnQy2+9_9fE%1-skgH%88v00xH6V6~l&y7;< z3z*+Y;rwAP`&tJ>jA`DJcZ`7&@iupQ%b%(G56`bmS<#9BG;0CU_T(luy zt=;C3Nlc<}xz{ z@bcSeLnyAw`PUGAL>*F~12pf(YnG!XZdkkO7$`Hc?ByN%$Z$rECfLDLP%2`Mw2Lkn z%iuczcuO)T(Vwa}C$&16nxS+qnzVRQ5p9I84;?;p=#nva%=pfXYl&x;$;i_ zP|dt~6wqbsm-{)G2ROAL$rK4<&wrWS4F}$7>VLjZ~K@NB#Cl zO&Qzj{Xrj9Q?1IwthH&{H`*sEN1LX>TEL$T9bDBnzAi-V%H>rqOSs{8i9DPnOQEm? zKnSNAa;HMY+M##OP3;`0pT=G%gsg(SQ~>24N?A+(Cl^G2rTi+Y_Xmo`>Wi*@@Y*8% zxO%^0U>2&c=s7QU*VIcq8^q`sm^J3$P#9i9SGJWj|-YQ|Bbro{q^IrwHjL#@aw6r zO5(p)w}zsz_FT2}`msf*s$lq^*3AS90U;2;%8zQ$AmjS~uU@58ERcbWhv?f>K#BeL zYN8qi*%SY*!e{wB?9^3;*7vWVA<6l3`r<8_4JXqkECB$U^#wWOuf$1XFNlXZ{n58dU(CAELUC!&Oi-&kb(YyL&bkw zFG94K{HSTIT!grnt(x7Mt9azgH#FZz%{*?b|DaQ#z(AfKI!4Z}p<~>Ge#1Se1*{80 z*9-3X((C!(%0GrhVCY#e9J%8rDwB&WM#Ib#hh$(WdygIeQucm3{$#|=Kl+eJTk1Z-(L@12&%MZxw-kLv=48+WES(PWIT1Ks z0C<=YX2Yy?Fc%$1$a>sE6N@S(ydbyNTznjed+MRp# zqQd(Tx2JkitUck{ZkFv%h>+T$y361us*p`!x@ITML#@u!?BZJ-!@DqEXFzk1cNoI{ zJl=+S{D?*ZKK1{XW)YK5yzt`pzw`QU#6SP_sM{sCSn6GMftpB-*B5YYd}6E1T{V8s zBM)6)8@_GeJO87$68vfVhG%-%V?Wnl^6Z65%hMOv_5&oUSnJohv?fUse?PIwpgrjj zbkDBTKUc**{+~4@My+3;_M*cli^%=z;`psm^74d} zCj*Zab%E6QT+owC_c5m2HMR6aD{F5vvrm4M^bRUw2oc1;q9jPZaA_vxsFaP~U?%O27@cleW3dOF$d>Vq0Zl}ZBVHjH ztf_?4md<5`q8EHId=*llqXPIzIAX%~1B?b5_S~HV>kar}&i$g+Smv7ZlTat1QzXxJ z$_Fac3X5RMSd@80O63eVgMA|`7viFSV3ZmRpY_8pOoLm0i@%=q@I7J=7Vq5YX9ffA z{>R`WG+DU(#C;6O|HMaLg9l zl)V7Zh_060KjCS9biA=f=azMILnJ&h}h zly@(WRadr83lyzrB*7h*#Kz%c#TEcwRZLH44Gb)Vv~oEAv$QE>6AfHr(F(C#@+ zLJlGHE;Y1|WL2(ysP_V;dWc_?Nl(dVTAaYOpjag5{{*~1y#T?AsgabJdOGqoA-oeB zE0oxN_!V3X&c0eE1?A93*;A)ACcg=udm8GzJ~h))e_kxCET|AT%Htl--e2VXnV<@TsN3YA17M0e6&-Kk=YQOE2LMDBtsJQIke# z@?QDP5g#LZ(1S@bh&gBDacz8F` zRpD-jIg8-ap`Ym@6rNlM3=JFCvr)2b9N_9ODp{J#8`v;h=Es?IOxlxNiKM<#Q9_2M;_jSYUH}t zqe$Y&x^->4;JRt+*3Xu{ylQW~6s%=u)@ z9}!qmL7OlT#T4rTQru(OPi>~6!BlKwMiZNC$FYcG5yvTlmyw#v=M)cWYQ~gfFJVt> zq~`S7oR)6J2?icV&xW6Z&I8CNu=}8Y!-3V5*oU(pJV!{pyvacr8HA5P0nDoEQ%(JY zi_HlS4K2djpeQwr8f|LDf-$pdJEIqbnAcQ(`R2Mwiz8zq+ZHaqq%>Mu7wuYe%n&tL zfGjDLMa5%lx}tTse#w%qZMbXkq~r%<8NgEgk(yfXgz;U~-7DFX3+bnQ@#AqBY=^OF zLbS7X)|dq=R(4l+ji2DHt%>*r30Rp-(iA+JEy;u?keU%+qc(@`QA$BS9Orf!N}fVd zAL_Iua?ljh5MAJ^c}*yLOiMzDF9{(p(30MIi+m$<`Ua+XOL>c2D0t=$9GupiRQ`FA z{BOl%>K)}7|3O^Dzk_}@em{Rc@>6mR)GzU+fJP3!_lP56}Ebt+|2<0=uUVxPy z3)N6@44izF$8~7*yh5H)fjBg#!VE4emB7mt}4}d2r)5g#{ZnU8q)|NhnorPaQnz>S+LontCn2s+La0 zh$jQ|3fkihRKrX7xJMtz8qh?orW`edrfqDgrtxfxOwvIr^UxInxzk2wXb_tKnHl(z^v|lS3R^;C5-qU z@k^Q^e256y0(|hy8uo+8d0&n6hRC-))pyDz3Z=lgVFfaOs{79aG081CD(x1Z!z{a6rfg{`f{nt;>Z~S~76JTgmet|iqonNy9qSRCrj5SG zE*k8okuHXMA1b|YZ0qc>KB6<%`;DPFQ>HnqYN&4EGLuv20mv@Zt>Scu^WHjG$A{{M zn0_!1B4y#@2tE)shK{KGiRKDSUb&Ams?2};;|q5pJXA^P3}#c(A}>+?UHMSdS`A5u zx!-7KdwaT0vc*icx+RrkWvS1Vqu=l9QLeTd`z1pXyttbcEn$YF%gs^<``o$khc~%U z9?(+A$FHjL21BG2Kpc=@FYF5APed6YZ)jh=UwQm-OL4H}p<%olMV739mlk7y|VeJq6h({N-N`F)AkKU*9A zZncuEumPCb0)>TTg$*!DALN=JPBdym6qG@%J)>S~Clne0KH`mlb{f%P!tPP}AjxA# z93;`Q1V$D?)kIu!LsQfhjw9EQ9F=y_B1`piC?(juo)nIC0- zDn9&Z<}dFxHQlKEWj$Lbgq~n;oLYO|eW)MPm|++FFVI|Qe8Ff4uCPwVdtGoTV=nn! z9Mg!5}_H(v@l9y2_n5lmXZ?=E&S(lJU6Imo&ZWZIn@mAKqMS=Au89C=0ru@=+;YS z)498q9ZI9JWB0j$+}686F?+mvy={HRr$^I7WzrL;!!dIDMD^t8ryc8UdcBwRSe?@Q zeCZwRQ~JDm!Eo-)4?J-5xd4^sKe}D^^(*(gg=;zY{*Cfo)5#lh`mXYC@C%ts-TPOr zx4Ya5jAH>O zc|Naas2cQjC5qX ztN*_ zp0iX-C5(oALou489mBshd<ac}LWi(CgsaDL(eO*GXYH2uLp{vr@SV&-2TX_wJ$c zu;DVWH;0OocbL`LWcxFSsKaT)I-4jmq{X-c2t|aJQkL}QXiTVMz=F`J*S(Tc{UO0! zi%CAn@koN|GR(ehQJ(p;)$Op{@wSOMEh&o|_Qx>8!DwP- z`FJ}oaQjgCpV#o@Nx!OH&py^S(Mo<6#&dsVsr*A}PIAih}WFPR&w zCRp$^BQjucQVv0ZvdTb~5Y%*mLkorYIJsDrg^}#t?y#MKoS(VfIorvSE~hJ+Nkv_H z1NyT0bd&Z4`Byk{k++vY9$qbIp;T4E&6tF`tlp*!>j)C5KxYI&p)K>A@*LYD^nxH$ z?vczftYFCQBHl2#E4np$pk;es%l>Foya6Zs>Eu9EYEz!e5Y{R^h4l>CRPYp*(qm5H z=D~}jc&KkX?%Ns_4@L11PWDH)q8*0URaN#UIU9C%a`k~+cScW=kFDx3OHQ<-c(1A| zhLPT?d~EY|Lya>!Q^W8jeqE%Xq@>T#)`R;Q;n0=BC`ofPQDBM+{rFksZ55a(iGAa) zU*eU+_dJAYMzc*kC0`CJJP^FOO9?7Xpo<{uSO7rZNrA__;wfikngXyqdcC>NU}wp6 zrPBc|2Xff6WKjHOlr*OB8%+b_HySNtDX$lf;WU+r55_k%G}>I?y}14c>;mc66GV=~ zB>p6tL*)LIuB-?uX}lCp$PRoG3NBNh#Q-2Qmv!*o*&zk*WvQ}QR7jc9RyUZv;eI1q z1myA@D>js9##>)#Y7`z3u*P$CtoC0yo8w|Q6F271w2yF)%8KD0_2xTV;x+lRX_)S7 zLESy7mmECL$tj(~EAaM1nhN5QP)RT+`Em;B3)pSP8(VtVYgUKyj>BSg0P|KE5JF0S zre930DlR@=+*Q0v=*uq{`_A#ko)-3hEcA%gLXTvULWp5*D*ZywDm-z#xOi1heo6D& zsfhffDTW$dtI)HAE!7yiAVDOsdl1 z^kJ2l>S9UXuCtekeIpWyAb)r;s3gmj-+uKnaX)3%EDkWLFD+A&-j7eww|&#xTfkW^^2cYa9_rm4Q zin3x4(yLf3=0BYT{IwK{%rJaGAcrfB}x_x6~ z?NgR#`|L{eSv%T*Hvmwtyp-4g+;<#Yu-bvpE@#a&$atCK%V}j(r9`g}0;71P)B2$A z^>07GDy&Am=Vx|<@=_YGAKMS!>s6Le->|zU{Oc`LG~#QV)<2JRJPc{DYNOS8_y_LC zl{@TCrW62$lakMd)^-st?P%lI2t z)Hp`>W4-6c4x>S@{PH(^%>AB~t9w+1&30NhSzJq;*3A}|Fx76iJC$XzW&Y(3cE8JR zb!47(SvFgpOI(&s!0&j{;v!y#gh|u^kVZJ9B^rTLKq!cWhf6jz7>B3{VIyUy6St8` zt}7v#!kob_%sj7rhkZ`%r086h2XZFre!9|+So+}e;-=^KDM@y(a^Sx%DRgARg`+6@ zF2u-VGLQ-ZWzz#K(++!YiRJ=~3|GVj`!3)x5$zUkh)3uGfML}Os*EV|5hF(UJ{A{; zN;^ys#azEYS4VvUT}QTW$g@cuN;(_~!om}CfZ=y>M0q>J?!6&0ot>C}-$GouFs%Hh zTmXOk#{D|~3BT@JuRegi$szQ;LUnyKd=u@?UxB<`_Ui-kIc(E;I{yK`ZY?|iTsd&P z-Ds3oUP!mxQvQ9=j3s~$dYyr~$?Q9b+{-|eMivJd_6zn%Diy*g%^dgph0WMnjlyQm zYvbd%&X(IOX1{WrZT72MGXRGk%-(<@szG$F^a0wjK{JzM4tXi@39NXYNK<*-69LR< zHA_JJax@?fIF6fq^$B30HaB2{+{uk~5)kSg_1^k+EuCO#z)8DSy4iVj*ToiH!~Bac z@4lm}>JH~j*Yjl;)*~sL(K7eK*OTEpx-0KkaM|Wbua?%#Xj@*tK(C(|>l{C&ZhWb0 zMo~pu{jBOKI=QucYE5gb!YQVnoLhYCh8f$YkM&BY2iPFc51wjZM;I&Xyq~eb&xB70 zb!DyRW$vzMsVFjQ1?9U8snP5KICcCp+z|F5YaW9djR7^>S60XQbPOU4qinn+8ToxO zNmqH=nTD{Wfv@awt2Of=f=NR|5D_7WgKt``%4VxKRM|4nPih20e86-edqM8Km6$g( zF)F>V8F&FIKjPI0*Fu5JJohBIjc8gc^_8vam+bbN) z^b&a)S?@-wcXYVkV5Z!+PTi!3PaWYx6x{?3=UUM zy8MhLFoOTujq!`V*3tMSxoiS#=D?7Pp0%n(Q89qC3)`8F5QUBrh37*5=v^&^@-+(> z0htu_oq#P)lq8+7G(S15;V0Pkj8^Mm@ObujJiy12bM!;%^Wpm2hU;Hg%d@u!H?ron zhpV7{3eP3fX1D@MX!O<)`U>hiqBVv!FrlFe?i{Tt*v_Hf&)NWd%*!uj=XwWu1V=%m zC=E2Y%d?O9C>(f5K@*3!6y2GKU?CtUfo5X3XhJ~Qjcg?3QbPGiIU@?a)bx-J>E7bj!{QCXu3mQVoR({~yqt$+}u$pqisO>>~0Lk}B@ByTU1@@rY z>u~r$XBHw_V;CUK2l9wfE-|f+u$d`;80<3WWT;92N!SjR2{H~6qAwgjz)%Q~BE5t{ z5sXHIfmk23I8e_Z=spyPNqq^MSm$uq;)aRIt1IR@rrxz|-rh(cR#D{NJiasR3>XYL zQ?c6>sGBu5Y=Z}>%ZU`B67$U8nWmTEokDOZfCCqnPOb^fozyaELUjAIxk6bm033#B zK)9kPDhNB1%fimKXjQzX&F%7()mOHa`eSoz%C&yCm5&2z3k}+W{3v)^aQ~O=ST2;{ zqh1e}hLNfmPB0wKxK4n)$lD{=B-9?QB4!5iAyd1#&(;uI5^TqO<*$<7Dnfn947Tvt zS#<%IyV#^N7y{04=lIS3qKa4`vUlFHyQVtkR$QH&Xo%Y!jyh4ywM6DmD$Evdk4Gmh zpTE=U_G_b+^J4zew#xc4kIUUw6R(Q4Im646I|U(HBwPXSFjgH1mI-sGZI4bs!_5s5 z3VlxJW8l7`)tX5d8S9bLfPC=@;-9uH}`2fVh;~5}+A$u3Um=pMOMiBA#5(f+jB~MSC zn)!Lx?D_0_9r0+`pq+|DG;S}OtTT^^ggZJy6=Tf00YNken;J_z?vjl`&(-CAEmN*Y zCIyenIJNpZr0o0Xx|%6Qw;Ryo*9)=h0Xy!_Sk9T#&@^8c(nn0QS=duDz9H!G1RKVe zc%JC!;BeL*S`*&RKFe1V{`u~DM2I|G-q7&DbY%s5VEO^&mde^;UG{pRiU8kB^nWzuB+3UUR4BQ7)%rO`tFm8O&c}Ju*E2W7p9T9;I7yo!5lX z(M02^IocHA0|sI3XLKxj9>WcSSUt~xtJ8+~5J5C2jfxN-A*?|}r&Io+23KzE5u-v> z$p^6hGe@ZSLfq%|`r@qnoO1>zZdIP&vYv%jtSCiNV75YUt{d0P9x(tvw|d2j+HuYB z@9tg+vR3!~V7#LD=YyVw>~Aj&yNQK8!ugN z9UCp~oxz?gj&*j#ii=|%ov~uJU}aN%okhQriOygttN7OrFRS%-*41?$TfI8-OZKsH zO_fIsv2DtwH7}(~ORJa!MK2%;=)9#Q0e- z_BW5)m|^T*v&rE5TV+7}mC2O(gmsyWM(^LM{K_LvffdF7!z*rZDzod#Dcu7mwar$` z*4sUU=djGz-40u=a6w4CiClcL>lMlWR2F#kgGfL)E^!$C{h|!XpPfWluYi?|c7qNc3!frpzTKbdDdEx|9tNx80$qoyY*K46?85f0sW& z!7aa2ZZbRGWXiX!R!fDr&>YFc1tlDTfX&`!!oS+D8#!ILKE()Z+kfC_7D`;pT=h~J zBhY)eOM-}%pyjLp^|L}=3dbtO3hGJ%;x`FW2IZS?*ETc@zhv(z#m_v*Cd`@z?SI%G zDz$1|ag-7Xu5}ewtF<)b4}(GsDA&ELygY7vMMZRq|I9nAAvVB{pUSXJ24sg9wMM(o zrY%~PNZvB0^154YNvyzv?6VoQqUfS5)sk!s6`k=rvd$y_Iq}U&@DFME5PHT1kJKP} zEE^;b^Tc&c&>7%g!ecN)VEqyZlqJhD3)xb|seD(iW8I2Rd5A4z ze^$P$IK@fI%gP_wWaYhW%I|O^7V&L8tQdZqg7Tj9rt(MS6=qfbuKb7c6ILP~P=2EP zosEO=Vggafln`{`kuTQ?GZ?HQo+QOOT z9l{$Ong7}-Y~1)3dncttGLMU)9@dYzj8x6t-@Ho*98n&*MR;;==JZ~1Z|3qI;fhoD zo;ZPVIc$SdeJ>VhHsNXxx8JS}#q7!uNUUwQid_t{L=-8{Fsd9E_Udc(|1mz31cb(?I^6JaRZ zOzye$B}*=ydBfR%5-yO9@4d2IXr z(+>fwmj~Z*h2;hVYeof&)GC0`+b19}sRuI!+(055HHC{*^C?{$8X}1Po$Hc}qp<{*!Dk8*^uyoeAHZJU8U%?shoMt&Xib zYl<(OwlbyH9~UkQMhyC~<8{XJKyk#ND=F6NBZJPshK^b8abrb?-d)}l>3Pm>xa~G= zd5ie;1B$=2vDk4S7Tj(w853+Y)IY!XJ2L~drKL7goinzKq9^I6`gfQW4iB zl2x2%Fos>-71gXdzIe8N`N3XMNYqZh`AK(2yynh_YGNH8OI>;CFJ22*)VG*q+r7%> z`^<8{Humn%zh7QzyVl^S-u|WnM2=W>gQWLXXqjH?v~2l46QA&xl}Y1RW&YR{?x?Qw zy0NsUFij`?*r{2|!NL28 zsjd^jAOi;(BavJnJkV5@q6Njrx_pnV*!;-$`QZm=?(7`rmYGiaFE&qk+!E>-H~;02 zBJE6QS+!@+L?QH>z_N2MTvjXVl;wk&Q>BefNa&bv=T|ex#<8>^A^`R?a_9izLs%{U zRyz#ZBUff=dwWf5MPreXAx*?dJ(G)?HgsNDz3k3))2?Or<+tCQr@YKpImX9s`YD@k ztXaBwY0)>8)e|o6og%Pt(%Ag!lmACj$e`|sn$To(P86!}giq}j+a3JN9kL(9`Y z{Ef9%UIYG44HLEL>^n)PM^>{TZ54Di;NP@qDndc2gsadLfSJs%0vZVKL>I%adq*nDoUyd%E&iq!a(OQ%d)xUk{) z(OY-yczEWP&E>UgH_q6-y0LLVWXd7s-ICJD&CSscan9_=7?KCFDf{<77Yc>TaU%cy zy(5Q9OUuirR3tkZR`1yN3+b{+bLLELcAB(Dw{0CG+Tm`l`qF8*ueg}y4qyR}!j*y$ z0Mxzk?aWg8)20S@k!zRW%qtMWj59&|43(l zRJX}G;SP2*@$+4~exA6>qSKlWR#hD|Yju{)(cDwjt*ux`iSPOxO`=Czlrud(#EbK_y0L1SShwjawriLP+%D;20XRBpcdlLLkoHhta{ z^Z{xF;tp98FCrCAgdqm6q(YM3jowOiLFwCZj(R6>PGxJRo2b$0UM!pZ&2S<>8&R`n zUrgV^M@nVkc9Q|AcjZ-*&4_qD$p(`w8qDrlhMGW8GnNH=QI#WB9u9gff}qu! zbQZCAL9^FW=p|LAIrKz`K!ZhG)m9I;zuz}q$8H2&*a%a$KunOLo)9!W|Th6I$ zoiwXyoGBg(hea#1+5+~Vw1K&p){Ik|XtHRPZl(uZm)?Z-H6oK4I$TihaQbaUL3@d@ zTvsiRyTI+9eBZ^Df>e81UA(Ofz7Xx*r4?S!lybd@%#`(wOq^QeLacmJF0J$!MEwC9 z1W4TksMIEu*=ouJ(PUsHE^jHTs*r3}vyWK=vfgKd1B`>24GzQqOWS*Z$5EYa!+WM| z@4c_KuXm)KB}*=Hmz!{J;EH=$7dkdzzy@rv=rM+bVv4~K1p*-uz`UjeUW!S8 z03o3UjIAAi_nDP!;gG<4{nzg@J9DO=Iprz$b3a-so`jY9I1>j66mTJ=@l)$fIt8a- zfa8&};F79ws#SG91uJvZ7d3mNzp6COmD?@8dbisIw|K)Gbrxs4M4>B)vAXKw0(-Mu zFK2j#tW2*P9+68698FNSO)Il33nn{_;Vc!KV{kIS-w>VoX*u#mvr4!&8GV8y#^Wl3 zoNyfBTrAIg#z^Iij%YMePQ$|jqGkzq@_DtxX0-zLY~)PsF1^gC@L183@s-?J4nk@) zXxVCm$~IA@FA9egYEEek1ls&&p4I4bq;|DcrEAt26jFy=nx$o>d1Vbz!&7DL0fk*} z_0V+QbIY5}SCuV&u6up1g?L;!`r&}3Di6xhT1ghHCIw(Tse_keCZxa!8>CMEC@gPmB+B{eEN#oA z1IAc_fg+2Kz<3QQEg&oBsg)HQoGB8eXNjW;IHZ6pDjz~C$4PQ#GK{|bx=oh`b&q|v zz1ET?{889VCXFt+_VV?SFlU^%X2a!uS)_n{=YRe%F?-2%{a;~HXGR@9(J^Ypfr8_`djf#7FG;gj{on>7Lh|!^&$cLg14JiQ18@Y;(tRcsrUG z3+;eso*#O7N`aS=bwnIyon$&@w6X#g2swm6!^;6&2#s}x&kI=yAv+`PiDpH|v|Rwd z7_Chj>zYZtg~AX`Lo5c=K`Me|#9587gAgM8 zsU=O3_6aq+x~*BG8%oC%=ahI#O20kOcJY!%vgm{TTjzJST_v1)a*2NQzy{&z26?Mw zYz=Djv%|PD17Ve!3((nH1d+{kg36>_HLwOjNdpL5V*u z=6|HfKUmY*pv6QRmWYl&qh+8mnc_e+Q7Mrs2td3+mLH7y0U=4O)brQ;?-hu4YAon2 zXoRmw@qPYZJ*BY<5Wu$0BdK|9;HDCKwmrUW+v5bdkX$l;yD&#*1abG51&xgbAU1Ux zb!6{$;b3k>%ws31MT>-#o$a9~Y|A_=ctwsQ&Yq%!2ZUWXT|}Yx++VnbQD=kChukQm zE0T><5$KBlSO>8v$U24N;?uB6nt}y+0ebqEicfM>D5AgY)k3dW-V1sV^3vJoNQr&a zBJpEfLz9H)gYk>jT>&+=S#6;qV-(Ai>2UrO#wOI-Lp9YQd+mhm0yu=YN#_hOpOLq$ z?L9sxnRNOI zjpoF3Dd1?Nq=(lT)F)18^w>*EGJDnP%wFMT?A2>doKTD3JjFkScnu?3s3c6sH9D+G z#SsvhI>TaCS~25#c}SF$Da8i`4r2pcKmRPRctm*N(ELB1MmX8lt1(|jrVAGx-$zr- zu6ULhZ_G0o{S&6_I(gly3$lG$*{67$@<;matPy_w=2j3Nu7BpmZ`Qp`-1}}Mwm)r@ zGTGU_k*}<{?&PjgqfZ+{pU&8%Gd}HH`ZdI%3S+VV-*Eir`nb8|5H<~F?$92LJtrl! zJ4>--?h<1JiKIVCi$pIhx$7(s2YNCi$vWLD?SXxuk)pxS>T{t0Bc@1f1{fD%mj=B; z;XosWnIF(9N?{074C0VzbMT{43=jkn=!aQWX%Cn@nvTK|UT%DjHzyls7Ntt(v{h?$ zkDA?f&?g&Ss5(v`==gmmFs|OmcH9TPRnvXPokB}G^#oBq!5}5`!PT!K7QtkCme*%z zAwPG2$`y@jw66f98#n)Tc`w2!NhEV(<}$+DjO3yxop;e=xQ%bQsx2+kN)znAayW6$Ci4qlA^oC@uqVxC@94?~JFB#t zbTC$N#^8$9-OHxg9m?S1`8#T)ET_vMMzxja^>TBWPVXttjkz_9)TmJM3<5VCH5#Md z8h^YiZgy#93B@mf%WUiBbrG+F z4;Z|sM-ba&`ZK+bYeOii|R4-PiVHNXH+FB6*2!InG{fP0yA<503J#ROk-<} z*re(pQVIiHP7%pk8i5N!42ldDFHjEc5*Nj#@f}fyYvLvaXu%m3ow*%!j)9RDtFd{^ zN;wiMdSnK#*86b&UzRKyQ&{-w!X-1HBlZfXcfBwCuU64Z$gcNcD~PmT{W~Eod@OwX z`qnE_2gv01hI~${)k&pSyit&!&+uBMx^ims%5e^pJlBQ?Gf%3w=Wx8!UPH!DER8Bk z%AIm|sIKnbiS8n`&%OTZ{y>XP>+}bPWx4ihTs+9vd|F;LeQr-EaCpYFsV>jMH9gn0 zXl?)4mHFA(eATx3bxo@uUA%&DsRI|cC$G_}(F&OA+WHk5ElBf>RSTFI)7Mwv?s$g! z9u4kp&*n9wdeSRgPGgCy>rnHsxKZk>D3m%u!f{r%SPlz`iRO!^Gz3wo@Q~UKASs|p znM26XjDgaCXie_?gU|l{;N{N*g3kzh(|>vxFm*2e@SoBTkC-2kxccf7e68T> z7tWjYCb2(3hP{!_5k7fy7TMoVKJvaHpnJl8NM(n0kkb%NNVF^!RizS`MlkbYEY>ox zo`BJov6a(xp04vSIK>Ni=>41)8V-i1I?O*>+L5Jnm0y=NY5M$G(?`|l4ai} zb05i_8yY@+(##2C{mY-fWO=68P?#bXkXFdHkh)j>+6ek`gLtm^RV`%%XTz7+D3Oz z8rxE?({WRsGFyGT%E#D7Ztkk}8qs~&YcG}AstY1av4oRYfPwxyTz3>nZWiOKLHqq)>>1s5FqT!cnZjT$io>v){#=BbB;qt1GGS*1GmWAB z&%t19AH`Ow2g1hGk^bj?K|B~zMNog{pv-Ih4;cdn{JA;*EpNa;bUhgw+xPG312QtX zbQ)xGi=-T*fK3#~AfXu(mi224wJiu1$y#_nBhY* z?N1NAx0fjPJxp@yww1qs5r~VnzUy3`LjI(8{dQJmaFo_hZya`>On5()3JPHE%*d3Y z{4VAjBJkF+(2p_2V93OblQHR1l^OFE#d9IPn|^6L{ve`*S1S+xZA@Ndyo$Rrm>bn( zdAC+Ca4mL~b*L&!bTzu>o}2&j&dH(vBX;YbrE=jLQ%~hP2g?8Wq*^x3-eYendnob0 ziHBgAc9G5fXZ*ve+;EJJ~ zrU!<`Y~@l<3P*n1t2Mp}7=}V)`*iTvs6`=Jt#jIt(Fbxm8m|M=kARQ|rmvt0%^yj> zxl-OAVHRI-ODd@`$*MX#s}Qb~Ox*V~NX`Y*J_Dt(3m;`Vur!6dL3z6sh6)Q<^GFj-iI~arAz&Pyw!emlrWp$-_ zp}bNZYnAnfmWI4V*A)qGL~@D{tON0#93{ueQ3{piG=7I=baJ47K*L2e0PUk^v(nN_Hq_^KsVXqabL;TRA*y^fdwtP8U||3%%{Y4=vh##I+~ z>Jq{W3Hi91!VX>HMvtX-Od@aJf_+YFO;;lC=6GfYfL`VD@$}&MZ5C_I_?o<%7u;d* z?jGlQl| zhSFC)I0?YGN!x?8q>fL7>&Q?L2@6Vzz_an0jg2!4pDI-6C@W%YGFFku?(d6L)P@Tm zj>Nq(RG+Q@?h7HSFnTd&t>j9uqcNq`_YX%#E1Fe(MvxfwdXto>Yv)%Qey0j zk+MS&10M;|?h;B^q@2af*$l)Kh9@n~*|<94%MXPs-}ob$_SRd%rzHLvdtW&H&9$p< zC6+(Y6s0Ni9qCCj|PMBy5(bAJooxH476d1n0HDI&v_AL9~=?{dP|bgwBak5^Q=lfjY7T})HDR;6N|8AhHZu`6`CCI7&a z)qZ;IOB1!)=&Y)X4JU9L+Ftk%#5q(#{Ir)LzB<#hLZw+Y8Jtv@0N+XrnmT|LI?BDrrNiJgMIV>QbpV^ul?g6 zS8sh^IPw10qTy4!!kD(tj1x5OH6R%&dL!^bvZ(b0`Z~3*m53liw3!k(9jMw@VogwD zn@H3IxCMnJpo$<*fgcZRqPqtR4puvWt?OVfJUdEYbg*)*dVQVn&pJKgw53IB*Az>Q z!m+aUc)XqbHr`%_wNov#Lt7uNf1VbG%bo9c9%e)~n_b2)z zS*F+3)#>z7X>qaiHCzmBsXI)sS=LqD66%%`SAMuG-X1S0<}JeWvhHw8aj;6~^6Y%! zg`HUrUF8#JMwUzm#~4G$Q(8|MTd)rG6coo((N;y9Ev+Y7O<~bMO{+(&Ct6{&qEI=J zXabW2{5n5fRj6f34-Jpl(5VMf5_?diiGLo~Xm~xJ^KuTa7leYkg8XDY>B{`R2?&O7 z*-hmKNxqNzU5YGE8n~L9mU#1WYqFgDmj~|oQtI%L(xD3xn0z=?h&`(>c`^FbpfQ6l zKqMbK14|KK5aJ(X0}tWj13;BpA_Lbv8qkkmk~6zk_O5hCTzgh@jalI`n_T3w-Snrs zX60=w$e43%>C9nQ-KeEYMhPF8T`u#QbzRGsjV72(-KO&Q*KIPp+@|$T_xjNYUb^pG z13Mj~ZTR31CYuv-sfG-`;y^)vdyJ51#tr zexk0e628upRT7j{d<|gw%BhSYB(<#F5K+H9`;|;8(G;YFn9Dfnt zV8AqTc76Dt(w~#z>&cBTz4THSV@dy=3>O}w1vfEf>}eIiD!HEfxIddYjD5?5t8h#! zbC`Jl1UAb4uG_or$P}Jg9n!z3T`P$1kwmYf6)whn3|Z6D{v^d;Ln4l5#faO%%*MIh zhqHFXb6xJ7xbUxm6=u`@8_gzLV&aBlrHvc!eqdvJ)8oeywHsO6&>Cc#Q{9LyHjpu? zDfBm8Ow>=YBdcae)7!IOHZcpZ8R~xwtK`Iw>sKksKCO_wgt=p@dd{M$C~Rst#Wl%mQ`*2euFzN+Y!(PRk?B*lRc{ckhUVvz~+7*JzTDEd29}5?fTlJ z@I%r0ZRA!qSXo*DLV{5ZZeduDRGF_f9rG!(*|h`+B*M&K3tLv7H@sqDqSl+J*N6Ar zcjWr>82G~Yu*{?OI>J`Jvp%~6Z9=K{wOcinwHC%1pSI~nGv{1t)$45RLakM!1VV^t zvJ7FXL1$%Sdgr6P#i0Oew(E_iyf$Z+o<)#{FX?u~VvI`n25*t;q!8d4Fr4Rl{muf{ zScM|rO-KisF~bsy+VTyRrVgDVKH<*ia#@8^VJerY`o}qQedPree7=eesUIj3j>1Ku zQ^6LR%V=cGN;A+e=?!Dm(qiE1>6J4&t`XzQKY;@+mrO%eB?*8S8EXjIi3lG@8-ag> zT1PUyOoY^do`PyPu*(Cd0QMT30+cUpM-e#YgN0dcPkh5s;qSsx;p5j+(dw=dU4TaTxMo8oD!HI zMyJ&oq@0=*TJ!VWW5ph9nGFq{NkVGd>IfSs$X@gE9m3y!yLiPPh`V?4 z-5ZvTNP3j=usLRTPad;3;u-1E*oO^Ywdo*6GqAV}$Pix4lHHOu7!P!Ca7F1Spvpla z0tMS91Kq8)q@HDMkg0(C^szET?+_Rva0t4-t(@ix!WmI&PEX)iFtD)+AN8mJybq8! zWo3#2)(BQMHd@cr5t}%0a0R`4ybbq_*Dq}wzh?3!A478$3;qO;D{EIera!rS}GJvcS^Py>|TYrTPiKZcyK#3eS&(>4A)q-m!fF zy(9j5n+{LZ;lb982@3=WJ6tv}rlQ`prcllYx1v z{)$s4m`Bp>+*@-Wp8e;!`NxC;rdBw4OL=VTt}6eyQD4=|m2%GQ=i2UTopJSeoiD5; z*Y}^)rVC^mklrKS2kLJD14XwQR2VO?hz~P+_&76f+O z1UD9EkQx{%tJepaAP{f>-C3BDO1@-_TUy4DVsc!kvFX&TP3J^69sAWIy7Fe=B)K z@;)T7(+G|90VGg=rX8Fy`$I0GF`k2|g{5HO{XcE9Khr*buKk?5pSCAFoY?+EyW{`I z>;GTd=ef^w?lzyK2BA|Dx+HxW`k%AxKmTbh^-B*tdmMuXJ0va8f4cJ76T~&zjFYqh z{vQ@nIPiWD?OakUh2v*V6~6wt)d$ZUFogH$XID>ATA~b}40HBDfA+Ng|HH9EE(TeI z0iH?E_3=IMBO?Agve@K>o2wGOR z(3=6+y(7HS|GWsTO9?3vT310r^Z@sVAJP*(%3$j<_LLOtT{`HWrHE%7gPw?~mg+r_ z9jRUd_&&s(0kH>Z)Jix2Tg7}aFfs)LG-*tD$kEtG!c;RF5T_uYsUwqWJ2uo{*}1+( zxMy5v$F>%6K`viKjE@EC8*`h#sBcWSKf3hpqhxsPq)5&BPP*JcW_ONj+15c9T&!l% z$QAqA=yGrR*yvSD_O*{*z2xS?XM|5z6x4cD-II4sIQHvR$3`xyY2Uj7%eH+h=C2;z zzHiB@(d{=cfo(5|n65sINi;ST@)?Ywbk<3jGOvm^W%`!S$Y(-G))Zp$XDlDT`<~t7 z*)OkoHr)Rr?N)3&{OmQUZ*IQ%8+DNhOg!rz&$iI-kjfA8{@#bcMJTGBUj z_iYgVXF>Nf=|__Z(9+4@JW5QLzIU0yyJT(2-G`oP>%96+chjaR4|iqVwRXh%aaGQN zZ-_4__CGJ|KY4hQRx!`dIsPwd0}_psc=!Sa*}EXAng@P(j2M2DLs!h8(kW9DTVg{b zCyPoM>Ipk0>>!&i?7eDHw0&IX{kN|^@9>iw7-jQtvX@-HC3VLw7r#_@xvH&rnM&YV z79vRhcR%)m3D@-hW5u#ta>|xgj><6zPe0Z@U3lQFW%IK-hAGY4AGmkxC3pNb5F;0? zt7s(3PQ0I}Yl)nWGWcJjkOR)3B`9(;K;?O=1Hi~aHCV*|4!%Qq!Ym2W2(tjx1p^O_ z%O(=pN~8r>y>Qi4FQj+un(uPW?`-h-Zs@RdnX^{4&S#H4v}yB04{hG`&~D*hM}!gT zr?;R)*DA-ba+@6&|HK#D*WtGz@tjzwsk8`KFrG#+`- z5LQc-7OHrJ={KbBC}Zi{(|$)$)6f=07#CmzZ!hm%wyamsuk5Or?kFp$S>v#m)^=IV zU2K2GGjgf|bYX8Tqj_c!X9oMHg(OF^ZJinzx&v$*9lLN@M`iJsNIF$**kVT zzjKEKY~!aVNWTE)Sp%zVKJ?@fltBt^XFv?`wV*&*UC@|W(7P7Utcr;!uwM}7prNrQ zS_7aG2}e!PdA&T%4k|+cTm&TvHk_cqHNG5Dy_Id&F~U^zeU(h72rwh_4qaP+UXhRG zo~eppC$ejr2eTG{K)#HpqEE z@fK$SNBuA-QrH+ZL!f0;6VxAV9ySVLAjgqrY5Ml9?1{;YU6Gb3>+eS9g^QHrKFh_1O$xC6bxt*_Sv@CAs7DRfH_Dn#k5n z1@u25ZbBZ&f{t=rd_M^!E6RV3_YxHlOox8-$OQcqXO@^B0ind_8d&nj0plnk%8*0o zbA*&cC~-ziWY#k}QCj$vDdK#V?85RRvI_`p!;Xj}7<5E-7=Yp?*PdCVz&Vc- zBEtFNV#ruyk>moGM6oafY*=FK5rueA$6$E^r8Ev_ury07HK8;l+7k!M0VKfTb!14a z1UJw7JK>_6a$HtEYx|PF90WGN-4pzW@W&f>7X=+M@479-_Nra$2riCo5+1z&PrWu@ zwom1`=-2y6{ydAxll#&+ejw74Wm*wX0Ymg2Yg0Ya3B0 z3wwPz@^EvlI(y1F&LBceBMs4aEuh% z;i*4`b&}7$ntt3ToaYt3@RCBN)l2q!iNTA$XTbj}6%uZxM2i`gX0)#XW`7)Fd z(F7vK2uy{5NYnCC0Q}GH$gCqE92{t+NJ(NsY%e{|ge`00+^x(m(Z+~SCYJ7|b0Byx z=twZQh1fi+NmeZGV@z>OIkYt(hcp_nDAmydiH+U?#veV=C>5X)A{vF2fa)r&NkQ3(-heM@gEEYzonr^c(YK_IBQTJe5D^-}y z3aOTC5#G00lrlYIG%|Xba=OW+l4A|qa@9dd-XTCLuy zCu%j(TXnB%jZPzxO4Wc6z-|u6`rNxN?Ek06=pNtm4DlM`l^5Q1$5)I>snsge|N2U) zDLclr>*WY%)l1V)lD`wBOr?-%$l}x{g|1v9?Fz%iV9^;;I{r3#nAUQ)exEvgl${dFuG0rse z4kn2ce!=PJJ1fz5F2R_DQ4^DxIBX7xGd7vQPxC1g3bv*$TsYXo=848Dv!H!b{R0k+ zOmGOb^8(^VZLl=vpqfEDhItpSjRhnNEuuhe804@&635@D88L=96vkhecM-U11vsLN zKjMa^>m&eO0C%NedfQIcDAmFr)MOToHA_pt<5gN+b*&dc+(gK7AjFs;wbyawo z)%KMgMOu#AE}Gcr-6?5w%-t+p>QR$Q^+_W_;bNrsq=Xsc^va5@P_94{AM@L*g_ANh z;grtUynKa@Va6}LbW_*fl9~K+`NeyXdnQt`imwg+Pg;F)6_T!}(@*rxML`pvv&Wj+TU*o7~HYmz= zLDV=~8vogvUeI#K{*;Ub@iXDs)c!kKgx9)f@eBig0U~9tUVb&hBlenM_*vb*pxW5f zqVyv2k=d!2+t~o3J(=qfrr2(FT4)|&K1;#))9)*MAj5N-$s<4$p6zd$dKml5>Vbv= z1mPK|rrux#`v&PYo2d+_D5wp%5eh+E2);uT`?Hk*Dmcf8dAyRxOLIt4!7l0`!REea znuJf==W%L;pAb%}TG%1H*Zkzuzn~gETe$F6nMuw`IXGZ%UAT}Kh;z}R{W25B;yUX6 zsFN>+k7zp(u|(o{lX?FNDuMozUMkiA6ifKGp`^g|NSPghL!c82rS<&zcg`ZM(=O}C zX&TjDU(_XBJ(cjQ*Od7x>U_WK1@G3`Qe9)#xJ--EuM;~Eg8r__KHX2fQx4+Xf6+T( z2#UiS#8LGM;dVd!3S6pR(npOSqkES^oc;yRO^`yWkDijk@k@IlwwxL72kkOJFoh+M zhr0{U4A2dLH=coC%g=w8ASGD`Op#&@Fq&c*G=Zic(>gOCMl-1taDwzdTk~JXz!Z`P zF*_E?uX*npxn)*rlr?Zf%=N}0{lJ+&1ctHSLr$Jq1FAM0?{lTKg_1t$Uv zBW3hkVWJzD?=tPL64_~||H7|DLBCXPLZ(Zq2vHpf-fn=p^iVp{3vE`t$hs0m5v7o& zB{%^(_s@P=0wIUyj=T%$S&)q7E2qvD{9vt#Y?xrD`Pr#Z%t9=POLj4>7Og_~o+yw^^Ow9b@)&2% zCAb1oXQun;`x9k1QKIet+xJhvb};1^zF8fO9mQB{qrP*5BO-jo4@vvOI%1#Lya7{&d48vLyz?3}H+{eE)=e&kL-c~re%iXYG_KKc~F5+@dTDxx4 zfmJ(iJ9_BBr>bO*rs@Wxuc{=T{GZ$Em}j4}T`GKit24jI5MO@P2jI=T;FY(9J;E2y z^&I%ea1uM*_pf7p`!^F#9nG3IW@7iODUZK7;L{g!&L@zi zI6P=@hVEwI!;n$XpEH^GVA04J!mWR1rU(xT5C86WY$?{h5gzO$dQ4tlUO`5t@8n+k zo$xTxr0--)1N|>q@+|!?1p;g-R!{&-&IM%N`=Kpc`rjeD4!wWzBab{X?R_#2^pjs~ zAx!8H*(KbVn|?3bmVQs8VFI>n2KkAY03`YMC^;O(gVPt`*Fc7ym}!$#6~k1Q%Rttl z*blLyZ6fX-ehw+k&R9aFO?sHP&&!K2(FnC(X1)n_WwL6?mt6Mw-JFg+)rwHwdp^Hl zs``!#XLODr(TDCL_S?zHKmBUMW%Km)>ZZ;_XJLt7cAX>?j-E zUYR?pp|P!NN&UKenErx4th?h=qWs&P7d&1b&0TR@)lElk6+XXRY8Sp-w{w=cP212^ z9&gTR?&@mJxoY*=o#!o1HkMWn%M|ROuPTnk1O9i)y-A~L5-2|>Xdsk@S1GY20KzCs zM5V|hi)A1xGiH^Gxn+5fz#z@MnR(&gq5n*uu>IiEUH5c7ed?>H-R`HmnMSf9Q}6=G zq>5!{Ki%E^G*Ih5ffUwahnt>CuW(Ss6~VgVm|vPs&W=udbu%CQjA{6 ziC_{jfE}X|4TFc?Ps2B;>6ZrM>A+I~7!h5e3>AoY7lYjkIA}ek)?%;RW*oqlo8*6f z7Qy1NWQCt^8(uQM6OinvTjv6uV0M0vRx>|3(rhAt=-%4vkFuO~l-oToughfe1t8UHkOQTpF4kRD`LB6e|+5u(v^{W#I~k}o*RR`YMNxRWGzrXH)680 zL_$$O(C`mR9q5H*5q-i2YcZ@=G>TCM3kHxtwsIED45bvhV?z@}Y=#UVAKEPGUMx#+ z0bB+H<-lRl@(`GGv0KDm;)Db}MLdf(1%R5*1j9h#rol01f@LTSo?UoUxMg9LC$HhU zcMJ{bzl^oIDre5D^qRVYyu50maLdt(2E#koHRP@PRIB~O*L1kDyQpkxSy6Z8;U?cF zTJ5L)#>3T+$iKURM5jC!ODfChttojbXmuSf?XzWrL{5`p*N{$coiWI znoB+ueveq0-+y??B_EO+#IDqQ_|Q*ukhzW0SMCiImsI{LZ-SaJxNFM%hsaHb{1p}M z*-OtCJ_+3W3W)916Y_plS;9;ioiib4^wiGVnv7p5m0uZ~ZtI*X7ESB8t=agcQu(E^ z`L+%w(#WVLre)fq znR7$!ot>e`T_Yrdo%hfB1z%-qT$6QEyc|2p%~>48|#zg`tjqsOT!yIp5+rt=IdBPbKK5`=jJyB z^+%eLTHa^Rlj|-RWkDrEHt255c-whUEDS7^_m$^s+>R19y? z`@uwlI)&{73vrf%Mpr_D<*3|fDWyLOL+SvlRUAD1mB`<6=uLiGtMn> z{$s}8dCR?fs%xq@Y*x2od`NH+X)?Lu>NK^gr8Bbl=(>0Sk@*c;% z$1&4d=hbzWc;ukYlUgD@(!WX%>MFJ4C)TFF99da4dQ^3lb@u!@?9|$>Yc3%#y`Wa+ zW^aDTCXYmY$S&y3A6qFLbyO~Dzq5wR9)G@@vmY39#o@yKr}8H==S>gzr=<5ze&F}f zSWVBQYBB?C9#3_Y2eUUk#R=DL?XyKz=DJY_3EOv;R3MzL6eK4un;VCI7+OfxSnX`R^TYKhc{kv_@ax7yJ|`TKC_x6 zj4anVF&a`>3>K9h)-b-h%{(?C2Q)nS&-jWlNu6AqlxN@96>MHLuEFe6Rhu~^t1Mch z;W@dnEgNPhkU_p}@|&yl);jeSB)6t9VJWW~*)nT%6+gB~Tc##FPnQ32aqe=RIm_aM zk>;jh=5Rp{XP2I5w3>Jru}D7n2c6~NSk%K?ruP)(t~$t> zPm4U^e#ppeB8M#PqjcC4N2|fra^|Ot2@d8!yhP&y3fQPD5u&Ujlv$3VS8P-w4S{=J zEMb~UvU3|7bF*1TY0Qb>% zWIM|$IRmr#?H7?vp15z{{%N}Y!q+E0e13Sx*Tnnvjve2i{ZPBWY4i z_f3B#ykYcc6(*|?3$tuc3O<7u-#s~(jAmyDfwOmiQ#fo9@BaJWX|tndw$E}>%jfn# zdl|F2|E~kjkeL_D#4&-&ANX<^UAB};h69}+?Ew^0s1(s^4nq%wN%7-Sc41nWF^Gts zVNl^pK$!U9zI%li&IgMBGNn#0YkO_={3kCTGv@Lq=g&OUav4oWEdUi5i+Z;%BBpEi zA@VSNauB?CT!iAWZsB>#&2`Oor9*zXf>F+xkJFFhDy@x|BLOzW64K1vTjnfT_wo&y zENw~f7xci0@}qatLFSW4vb2m|l*2(D@}p?7twMiBvKB?~xd+KL=Qs{|3B>N92MLe< zn{TiVJ1}O0U1!^&eVy0B{Pg*)$B zvno3r67>k$Uns6^Fz*OO5H|rCC80KIiY^@LaUv))!AeSh*>m@uvrV%W(KMB$N9bkx zD5!6M*R8j|_xN$CB%O8qY#|HO>EHoO^7!%oUTP*CEFluGIbfTSq+m2orMMsM5rADi zOBpwCm^cPz#)2^Fx5P@bhoBBA&mKl{%%fpCuV$efV?r(EUkyv*5(%b$Hp>mUmWfXNs11uDEuozE5 zR|)R=%UMtGbm+g-bC-kp+AUH8=NYe{FOd@o&!* zdZ-eIIguCrrV_I<@2wrT2i16TGjJlO|I$$s0Hk zS9X1&pi6~V@`QNp-ho>gjl%}-k0;9DRK>dGfXm01hn0@?Gv}Cq2!Qr71d>OhHa?t? z$^c7171WpRQ!j3h z32zLGMu(A{7+M0T{;BGNu_?m`Rgc+}W(}bhhTD+4?g$+nGG90|Q3CmJ&Ndy<=;-yI z_J`>%KMo51+>t-O-ybjIIg#U`j)R@S%OQZ_M>nV2nOU8}_4{Zu!D7fNll;lz^waJL z!$e%n>7U&FAI>7Fv>F6B~0i|3=)Q5JAE;XFJO2j3kToIaVB2zXbyQnZE z(dgOLT@lxoEv`uV|8NSqT%(-NkU2_?p{!#>XH_^{)j0wVg^6eHIu4h_h3V%OeI#Pr zr7Ug~y#w@wsI8ru005!^HVDDenc9payEPyOfNEis&uDY}nKb~coxp5i;Qm2oXFh?d zhEbYsVkG~SUDp2=r8+_aE|C2Wu5o>7>`(X6nE;661-5jO>Fb9lO)N+P6fUum#PQ>_ z&cvlS#-p8zIw0g+*uOEpa8ZH@Dq@615NL3*5Wmv@4Tps#yL)dJst*ghA0`Vo6yDyu z8<^*X?O|c*XXKj5LasWp0LW(?Q@BAqX-BeEcff)W*J&hkBZdB{HiUf^%J4OnQziArTgI@?1AXGOO^WKk$=5m16h z$|*KrKs&Y=66IEQ!R7}y;~)8MQ}^V}n49`Rv!v6aIQ=Sum@x zbQx)ZrIQH1US3j|6^C5*)H#l)X!!;?=F{vJM!j8VCeV@68m(2)vKr%Z~PMQw{(FsuMxco}qr z6XO~q*v4c;U0kpq(+|PoDc%-gxSk_bi#8@K;ac=yl3AHC zbIpcH%!HsTcbZNaG^T&|eAKM$(8)p1YAuYBIR_i1CWGx=il3r+YN#J4C4RfJ8R3GE zTPyG#@%2P0j}8n}+8g?x%CHF5rMwOZ3>Zr3;Ew}dNIm&9DO@_mOW-db@*hGToZM3Q zzg0ZqK~hUc{{ZAHK|>N!ry&5c67f8&4fx~5-~J@q*Po=L1(!V4=l4apw@-;!RW6yr zsW}pj>v z0P9qg`B6D%j_ummwQ)Yvv3cv}5v*~Ka^&Y9e?C&VM{-)FzVwqD#vj}~yNWUFRst|Z zQe@3`*5l$4TiD%~%0*$``2fDD3jo`oj339Rs}& zqnj86MGcdHK2dc}96-?60JOsp1xRZYN+7H>us~3+yNF1KQ2K?@I#CGZIU+olVECxx zl*P^}g2s@7k8HbW-fx!9joVcOF~y^9EExUXvMai~XB(NZL?yfhEdD2azK59**j%(| z8M|)W8ll#$I&9A(4;Rg& zWJgx1I#GI+zzPovY&Z;g1cdlyTv$vCWGV%9p(#j{a^MSKz^9@jG#Qz-6rmLq_(DY+ z*oVSU;n>mytVpHjwqn_%mut(AAd6L>+*+kd3g0rwj;XuN;9NEQlHU+MeAoQDm>Y(T zUcV1S%|(%#=!6!lt$oSXo0%(%^NI_=u}k_=4c6~|9ej<~-2{8`39&iJu|#r`oeGfD zC)NOmpcyq)XrJ7&+9NQ`mh>iOtKPM0`rP5Rkj0zjS6v+-Yi2KOb_6U|KXJ(SmZuN( zSlijBPl*@f#kOfbQ#UkPA{WsHNoe|$FcQoIK6{;HpX4#gA0!`1en8$k2kI25u*f82 zExZEX8WogD&H?2x!Wh9*kBoapaD*8d)D>*%G+HVc0BSD?XGS#>56Yrgi`z;QtOdN1 z)x=U7Ehz<<2=-^hVU)&8L!#+Ntnd(Gs5q)1id*FaYXMsziXoN`vKW4gOX5^-w-(zh zR*TF{VDJt~k*pVxGflx7H{UzVDI>k00ROHuummRZcA9Ua;~ zeg1M=R4RJC;z3-7z5-k^i2)08g6@mbJC&Zj3$9|N*TqgeBz+a}y64{XM<)#I9DE>I zAc#gM`sHX|Zd{A9yTdXD6I+zl6L7tQvUWzm=4PaBocH9VW5!&1Wd4n*ZPRDmzG>=| z&6}r8owjwx^lhmd=O3Z_o}70hGe>5Su^x_>N_iw&;^ho75rGs%`~z?(OHNs>CZpAA zG?6=N_!e@B74nVAc+wWK*+Q34%p?qIqRkzkN_rNGP9A{|J4>ha*>zs8-|O*v@A7yI zPMT=Mt$VOgYjfDlY7oYF3pIA1!>n=mJ^rn7jmA_|wzX%kH&n%=z z%%6uN`rl$%q#@FnbsCLOiOf|<{fb)9@Ocrt!)UTk%<^Sc93cnY_Fyl43f!LFoq}$$ zjxBCH_Sx-b{Uswpp%L_dbCcd2tBaZK0V%^Nbt=2oZuZkvgVtt1)Q8Mk>&nh{)t2mx z`Ld!WtIn^^isJl^Am`?AqTa3{_K00=*IzMssda<9uV`M^YR<07Hlscmu}0`ah|feh zzVY?218?%t(4j!&i^zC6Oo$TH+0zg%(?`aEVO^jzBK!e()Wr$i7y zsX{nL7IJJ2jE`r!6y`EfL>lZ>qAwYpj`of??RBC<2AoK0hKE2nC@+M?O!TG%29Nl_ ze^M$UujuXK|K>F$l_3wJ&T8Eu>6b~9x&DW-vq#OC(Vk!9ZD=6L?1abSvUu!)?8>~F zP(fI3a$AdRIeD$6Nn#CW7uVMpA6va*#p=h%C8HN~)K#3q|Y|^eR zR~AK>-_x5el#>a^j|=xGD!MD$D}{%y)Q>DI6CS#V37t|`j2v0PeTyX($KekcnBy4a zXx2gxbpvG;fi^k{zOR=hf58aOgZMK99L!80X-dI$MF(SyYhhd5Rz`>4l5pmSWPbQk z#4ZQpvS8E_j0R<(@--Ps0aG$-Iav2mhR`6tErHW4fGLXuWDxnO2S+DNj5cwshxnhs z0PK%@nexFxL(qb|M>8WdoqNSC*%=*I+<|e@Z$ay#|7Btf5-y0AMkfl9!IQ31!a-2} z0FZ#O7{^k?wCJJ}%iwij#X_Vn6!#52CiD=JX}~xQqCVOqrX%XZx0ZVeFim3P#y+Ik zIJ*yF zd2w=HzqN6C<@D{2OB^jLdoEZwzLU8@WpLZ0_H4zb(PNPXgd5%U%K5^(Z@qQHb=UE) zW!lyfN5b*8X_=YvAg!IvmdqZna8x+{8hGT8_ zR)wlYT{m^zcIU;85nC>*m*wbuptyB~JX6m*f7Wt#!s7JBqec}c%12)CR*ipH%u`Fg z_S8fc7Ybj!hCekmL!_C)(|& zY%zr*;3?1dTV@fR7nUb%`@L~RP-j)jW&$wgNw36RD{xolfbbR3rB_ahCl0_=c zav)S9Zttv)n}qpNrRf4WY*^?0h450PKeo87y2Wl*EA(K&Qz-ZC)+=~s`F3upT%#mQ zD+W%{to-*=h#u*r?j>54(1Y}eCSnR&aXTA%|3_0XwXqD0=St`-CBPd^#5lefabH(R z_Gac`OsG`)<%4uFFz*gXoRA!W1u)5q~4m((-dPA8D<{IR3#ij*}=vm()!ss_8(ruR9F%d*4&kGb~_jH*ie$LHKKHPc(_WG2bX zg!DF<1V}Oo5K1V45Qx;!JA__D7&;0lMG!$SE24;s;@U-w?%I`AS6p>1aaUd4RoB;D zT}U#Q@8`LbgrK29ZNvq?a;IcW*mv@~9S511Xthz~oXu+4 zFp$p6jrK_U*x$o~PTU5sSQT_gXMIY>}9Qzx0p<#K&)cJ){SPDfezTqimnj+mM zoIrj5vx-x_$>tH3^EgE9TtV_2qTGct357-r#1Pucf4|Q>5Y{|Ec>yy-9(-saeD)}0 z8Bs~-6G@Mg%&;Iprx4jMu;>ZX)N?!1%3AVNTIn}h6~74f%t=)pEme~m=`I$iHV#i` zq4eR#Y8Eh9nzSf8E zj^v9#kVD9>L69yyLSoSxFyj&NKv#yS+-1|_e$EF)ST}g->eAPxubJu9l)71?N=z$E zn+EMX{n(BDcWRU?mD-M;?kDg9|A~(ZJGY=dgGd_TKV* zUPiS_qv11u$&00@AEE)04PyFH2U23766Kg{;f_L%E%x4as~g|yh#;nrk2f{(%4+j6%Dy|XN}UTnw*;`7TrGS zSEo1sY0KE{J}9a*;tFI4;8uxo?!?{=Re3;q|Dekg{?pTlY3T(#LG8@;Epi?|IX@p% zFekW+^VgKkziUdLo=e?B&MKi5{E%@x+ejxll`_ zMX5L={cGaKvvJ{DTKQVQ9VuQ7$k)opW`8oNEhJyt5-pEX0!=l^7|k+;RCMXup#~(+ ze}@8odR%~fk&*mPIih+_w)F6pDXZ5#GJ#vyr{hWgwmK$A-~Zv-vrBuc`j?a&dl}*? z;Y6=gOsuYGi0rs_{1fZLqq%;??LQ2i?-+Pq`sc(uURxm+_*1-96Z@o5ASBU-XuD*0 zqv^>A)#y4jq`|Erc$GR5B3Y^1$XP1oGqi2BlMiMTI~I}lG&5gyha?&Beq;pe{EJF7 z^3;KzciE=+(;b!Kq9VK2m*~n&jZJqrlG18(vTM^^cBel!HPe;os~s0TnIi9GcV3g7 zQ=69LaHP{UKfOghiw6ScgYqIo|6oLER}3l%)L0W!60N>*+|TZW$*7Z<5S!pIn5=Q} ziAiyBQ0O>tAW=RlZ?RBI^lV~$^z4r=jE_rjw7}fcB89qsO}uGXT}>bTzwzKT&}8-|qV_y-mZug_yK4wtYYKG8WOznTvzQ06iXEq-ZAZAM>rvNOBSoNAMK z;hpe4&d?=fi_`LG7!Tv|MsD$s5!}%%dUe-;eI-tCjt$oDv($L1l=b*`f z!p#u-YLC+XVAoV3&lE1;ME`^*77zY4H7#8uaQSJ)P&-&B`n8?`g|%xr)0F8+=>-X_ zuFsTeXQ_X{h;ZGEN9Xdw#8V5NoM_Ya%~*2H(t~%-Zd#V3PIdH33ziJcn0Ih?PcJX_ z>HSq&y*H85>$tRBqcLq@u{O!Jv{q$mY)DcY6MMyry{mWU?w`4GP=3?n)7kt-7cWeR zT~Isd)bcqe=B>0(?mfP=zdvCI_gPPmFuC8$HeSMxO@>uKaYg3cG*aw)DD@3&xaG_O zSO>5;Ih+Z-1ki3w2zUCiMpwM-6)UY;kZ&H+3MA0?N@wCOolH=NOn$fU&=qfF zQm1=tmnZC=D+(jie{%7_G(gdpv9NX%Di?+a7(3R9J?r<+1$76lu_$2+EXp3CZ1tx)>pbH-6&lgQC%tBZt*^OlOamX;Y zWXAQaWCe$f`PcOy$y*AKjp@eEc!Gti-R;R|qzh;E{Jp;7W)|K&YyWSV`b@0U;Vd%f zpwXVZaq}4_KNnA$a(~5CDKq}g4-mMz1ew1cgH;}GnMJ-tsR?eY@*FASACOl^GAv3p z)OTPGhS|T%o@^zU9|GcnCIeqgcEQIkh>iz7kCYgr%N2~)sfa>?<&(n2oK{DteOQQE zgp&q|sm_kM&Qx)b=yM4^m+vo$wn*5Pm}uj|Hg+EwgChzo!f~@Sr;&MX3`;nznd4-- z9`;`@hJ~F;Nlq#3%E{ptrY9z*Cq~9cj)wy^HGyz+$&GJX#9kP_qHo_7!=>Ic<#}N{ z=9CMV7jg(&fMRse73eEM8ut^!Puqk7C5I7!c+09$2U5b6Bl{G-KMu&==nDGixVjJ7 zqAcWfu5e1f56GVLkBvRH8B7Eo4-3X zn=LI!+hpGKf%Ln(e~{))dz#K}#y-nG@jcr=?Mzw$_vh-u!s@~?V@4OGrWM?D;sNRH z(_P!M9{3-&Iklj^{%+}aA8umW_X^VFJ(mCBCh3Rw3Mj5Z2dAy?F&EOeO+f!&E@O)G zP76RCQ{-6b98?WXVFgZDR8y3^oSd4BS2V9+H)_&C+AxYnLDP_;!X*R?a08@WnT5vO zW5;3O%OLcOW+gOA5GDk9;-QDCE(Z#eY8Gk>hqD}E!MK_yCvlF(mEXtlPb^t}+*c~? zbn)Jln2c2E_1n#EW8c*^c~;wqS({S~PPg7yT9srgJQ~;M;*mceJ_tFWM0$CtHzp>t z|Ja66NhVdS$tWcDFLQ^k@$$m;8nuTTSv=|L(?xDNE{gY}D{g z&mnd^r&qu75#E8LZZ8|*GfXu7O||NbI8LSFw@j6;fiY?F z2dN$3r`@$P-Vi(7T{|^YEFI}pvFFZ{_b@IqZ>S|dpc7pwMTu4*wpguciSdruob3aW zm%3sA*mRCl83KcE8=2w>#mqLxqCYtpEHH$f} zmJ15bbo7xgUV83trX)|T#|MT!`n#9P)G-#WqCzn0)qP)l^NknF)CPm- zaaRI~K-2dH{?#`0aQX+n0EDa&d_fZM%4Cm6$h#2WAuM{pnsx5bNQZxz*@h;g;ocb< zf?PFVkvezyRynt1bCdL~ya9pzjcuQ9Vc{*GZjbWB8&(yNE(EHunOyNqplaRr#`ZTFw{LG0@*1~uk1nC7&_ZepR2CIg z2HG5s&*|9b-Rl*H0+p2kX{O!&a7HC}dl7mPn1}vkIOnbpgHPq) z_et;X`;rBvGtwaG4E!@^At~n zEV=|`@*uL>(@EDb5rVqO%i--v*E5Nz$i2JTf^$q9v)s8}k)8Jas(RwQBa zL)qqWdhtwn3HVj1K^~gJpw+{Q#X?9pP6zLS;|aVUR1PSwaFf#RShtxrSr8iY{ z+BKZlZx&UBfS=0c&}(>~U&94>YpRv0Dvbj7G8fw$*(j;_MMmhfbW?expq7IJfog@zuC+)hx%PnE!D8%j+SHi zCzR!FO#dCn-@9R$$ZfDE3({>GjSZ^@)M{sn#b&d4V%0Hhgph30XxMZy*@kPNXAxMM zkN&PLUPCJY^rqB#3u?!J}DhkzR1Qur{-A8OD~z)M=Qnt zBjzCG)$1W?cOom6?h%Z*`m|DHtEyP#T^~MuTFnPwo;T@FGrdlF`3UR%)kkXS!jPA_ znAT4+fp_{WD>UwsKK(F@ZExq$5O%Z|`~(FlAIYVD_*nY9<9g{cmhk64SF<_Dh+#wv z+%^i5DD_nt|DQ1L6tYpZTMLPA-95e?g^z9G0JiYhrjCDZdQ5oZ!BCErm=mhZ<{LIW z!)CTsZ9aQ;bK1k~9>Oq}Y&rd+^kx(2&2_L)P-gF5=;4BbM<=1+NaQ!C9SE7sqVPs{ zL_&%yR=~g6!6P}Pl(N$HI%|Am6q`PApmc5I`9%}Uo48`>*iz)on3iskK9E8yXYs## z_SCk+3)qm??6sBR+|^Q&^z1cb-(XW-zoBy6;>feowS&g7ja={czHB;YTQOnQDybZa z?`;K@qn)p_nuP~9KhQ}Vkmu`PvhOcZa&prI(?LH_aceO=)r$+=3{xGkEAnxk1YKuw z5aG#mNX`!BEOx499Nx6Xdf-6o z^Y^Zuv--htuiSUvcfsG^eDI?Oo0qJ8bNQRc?|Vg9)vhibfAh`bON9&T=gw`vtF)4j z4BxeDcn6=El{$ZZ3co|R<#1I;U17n@d0?W6k3NpMdA!U;Qv?=djbG9`|Kj;5j|%$I z6KO@JEig2G;Id7$x#WfPsmnHlwy}_K{A%0c_OI@0PrK`@b#t`8T0C=jHp_T=f5$$< zw)>8AAKG0mdnA<}03atUBVW^!-A_xYPTrm?Zy&(&uDiba>aJzaBYbZ0ulhaq*L@xP zt4ch71kLrM4a#L%LI7>2JZ*${lLQ13%GH*QZ0`Yh?Un(xdjS0ThQWWg9x*8sL7iv8 zk983um{!7@bv>-C*8^vCk77TtFpewEV?>bZhg^^~P?_2(dd>OcAD~5@J${susOJx^ z0=V<%e{{ak9{iaroB=wEK>wfo5CbDqf0{5D!p)1Zfhi-k+n)|5qiALTI2{Ial%%{? zDmpGi)Z%SzFLC?1V{I>uL^`ABzY60VV={g&c|F@WVvcdnD*RS=t~)B1FxygQU&?IQ zxV+u|xOXYi3|@Ks+u=*Qp6m5Swr_a+@eLavdrW%I-?x8Xf76tBKDpoIq+m&Euy#bS zSGqlAuo2vNn#N^_cf=$G10JZQc1x$&s7n55$5iQkG5zJ2rFWJty}8H#n^JN;hLoHX z`sqD6DJeOg+(|hpIrN*Di;(s=(|+_%x^KkND-SIlk#@y1@%+@sHbzU!u1o8s0V1|N zzpx@h>&QyZ$yG5O@(u&TtT!|AI$p^k&lb)1Jo?^JjK5uwbxiORzfy(;hx?P@JUQB^ zSY|XP-`;xkXe%!rZN2^WR@PdPec|2gii&LZKvszRE|kR{$gW`9>D*Deuxas8p``6h zRz*dY*q@fa`W2RVBk`f>pkMD{Jr2|hxoTyBC`To83q)1Oqd_b{yfC)Fh_5RWNLu;1Ip0#Av!Ma1gdE@r!@79a%M76=*cZT%+ z`YoSqV+rS0ojT%QLgJtGOF{1dM|zxT+S z!3nE2Z&@`V_}HySo~$VolB{+^Y@lKOvUj$=&P-!>+g+-XuAkmG;=TH&U%;jH|SFgI`+P`8dF_u3_ zmvq3r+u`L-zZO-SnBt5&0YNaQ<9+;H)y0*Tc&Uy*Fwymos|=p&j!Syv;3=-ezC2iIM8-Uz6ITRz89wPj@`WoqSFDhFiqO zNv%>FyM~2fsp|+?dRsa|Ca4F(7LO42@QTPR?$(YDUI+tnGTiYO?pAq&g=b0%ORl*? zVY3MebFPI0egUGPVf*iMJ}6_?z`$wF4R@e)UBp_M*)Lt zRET+5@AxupZ;)ZJXV-q ztVTvqFvKiI`9`p?vLQeN6&?@an2e3(YA871UDHi(_#kw^keTR5XFzTV>ws<~y6aFC zs$4u5YHXy22sbhX$7#n@Pf;bRrc{psUJCx{@Sl$n^*Xpe>(g?qTD>ktr`K9@()3OX zKsm%1o-Tny?;U$rcN|!~SCf=8GBEBP2lw1t<^gH$EZ6+L^Ici)v;pR~o>L{fGpgd6 z3=<*>LKGqu3UdVlr?zsO70@jf4UaT+9(BChrb5Q>xYQINB%~stUX03ygB}68Dow|+ z)i>O*x@^hy3#Y_?5DLY>U!*jne0PSoyxg0yyF8<`Bz@$FPdw|JZ=!h=S}?dc2vdH6a#b?oX$O#h8f&HB~XrkD{U1~xAACR|bs=vIRd9U6P>BO#gY z58pa1D~VGqt^de{7#d$}#AB;oVojJqCx5+k)9#yIx$ySV2c6OjsWyvwUv3r@@M0Kh z@hf%i?4Prq**;XI`?Pt{iv#D?e!4Ni-=!H($X*C~n^2JC2xq&TuEaS@kc0qp&V3aL z@$W_2_bf_wCqtqm#XB_jSE}2i{D%U5D6QaeN6<{@fp3DFd{LoMgJ%%T3I;*tf{B9< z%D@_EHCU)f%)8R#gfvmalyIH1q!_;T_3x#&?_a;RYT2rR@mYeH9N)XKG#$}Mc~dt& z^Y$|vr{?j@m|oi0J3d(yvf>A>T2>{6k=i~Asesn22{0(d8|7SA6*J0`lgnmQLW||r33e72nPH0u+Vy8msqDTzhd(siII)*BiaTYC zPq0gQhxdGNA#-pjEiE)S^8)d39CYSku|tlnfi_5?A_rwcm4{z)RF?=7N0+wFoWr0n z#TOPVX=E$HPY6rzz1K>5Kj;#n4vcOd_{WAA-HuPToMaiNpsGw zuP%>XO*gG$>*U9@g)i5INQtb=5W<*u%c8M!fCW{k;P(BqO&IXO!Uk75P#n+?kPY+} znUbiKU4`b$_nbzf$|Y%(UmM+gPkQh4p5qk=bRA$2G&aD{t;`tGu~6mJR&yZe}0Uc-oX;o4ax2Tw8+abbF_%jM^aDALO~F3YgTeIm?5y ztG$5&f%g7|`cW5wJ_SSo0cgHJSEU36MbCGAjdfS6-~NAWj4?6yt1CWeP+Zz-utc_9 zu9k>?g|CC9#jy3#(U-4YL3ASX;n!HE(@<57%s1_gJ-?Rxt>oC!d4wMF-_(u19n_fJ zki(rLq>G3}hm8}ot`n)a*nMRqh`-zj_{i&uW@zHId0M8K19!R*Rh)1KEQT#}$8??; zS9+A~J^Ej^5_N-@j|LWLnL10Ipk3O8w(jw9=1uB6F|B0Xx}UTn>3%>nloDdrOQ6%Q zfpw8AGY$^v-hbNfJwHQ4sE1(IbRgZj381okfy|I#x&%#Ozz@R1;2~~;*A#U*q)V1! zHvHp&{Q0AF20ZYU{ps5~OngYql?4Y6o0%Cn7l2S#qp&EFnli(eFl|BddSqWdUG*}>I!WtblG7ZD5 z*mK~)0x1tD_<<0k;w)!g7_u;>D1bnWc0+SP67|ai)Wwun^t7QBj%4Y($KH~T^;`bN zzFM{BhCgjv@yBcA{?p^jOMOxv-76nNfa@La<9|o^qvJd?yc+m$8yb>tK?C9dLJ0yN z3XMHS+Goj0cdo~T4&@KJzk&mBTz5^A9munB|didgX&N!xjvh~Tmr(W(Hl?rr0 z#ABp&84c;7g;OPu{(fnxX9;mO2tr)($uRlxCZsU@3Pz#f(WQYp2Mg@h_d- z5O~*^BunpREq9l8bay=|bT?rj$b5=yck2U*;mSEP3Xw!o9SyA>vuE(K$K=n>qvv;O zG&vwbJBMF6pANq-di=ig|9)P5XQwtE576uyapn9v{J!Y%`_9Yl`qO!qyClf-Y^j{j z(E&_n4uEYi>spF~fo=vRAj`U4j-Oplp_jV_7xi&5apCuv|CIF3$t|Dk&=F;6rf=Fj zAzFx6ATYiXttSX&Wr}{b;}fFyyll0;9DUG) z<8p1!2O3B+4nHpc52T1?xdBm7slTo!l0*sbC$W@`k7LD>=Jn zR@DNa$-fV{r);hE3F&?Ljhlb2jLi3hR-28B+e4SD#38E~9uYn9L@PB#E9Rk7ETg-9 zq6eRdzNO>qpUkWBw;}ydl!xr%&uGF#9FU9aDy+;d%0EQ33|ICfEi?&G3jgOz) zFf3H!-6tWkNHn#6Iu zan!s8s1C{3m)4-|wnCmLC&Us3j8`Z&SSBhYsuPT+BXfXN0P`zX2s0c0fKuG;5Qpha z6?9m-V90Q*NQPcZG5=cpJtAi|EzB+5GIjURL5v?5o2ZOcS&eFS!2mI(f63$+t+8qS zmnWuAKk=o6)v6KS9R*ou&R15gdPVy3*590zCU2j=>J_e_K_hBCnf^d|_THv>W7XsP zIe5L@wq0c(tW~K8hXQ#jX+-Bkuv-7>@h^wX7H85!q;t}judJH1mF<7%_qXE79fJ}Bf5jy^ZiQZ)3N zf*V!`W-OmRxnH`u4FAlHLn+A&^}(>}Uvm8l6@+fsRX^&92osReGUO%dP$3U71PV}E zK2nFt7z-+qT)&cW?d6I(+;kdn#ps=v>-oqZ_r%4s4?iVNgF>p60twx_14*) zS5){A8*<2IO-xFR_jcDe^6}3<}_O5Q|AsXT#4L(ySAtzr_v_aV|D}gwKbR9VGwm9aK+asZPABUsxY{yvv z*J0a1XAgvK{{-7%G%)5goRn>$4%y2EfqWhnG{kUY4|x2ZKq2YKk=!s87HDhxu{Erpq?rG%QXz#}!Yv&wJgpc&)_4V`D|!!o+vs~}u1Q7x z3It-3!PCf}ssgGOkmR&NOJ@Qk8czc8{p}B*H<=vmtqzmv{KM_w%f6M9IN`~l^-pc- z2yc8`e8rfaZhS?2d?O#;@>E-koU@6&K`>AB4~=@oyXCR{bMNm;z(nuw&T{&*W%*My zXK5$`tDL;aLXnoADONPqD|?QL73sM{Wdvt&=?2iD75M%XV^5ejXdVzyP=2Sxr zmm~<|+vg#1=a<@Cr?AYHXuPE0XLTH9TCTeNPjSim5BSgcj%NmPYdB+~Qu+>BCX@^9 zj4?@gT!>QWiLVatyB}eyBa76PNb17LsP|i}V)P}Y`cC8?j>akHD*D5+-ocd20`FNb z=zL!`kd0)MfJ3>G{hB?;-h%-~;^0sy5>gteU7(sk7V~H(X1`Avl($KA@+qU&V6MeA z49F>+;5z>3tP31eh+3+04!T|kcxOlSiGtTaX^#<)0C+XHW<-~Oe^XeP{jLG0a&Ev<36z*n$Lg|I&(VWrEFU=#2jo9Du>`K zPD67Pl>^7bF27lcdgCSPR3-95qs&S`(a;eR_#J#PAq)CY8md-tkP0H-1+ItU*OaPM zl*uUol^Z+qJ*oBrFI7ubjNFg-Lw)2&i2z%tRw0jG6rX*h_F3Wr92=E@N)@Sm);PE} z)g?F_rTVcc*+aJFrRTOS(T|C4=5Q~wUa1Kw#lE6Mv1tS{2)9oA$J&HN*R2@IeW$jn z*!Xa9UV|etGV)vJ*nD8>a-vnOj58#tG`hqjm)@C}8gH@bRDlNMPc;tbQhbS`KF7dw z+Fn|t(b=DsFHUsZ)utiN-hjA4TIq!Ryn^&Kxn(o=TyM)L@|4E_3o9_SZ+#jQRltg2 zd~fGq3uem1MSTax0`@#Z1NB6fUQG0*a3c&FbxcD*t70}wd}^Z8;E7MrY1N5(r}VvM zluJlRw7G|;#_9XH^detUXdL1)Wa#V;lk4JH*C>t0nwXHD)L$Q$>NOSy1}7Av)Wao1g6+*LehE>mffHY95VQTk2|n3lIWL8;WGY?Th0dX*Y2 zfO!`OJjZ)CGv{6RG5cW;fM(29#`uy#XzEp3PN`AFAh)blm|H5uxJ*E4{BoSPM+ zHfwq(v60A);qSG&K}_9PTsTJW6n^vk)ZPA*v!lclu+oy%I!*|-_fsiC!Mb!F&{ zHvkdSEW{d+%*JTUFldrFQ_O3>et~Ng8&+lb2AFy6n8MpNJPzM$;`U9!_$vbdV#askxc zE05z3*EuZ7I<3Z$l%&xbY=$ItOd>v+aWJPH5b$M|d(2*KoJB-t0-&4dlN{rDYnk;&aHqm8Q^A7;_Xu9{>B&)C@V@q$n z+h7RIFd4OM=~}-3*8J)2xFm~UO}chRvZ42u45iUDz0zE{c9DR#yk;Kn_wBM;RBGF% zz8tsd__F24k1t;)`Opy)R$x%+_(A=i6dD@P?6%RPL?ic7pOtZHrNwk}61UN*-}OQ; z|G8WBcEC3g#*m7Q%fOIS>+?l5fSvFVrm>l=I>4=&ODi<$9KAj%4b2kSY%mR6p^FL3 zD-P6hT;C5WN*0$DZJ&a~2>|Z0I(2$oUB8sq?e=~7sScjEC-x1q+~O*qhYcHw{u67n z2*~4bc2b|6#q$C&x|P)?Lq3X+#Ms0$^wR(+8T_u1Jf@M)`wGtt=0dx|E+Y_0Qk9E2 zSf%Bt#D6w!pE6~8Wa*Ucjg8wQ<4WgkyZ$%OF0#^hcl`dADcO9+!1-&3JuxF`^2Ek! zU(AR@(&-b@2Om7WacTelp4?2j3AfWy%~kQ;w?-pW2>WmrWpjbCMTx*ZM`xxYLUg1Ur*5EYYXMjx z*hMhU7YgJ>1BFdU5+?v!RS;S9D9Vy2YcEkCZ~N_4aG@i^O%lDU)fB1;r1my1A$`FTbMMpuU(@|ICPy?%-!#(6 z#)+FYO^j~sJ$J6-MtDsSCreATEc!@i>=Yn-Wh)bSH3qzip5CZ1@C9UUibU=%**EsQ&7?sWlHESQ&cHTK}bD|V2`6XBwv)BmjjjHN(+u4VlkgFk?L^BcmCtpha?@Ph| zN8bkm(j`&27P_QFyd4Zvst2wI(Nviv^g@+{P&H!qg#~i@kBu*DZLz20@^sHgFInSb zV$#!NViGLuYozv&(r~y2r`d0DPBdqTtr=#~s-Sl$cyRLYaaAz4oq)B>HV>9=ztRJ@ zQ8#cT0)^%xdD~fxGki#DfsP^+3Q6BKA8`-Dt!SZ zlERb=IC__W^PT_Na0hZdU`aV2Xe)vi!w3s=G|K1(R7y*2s8OH|NrH{)hzj9NKshYn zNzt=bSJn-ohn+QKJ!=U~q!$u)S5+x{FtSqo8;WiXm#IGH7MHTSl6!L+tTlg^5C3-L2$kF}sK336IXvY@)pY|Z7h)zmTIz7~DRZw~%IeSUEh@9z^rajEAGZs8vFbeUdjnShe=^c$F zgGS*XWJ#C*c%VT}X;~B1Za-x!cjPOV~^4 ziH{>)dxxUy)l6|giz|-s=n%}EUcxuyTq7<*CU+`Y30_Sfvl9 zt8Pzrs~BLRUkOnJuoaQp$%zjXqzG&S6Ixl3^jh!1eVU9& zuH{)=q*70Pa;jQY*c5~O^vd+w#$}DQ=}O_o;sGMB?w1p+;vshr=8LbuA0iz}SjM^~ ztb=&Orj}C=FhH${=v%+Jm=XiYNEry&a0^ThBfXyf z>(lt(D>9@PdsBK&`VLQcZ{_XGaO8+IbjSC1HQph;^W?qKA5YG>=PO=$MRnvpr|9O@ zz*~wxnuUKHnMR)Xm*;62(=Td603V?YTlMWwmRj{fNN){Ks%n?H0RgN7#$4CAW|>i- zgN<}q=V4*k<%=h=@@84zN)N+h=vpM%rar1rhp{4G)&M+K>JcRdT?}dI&}1rfuTK4M zO4N(S1AiY16^@#t%Q2&ogR-n57P|CnQHu+7!N7=yGFTvx8bUhhKA>y??NnR@ncx-d z5ko~f*GNoHTZ_#4G^SS=Bs*=gzuBj*ooZ))qn$`aRc>xouCROJjr%t5yK!RmlIgPr z%TS9jd-{^3L(nA5DD>NJhJV3nZuM9q7E;Ww@L>NER{D*cy?}8$CSa#syv>m zWrKA)-+c5*mB*uc^3gYU>aKdUr;allIwu7Kx`4yd9o?G z(6uLqk#lCz+_};ssr_=5Atmm?h}gr#%f}*plh!}<-R8~TJ+wYalh>dA`$nR_MEft7onoo}H(#f-?1*zj(cxMDOJ4*+@NU;S2t! z-{9Os4|N!Jy_}Kp@~$iU)4=~_iBqraPfC@Cut5Hc&UF1e?##UF(XIaTO8lfF74F$n zNImL`?_h*=dobwXk4Q=o4#_!czsI0fAd?iX zC@_o9#dnddy+pL-V29`iXdqPPkfAXtkqjNQ(vmKLWf+%`TXy%RpThV+J86L%RRp#X zoy1s_v=%@m47R+Ohj8Q$<>ge#i&R$ZM_w6-#oGB=`DlUPpux$?0#QA>vb3tt?34ue z^qu+z%BI>#c=UYfwV}JF=|ts@$wfJXgfPG%Cg$}+WMrM|K3cctrb_SnD@g2(>y^eH zPV4mp9d=)rUa97)a>8p0hlwm)kW!qlx@r0kg{9Ka*xcHt<)c~p;F+z{cCpDD?E`46 zQTr&Aji3|xKw?*rVpx`wv5tfKmYRtghgt^B0+~aO5+U)l>&ou7K>Qf;Z17Q*%uo0d zB%Y8upW`Ps9>@to48Lba+qh(Q0B`SI1KdIXk1j!&HcNvu^WAxIYa>je34d`$pGf@^`4QTY`tL|f8FiIz;0siMG!tc|X;FCr^q9f6u`FK39z5-I2W zGH22JQG;1sW-(L*uWe7Gb}ua&kmHkH3Gd1eh_2-Wd|KE7&54_8=N>Ts{lMJF^oAYw zdMEedz#)d9C#On#NLyQQNr8>cdUd?r>nI3mnhinTd_i3kNUt)y6hfHK+!rb`XLcy8 z^|}FB+--rHb)J0b-JJ63oHyR6&QgyIWDGKcVs`dDSsqN2@$t};Fbq3+!ZPOVW>)AU z&<8;!Bt^NC!dKgaF-b;YxeH>%$|KqdyGQ3{v9P{uVH($WMN_SW zgf7ybA|KT@-LsP2nGqQ^eV@9rsaDxCG4dOKsG|}AS0=NzFqsc^v|w93D4Pq9PcIQe zTHtjKsG5YaoNv;zvREXjU>Ma(MM-|gKW=|XIsywr?dhAEYTYaE32&P=VwStM>0%3; zc4R%TFY?8^Q*&&|J~vV`8nSwqq#KPbN#03S?s%W-s6Hp*d0Bxak4f3rumBjWpjkdY z1wG3Pvd0klNdQw!YdN5n?}Q{le7-W3C-3xBOn=d_YwfX#218sw#xg>hWYVVsUPC;L zT~RuS+c3n7eC*X>tF1Hi;xg6RiRMjX>o(fzX4y8@U9-h7VU_AyZP1aIk{>tcKxu&_ z_OH+Pm1*u=zeiK%%M0_L7<+4As{|gLom7>o3zR zi$B0uTvAM~VS7povmNZi1lPpv+WPskMoM?G`$o=MI#zqb#Mo3xp~^J5bh?}8lsEaL z&4tQvo-Z4-1J|>d>|>L@GHebsbv*~h!tpRocdm`z9s2pG!KNv1xM5b z8oA!V5#hu0KHvt}$EvnXdT-eRX?JL3lnl9*@3`Xn+9jA>v4Ji5SG9x^M0-XT5z#LuC5g1AjLkm|MFk(F{VBU>~sj zNl(x)WMHtM7PP7A0f*NfuhwtYR^{MuvnJGDslG5Xv*HC%rJB%7hN^VvZ4G(oz5%=`mjy18Z9Idcz;ACk402(i>I z4i2WdjvcPZXQOQKIaS+Crc6ts^bu{Rxmcsc2CVE^j@ZbG0gH0Jf^olQMKv5~pdTHCG*8;MB7-JsBf`?)9kAvn&##OnR=MDl*tWXA0yo6sz zxLzq($%%cS5Cm`)MIjJG5yNCn9)|oi@Y;FDqTdFuoj>TUKy``JTLr@~rqSxR##mU+ z(`x%Fo90Y5v&3xEYc<2MzR{-nK&$2T!iO5$F1>|sU9Puuye;3HWzjD;SghKP3cXHi zj^Tz%V-bvbZ{(pEvsP>1pN%nFBNt*5RH+&SeVM6Bs8A=4r3R7By`ymm1QHHes~AO< z>*D80ff5Y@0gVSzLUbN5mp?Ck`=jScHSi*T_}d$A{FV*vGNbgYcQ$B^oau_eN)K(2--ihb z97gvLas)}S<?ck0Bl{6I@z&V}9WabcIzcen5?o&E(5a0>yaP-o zozbKY=#9K7D=;ei=HEWY$KXMuRq-4eO8EtXMw zfzu-|kQD_dY{c!Ib_BR|)x7X?AA6;)T(sC!Qj7 zsa4e?x@Dgdg+_3y{2CV2@cy7v1Lsi{<64Q>MH;#06ODr;H*0-X`j~6xnj?+aXRVU^ zS>|b!!dxpUR_TO%868fhi#ji(+dgSzVd~?uyejLB$dAPj(up@Y;fv!8`ZZ$E9|U48 zBKxoGy4>r?L-1uoOQZB9bEc17FZJfL*b7o`WC3vED050*rjO-^UZs+cB1+BK@C+`Y z8^gGzioJka{|AqI29Lvy4S>-5X{RJz^#{<`rJ-%Cuq#BfYz_dD(|83cLe7F+y|T-y z3aoeHTMLSz&_nmc7Uc_&4XzGcBX1!(oSixC(c9@>)F*#KD=7 zHjq3zAes}YPlIBKd_p{O@^fwn9BG1ZTMr5wgTsTt;T`_P&5QA0*s!>E#FE9$9RrRn zU3Tow&yNWkk1bnz3_BekOaJrCb#Jd-`}TFu@b^j*;tZtaZ{Iq8?EZ7yNa;IdK}AXh zwoYK{v&uCK4@nmeZ~3A&ca*N)UHj#h!_tLA3pM3gY{7nZ+n-w54O~L>^+Ar_UOb83 zxp*;?%g`df_!#^A*s;%#N$G4IGp;?~c7Cm(TeNWep|_VWee>WXcs}DWJ_BAW2!-nl zZ+Y@I>B6l|(@L&&toBY@d@EDm_T()%K7DZ$`pir?;2pv|tHHN`zp%m$?`kX%k|mP? za?XKA5aldafi0F1k>M001GOU0F?k*3AmthPA-Mqa2NFUKM0{UqyYvIo0=Y*k9e8}x zrpGt2EWMyl&-O2UX)x2dTrtUGlKZ_ReV;rAo5@T!=+!0u>~vhBP0I^;L|fIMrqc0u zd3~NxUK+O?8K%$RNk5!=Yp{8H>LsxT)FJ6+G)LqtOZ3HoNIFBE%H1< zE>)G1l4M~<#V(e}-Nh0A%b9#`gygz^qCUQT;^v7HH?u-*TAyUCZ|%kv2?@!4(zK5B zeswn$-k9%jXdGpZXO;}ZQsZzuQ?zSzzx07;rGK71i-bUHdP1GTa}Q6N82P~#E5@l~ z)6*=LI5F0i-6tzxD7rDP^8rhTMjv^$$Pmct1FyB1v-C9fMMr4mJ@>5STd>5JC4N4v zd|V8}kB@x#WC2n}V+4RVq(DeDmpO8cjPEH6-O8lOaoazWo_*j!>DkY>PY7|(=BBcn zy#w+g`#&u`otl$BAdT(!h~e>-k&6#XEuU}O_BjhZ$f-gT+TZmMz+(OYkMs&F_6*1` zOp(@-PKTi^2SEd7QJ)hLSp-uBq8Jf;kqSgGkKF()Jq0qWLG6j&77*=G2QIi}`H(?8 z007oP90IAg7V`$`rVB^@7QAHOV%aRdD$i%jwCy6oil9oBb} ze8)J}x1ZfJ-@ULRw*O=nI=|0azQl80|Cx$CVHnsap1sD{j`GNNo>|;u`H@Ro;BfLR zZ+oR+=@`+cF5nV-r}pXCJ-v(_&hWEO0|U4MmdoYjRR6vIJNtwAoGMMpSUy)?AXR&i z`k24y%QwKElgkozwTEh=e638QwXo?d0av@X2gM`F6Cuv5T=3ddXbL1vfNQWy)_;)S zaEhN2%n^+v+9k_NMpAGD36>WUQ!WNyki6b8bAuJ8)F;pYK-_|KZ*x>&V467c@aW0R zT*1ijk9gwZeJKUt4JK)pZ{0DOmyW4cZQePFyJ0q;7$@la4Eb=A34DW+nFbAc@qQL- z)nkxwi;pG`(CWngh6S7_LD0w9Y{ObN8#z6$GY+hH?E!y`&b#Q=a{6N zN8J7J$o|GToYy7jlhXN`Pc|C?BY@Wq>UZvb<}k%5tuZl8hg`T$tkN$i(da`pA8m}` zs0#W)f018~Vq7i|x8W*NmP|8P=iKU0q!2m|Bg>lChtE}2b2oi1{gdr) z(9Mua+D@NtJFQf3Yqoyl*WA6Aow)seX?|qRO*bb=WuA*{{Rd1JJRm(IeHf|RV&E2S zVihZtxZ`vijVr`aLXY&aY)x=0fC&o08i-!Ri_;i_M<`J^mD8_;F|eF$2Z*Z2Jm`0^ za##n^uh3smc0plva0Vvu+oaE=0rPuXst?Z6>6Yj-zFt003L;_x`E0@@3UE#g1_BKN z3@gEV19lb(NCgH!a~fL3Ky>B&G;EOG`26wb4ohFnthq)IuBn;HY=@sazFK3F>&GE^%L86W$bF3xPI@#`Ky@v z=5JX4(~lBw%2sw7qdEnX#WQ9wEY`kV~?+5Xugcq6Z@qbhxwP>8nsJQe{Xm)*G&5Y`~qv!8k{px_ii!V$W zv-FlVkL65d7r1xDcW>JL2X1Uh-rnaYj=ue$Tk4iE)zap^_psSNj6iw|3!BWA#|NiY zEj#%rd$4Y5b?!ZjwzaPvGqG;aM_XU#hTM4eEUFlte^g=2KSn~={;@|`)T(LkG6r^Q z-2&K>XD6IdDXjX7FhGLpz)T4!HNj&O+cm!dqG2$kVCnb!N%+1RecHlxQ|9S@w z!AmJbmtlch`4-uNN#$~2Ui>S{PuE^nRjIJHCD|x;D#;HY0mTb$(2I zRYL!>$Bw-;+}A6lkI^}E^WD=QpthBB*NCfSeMzyd0#g)Kb%*h^E`_6ao)Q-wDGEGr|*4vly)8^c~?~OP2_AX8|njjPUbhCF48aR92 zz|g|YjSp=dyldx+FYOG(a%$xNwI|!n`~sJ&<2*}Wo3mie>UU~KX6Gbpbh>!GMm2Xv z_~tDe5-cEn`i=M8dGLCja&dVmRMFJ5ch;ChwK|dU;|8pqIkmW?B#06Vyw%H%l1r>D zs}fC|(V)^+R+*A4VpXNtl`v$*!Z{;rCrqdvHQS>~Fq;ym^=Eb5_QqM~_U?Pbq$?;? z^Stt=Su?5!)(&crru7@V^})$6?Ap0AkisGTxmt7@xf4d`LMbU@v^8f!?Z`Pz>opP&nU^)=EmtwLTRWs^_e8tTs}dcNkG3}MjAG6F#<;oAT~La7Py=kUbw~=dogF= zk6>!R?E_ZLz-MrnDde~Z!t4Vql z(daPh%QxKm@rsq-JbZk5ids-=^wuK!!%a9$=mQrZ8XzaOWm@MM6teH${P-|f8 zfd8*@Zb8mkX>)?tXVCvSeYn-CGx%0+-@R#ec}c@{t9DK+u&0bw+WQvuwMg%0jazqm z=JY$JRK`UbtE&c&b{YE2UQpRrsZ6q(f+PFomycgQv6sdOggjw+{)1!E-!je1uj^&d zTC;C;s5Cr)iK5A3InI=)RK>7+lB)_bbh=jWFq=*1=rcB5nOAqy_|ZEj4(^qx;nr8W z1DwM(YB>C537(sJ|+!H_AXVCJJHXb@sXt6LfNtIPb%1p9ZbU)Irl#?Mx z6N7^g60wY~F2QKoMIj?SwuNvT94%UjcDBk_^w<;?LyIo^uQU?*ZR}h|ku{=TsXeya zEEIakg?{`b`Jq>|j}bB{wGnx+b(%M2>kDQA2FIme#QyBz*VA45C}v@_Y0*|f7>*$= zR5LDw+)xS;RRvgDcQf#c%i9djOjl{OaM4iKjGLnuM&1$>EkCKVL9YMst2Y#hK$!m( zoqfU&&PDDM-pe3s6vurzlAe&!NEAngqW`mY7)ufOXU;@p%%6Tb8g<^af98y)!~Nei z%`FJbzslp}fPZ?t)cXIey=;)9(t#QRtXO#U6KE2eiW*2>{NFW@=#&)5IwQ44Tjm26 zZL0Rh|E^iMzLEl<%kF4<<7x6^BfbBN#voZb%JU|5(h(B=z^!zyFhzHF|wFm&D|vAM^8g7eqt!jo!d*7tt6EN z-tEP>_@g{Wc`42!s)FjSkf)nCf*;0M=v3cdrlwF~Q-3HVmtN(YTJ5gH^tKlHy`gAS zsvkvRi7q0ERk?*Y~*0% zpw?hDW0%7&H=CR7Zja?c?Tt{jw?xRvssDZBeh77ebca8FZsFLHv6-T-Z;WVtM*qlOdHA`-l z8Y|YS627=%xBY}#$tf&Wy;=z*9jg+|dRxe*hJw+Gx!tBlWB&9Ae@UUWwt-3K88$@l z?DXA99&$q-qR15^_;PZH?bHExWmM@}L!&KAM(an#~5!gihJ+=mfgm_V7GDdeYo}Vf0lzJb?@D4xxYjU z@EV=bA$knn_`JM+{&A6;PBH(z_folKI^Lt)IW%|u7{OHN)Hags1bP`TPe2O?)G}D+ zG{E~oAnmFU>8S(0Vjm>)auK>PctA4L%f+r*voEFD(vdfB+Bh~LHs|2AnWY2DUSreV ze3Ol&3Rl;>AhqRJipE%h7ZFq&!>RJ@y<%OuBad7*8F7#FsByIREWG2Z>ziI3QqVYl zWW{`+QoZ9VX8B6maSDy0exRR04LT#31S8l&b--DYGbsHUraZ9m>-%QRxbJKEJ8A@l z_%HN8CA`%2M5Td2ZDw&uBY`ys@e3woc}d$qF7-!FOYib4Bd1xqaFn*W5z>2f6fMaV zqb{{5?-xUI9J-Q0;m`YcXv$Q65-5Vj4yT3Mkv4JAB07}!Yo)W&uRptSYF5Lbddq@g zu_tnFtDn5gndJyp7S5WX)~_iItzvcUeA`#j6lo+=HM1(F96Hs0OZp9J&4wM)Cu1)D z>R0tU;@R~&HGSi#9#sK(kte@m~gm za=r8h-AnyCs(S`w0bj8C&ii4faRyjLFq+#4(I0o)6VD>%5N2!S9TzNsgO0FD|(zW^%wCkPf)x*s0X2LHS!YHx9LF z^@CZk5O{!84i_Ay3wHFG=NN? zx=)vNGr92N8wqO<*?OV|8N`ptMi`KD@@4SChU^rfpX;9%s z71kh+VDS{59tlUCd@6#4pa+BZfimy?A>Z%XcVTz^o);Hx`f}(W7D~6j@+;~6x7V$E zoB4iqo-LL_+#}0iDF5csE=&2NNOp1jy4(GY+uhkQ+Uy?|t-4|Ng}n=3+*7}L{&n}X ztb1E}AJhYnc!#T&nj;b{_Fd+6>H9CGWz7shBqizS+ivhFt@wt7)zXPa5cDv=8KD?v zAUZQ~U*ymPer($#j|;ck_C>y86Qr1qd)Rb<>TbNH%?lmlQg=RALW16?A z>@=F7uPMaEvi%gq(q2&P;&AWfd+;noWBots-UB?2>gpTcduL{QlXkVMu2oz0w%T14 z+p?PFZp*z}bycit6*r0n#x`K8u^pO?3B83-LJh<~0)&JTLJK6s7*a?=38`Rf{Qb_% z$d(Psn|$x{J^$x#YiI7OB27?qt;@uqGejpF5p{d=MAqr#Fzo z?`}uB*XQ%5JEEZL?tI;0b69aK116lB$mtxvY7i#=08co^1YX{Nz5*jdCAX%rRGdvp z$_5ZJ9SV*l=%tNup#*+LI{2$tXbJOxvjwhIS(SbYm>+mlx+V*J3=vB-(VAW(+9w|| z8chc0iQ6*^olz;?6kk*`c#p~sP(EUhZuV8?7ba#!yS$0{1+ntAo=aDf(9X(BJzcQ{ z`H5avbXH!P-Crlb$6gpEfKsaKCXEZ|9-~wio z|G~t^U@y+by1(J@gz)|^FfLh;NvOoRL<>d-!fV7;1n-cHT)?{~f>;W$p;hfptB&!) zW!m0_jAsBV>Tp`&1wT^D=FIXdEUFCWsVHJQDO7;IuRdgO8ggQ-)|5oEciZdd>^c_i zZS>?+=`)SFx(+{>avNN3Q#-#hVig#l`5EGo!7+>Cr7r zx67O3b;aAFdwZj8@$psB?2#!=F$G1jiGsNzdFHHheztAz*2D$g>U_`K{cr3aSa8LQ zpWSucN1n$%lArrs+>=}Hzbe%hH9fwI@viu)3|ssa^>XYBX}0L9_*~A0}Nt$Vj3PmAMLZh(kbpaUoX5thz%5kMGrcDrx!qhctbY6 z(sNm%sAzoQoDjym1aGoY`sMi#Z{Pm#`5zD8kh=HdzQ@jKh3R5bV!@IPi}MqV-o)Ol z?BN5^1>yDUW+ysEuIS9kS+nbfZChTvV6{IvFPtC6^{)6}Mq#4cu`)BWzAe}6uRnjq zyz|!0E>3fqxoy?xl#t9>$Kv>c ze1D)I&1NWDJ#@+X1y}88sR%CK&|O+MJ1@y>j`oLFgq<$NsupC%`oqOjlHw}D)nyIg z**Gj9_*Lm9RexP~_UQrff-tKUDQ3)aMdwRVN~dkWk!W~!r@6y$WoJH(ou%5%nu!rK znJJ`&*-3f5>giV1Kc7U)sq!{BZ-O@cDQ$S2uZlSf!3knc5BWI3_KCPoM4}P;IpdiZ zovG8#4zcX7_U`>keg{|fDYZwL`zohO2})--{P=hFeswC>0+pZj_0K>XPt&jD(eP_M z2|S>x^P}g)>d7UrBmb_izScjd$4rw)`d7VEruN1uV2DjsWa2fC zo2fUS1e1YS4TPa4!Z&^Jfewg4(^-ze{=Ep4(rnVR13VEPpHOxn3x6cW0XDr*2#QD% zv!#+^9@iDl zG7dXPu9QXM)47l51nHU?#}4CL@dw=s_1^4*Oh*phrN>Kgna9sxcTvQ3+3Gt~dG$M1 zU*?Kjw9Yc401;##{f>ee0`=hdhQg^+3;6*APaNeCsXiQ^F6O|Lc3fID!ssNqS?Q|N z;TXi{i0Skqho_0}%I)m&l>?M$V5K~h-I!la;c~!#DsaiKK_>{XGY=10=>i>o!Q}={ zoXC`0sz97`f{OH0A%YTxkK{TXqWO%|Goe%wa-|TJApE*ot`_8S1I%SsvoeR-ES5|0 z^5csPu}7U|ldwQW=mQ*9A@pOqAtjqxO<^S^o4LpkcT|0UDn#X&h#iHa^M4+VJ*l(W z?MGwf$FRIPS^2~r4@YB}`i{+_ck+u9cdM1=fT-)iIM z!+raO%l7X((ZXJ10sMb${GjgSI*2O#02$aI5avIvOfCMLT<4ft#7SVdK5`vi^JT9sjd@DX z1^Jy`Hp)hO!8Lec{3Cqh#JZvKk#eA4q&vkq(l|;wr(Ut<=OXSGota=O$`oWRYHx7J z(KT;g*EoLo6X$)PS|q%{cKoQz2MDx@KIJ~%tiAaurJE-x$>+%_69x>AxTC)si}%O7 zqb1y))S}S=l1?}|Q$H>}j+t(TyrLIAzu*rBQfOta90(K^Y%gGpN+|5@5@Ju> z2%{ho_6px8KQjLL^K#&MV?Zj77;unrqY$e+8ilG8Ccep*7sG-lO!_tBH}ZDx_)ht! zF?qJ}OND>n$*aJH%5OW0IYFl`=p}3f(wU+|o&~b2EI?NGa2Sl;1GrNl-_n$wS_b+G z{YBiiXf}5EurQ-*&+adq*~)+JyFkuXY#WTVt&+zd+xAMOYo4p}m2Hp7}X9wAD z*}>2Gk)z{ptj*x8X>N043uEUUJ@Vvj9orAS-@THtmEG?j+}?59ljKkyD-Xem>C|{m z?6X|p{^w~r-_VmF&t|kQJ@o_j%Y#dK0}+^5dp$%Pu(DJMf0I^XLV8>{0na#J$oH^i zB$hkgEM!@YK6%&cugkl9Myu5*zGK9e?QwYn-}5V6jxDb`o?W$kd6oE1)pEXZY)p4@ z`*xYEAL!KZiCZbhN!>m7U``s3XQK>p{ec4q+^4gVB}rP3v1tVCr_icIqS^Fck0W(R z>p-lM&P^$XvqFhy`K*WsCqN$qznC!e#D%f0@;$GmWvnu1WmQF1hVo5fe&fjSHFK|n z`;buL{GZB;=WSdvrLu5t7N*fNEcEfEi<2e0&Bp4wV>q7m`cq2^QT^T@Y-KK&jJ_E8hqf+-`xG-=A}!$aLSm( zW8tO)AENO-@f~DMgX~Up;_C{TLGFaS`WRyYGzDav02P<@7c0tk2^;+7stiST=o7TYoY!Yg|)iz zteU9K-fgeQADva9T>K3?DWYNOfxn4YM14F9{fkv+VjtzA$!W+^IbgV#0qpgVQBjQj zQU5zwCS+TQ1>lCLr?RU6PXPf?J<_@LQocAXM=#`82KLjuC9IEC*Iw#de7dc_8s3lvS;ec{O=7#* zyU)0B`#U#Y64`b2D{C(uN?`dbZcdhJS0=sbHAKt5i7BcJ{NBy(>Y`%4dV1QPk-cB- z`~JQ?EBmf~8DB+v#tC|#By?9}UYt76RtaeaqX3X(QxCh9BW{=rQ0!We3<>QBNr+bw zGT}Zr!%F79DyU`B`gV%G6$UjI#fQnVQu4Gszc0zFM8zbOrX+>(R|Lzml1fcZi?P=% z8n%6S!F!*|CqB8SqvM`Wn5f*@)n^mMjVMelmK_T;Rwly*OH0f`2Q>_W(x z182D4#S{OPeRTp!_b77?n?ynJQO@YNfow2h>XGCRq&U+3S#TW-$e{;6^N?szh<#^l z?b@+5?6RqKcKK?^ga`)9Hgxbl@2#{Z~h(BIaQ@v(Qb0~}L2nm_eWFh50i1D(2-ou2Ik>+r4 zP4D=#%w>Pa?vj61W{#Hs7UQz?d>oL8{9drd-uF=@@(9aD<7bgqhz|1aZ}c?%Al^aV7m)?$YO znIZ|y9TJxFV*w_{4J-k|OBgJBV2?q_pQKR1v#0lvy94afhMB~|=)bZ$xPY^WNra4` zd%)P!dq9mN3Jf46296b!2yD1fjuM4!xPf=agR(HfUS@`OeQcUdZuXT-1Yxv{UPSU5c?MK6^2{UzlI(?P>t4ri5w{D*da|pTIgmV@wv|=fNseH+=qH22wy9jj(oy zGjj&*C}o7y)eK~X^M%nSo580U-lTB&S10Df|I({Ot)Ko&`oJuS(KCRud2;~jd5^gHdM4ME6yqmwv?$}RH#jwV~F>Z zEY%c4CLZYy1CLh{Y3Ff0IEsqUfJ=5Nq~51D;1RWJa=4IZFpgt4Hj37@l~L zRbg{0f|YdO- z{><*kjyi0ydw#YrYX8=hg#klKL(w@`WltBS;_Rh!3q!-58S%mcr&7eH7bL~0X+&d2 z+2mBw|E4NtPh{y-7q8~9i9I(|o@z|VN()`6-MJFWqSND}QleP0uw zr(p6IGH_?e#SZD+VHtG5>pV!cfas$M0=uWUUG&&RUF35FK}>%5Bgx3hPRl6u9@s!I zeA5RGe^N?%M$o(FhVf^QjXz~gv)*a7>Z@`2IDTgB1#4clrST&gxbM}#pM6N~?dUFr|q~~c%f~`fdMZP#pPJ<_@esS8$-VJ*jJ*zxc{nTh?;*Jw% zsOf=9h0L4uF6`0AflkF)83}?I^ymjt^YQ>12ni5h7GxE@QF@Vhzvvt~we*5YRXPn+ z7Jw~R73m@{3YYreyV2mKWI!4G_fVShW@UBvMrF(>5)-X%Gj~=yUHl7&QSWK2PPyYT zhu)lI^se9WVDs*qvQ~usx3bj2LLUxz8$)>>$pCo<_Tg7E&UvaIrVuyHlZ41E%RMQs zZQ`r3NhuC*rTmXe@|P?qf;@rMJfDT;uNl9?U}J*Qw9e?t*pss6fos>_adBv@yDpJ= zvjVgHsoB%lZEDUnae@8qSnsiCFL#;bYg^@SX9yKlHp349Lk#Ea+aX^!4L;&_qjyLY z7Jsx0M#&l=kg-1iX@0Irvuhh6ZmD2d7*;GfV*%25AW<8#Yo7 zM%wQRo;CpUl3)?^mz29pdv>7*DN(o#1`ekC65gLyvNzi@OJC#zGxD%0t0L@YqFkL* z0n5`_?1}Mz%jT7mz^kI^0jB+v5^qo_JTv_>>7O*5XT< zlW+ysGheiDn?rOITgx`^oV}sy_tSDqGyfQ8PfML23ys*XVq!AW=eqxVu_Goeb3xQI z5o2;Jlt{~SvdV>~=zZB0cNb2T+kAOqxvxAM@`k>tIaxtgEmh~F7ffAmo}QUez?(B! zq3t~HqE!D&=Vfv~{2oXwWkHiHU1ZQArIGz(OQT7z#vXtXu*Lh zNw7+fr4VU$;|RXmO@;9TSW{6lni!#G=Gd)`=dsz(dKj4wnI7j)oa}DH7CD? zD2vN{Zna!*sLT=m`Kie^r2_o>th`uuuEl!kk#&M)sYzZ@T&B zo8G?WAA3`(suTZy=iQ%ta`&qFwv5)fN90%9ndH0t&e!i>Gb8QrxA|Mgrks=?pSxvy zrfdDxap5VMOXKsCoy#h__w`Mi5ABFaeEfJ_4!FJbpn8EBvj7qk#3|-BTuoTzUAuS7LTxpIY;^$AI-Wkr(@P~uWLq4c4kz2O>nb6I46|* z`PbHj34Yi@MQ%>{CK_tmI^&x`+|e-8vPinV#M+~1)t47m2#TZC15=G|ifk2bV2@2^ zhlwXWbsb5DtfH(;w>8@$8l|X=UCUmW7X?`qYqmKi9d8WPyF8b0qr+(}wWn9-&&k7;+(w6wJ?3birdl`x|+Bn)*X{%^*Hpd zOOqr|p-0MfnUd3!@n>{rOCEOoY(5y%Ilvd(h&}Eaj6aYvfh!HAGWCg808%E#0YNbq zM|8r3J`?o^NtO}nQ9&I&M%qf07bG!7!&X}3t~V<2F|u%An8;%CvaJdn>|Fl* z{Ah4cKuftncqnjiDL2}kwo+SqjS2@f>9(NF;V`mGneL3q03fihtRbms4G5+O7i0hk z{PX?uxHC=#0*jr1pooCLtO9|_l_z)v%UN@Q5pP(rbxl~$E~(@XfII^t;8hIVZZMZ5 zW&b4TiI#-$Rv}~xf}tRWIa-G)AbHEGL=e>`-HgH7kjEpKOTCVUnnq($mwb=>>$N{G zTHtidd~C_ic~5}mHd*xgXC1z=V|!)Y#fx_}=31Hl(vOd@z8_1jicmv&(B8rQr88TC zwdZcG)$0n^Hq6c~(no(%m^9s=uTOc=esAb}XR^VNFxQu9OY!5x-6G$SWQbkGSz=*Y z6!?4kGS&|-LncRB!R*2Z#QDwVTvfAp^PE)mOhvJu+5nn)J?uY|Y#W&T!0(fOX<20k zSS>mIBd$Jh`=lSxBi!Ge@e6XuR??gyl#mhaQslCsi$I62%0znvQ3_Q4C%yiY4_w)AJynX_(SpIo&5*5 zuJg_7z=a^?c*2NfST3Ty zz>Dfnxxv(EbQW#MfJD_4gfzpdeL5n#uusA2qbxPb8wDd{K1!rtFG6~qwzPC?tlX$q zDS#zAi;`p0M_W5(5y!HGy^2DuQyXY0=OFh8(<=?~2ust-)6&W>%$b^haXOXYX&Kj+P>7RPj5xFva7d9tqzzkXkGd18re@WLx*MI|?dk0md8 zaPL5yO>U@et)AXKosZ7_R_pw$%8J)?gjQuh_*I;{jCt#(R?45Q5vSy71(czXqVm zr~>{W*Xs7^bnq95Nhd+b*g%>|I9Ds=XpaNl7$9mbK)DJnAfIGt22BE}FF>f}bV>9+R zYUiLRxWa%uP0bQ>ah)|(A*NZf>WdiUZ1~}Lzr8*&=uNbgms_JU;zKDlP7IeqOX(CG znyKuaPHzJs{0+hYRI(Qx=wTTc8{!p!ys!&Ej^K0q!5knV1}Rw#R0#&CH+%(^2aB;P zrlDcmZT(VHabsm;V6DFYwrvd!F;zy(_)nQ(u|oc06b)U*PRr^q**)(hghsoz=xf9KeN1C;PJI6N2f z$gI9<$wKo8m@G_z9t|(c0LQ}>g^$fFq*Rm|XxyL)&`jd7VF!W!LMG}lSZ$J?%`yt+ zygSYpvvL>C$z&{Z&VqcuwB?R0G&a+iU|Ii$G(UevEMu`V@?jjBms#SUUp-@u{Fcy| z+d$C`xsAfxKdubf4Wu@xnE9X%&N+uY4;NbV=Tez-=ND$=9Xqx%hYytEi_

    5q!RY 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 + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.ttf b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3 GIT binary patch literal 165548 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 z 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 d0mRO}xo^G_%I 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 SdSQM28?+M|D(2r_;{O0|uQ74} literal 0 HcmV?d00001 diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.woff2 b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586 GIT binary patch literal 77160 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 literal 0 HcmV?d00001 diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/index.html b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/fonts/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/index.html b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/font-awesome/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/index.html b/2_services/1_metaverse/nodam/assets/frameworks/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/index.html b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/ionicons.min.css b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/ionicons.min.css new file mode 100644 index 0000000..baba9e9 --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/css/ionicons.min.css @@ -0,0 +1,11 @@ +@charset "UTF-8";/*! + Ionicons, v2.0.0 + Created by Ben Sperry for the Ionic Framework, http://ionicons.com/ + https://twitter.com/benjsperry https://twitter.com/ionicframework + MIT License: https://github.com/driftyco/ionicons + + Android-style icons originally built by Google’s + Material Design Icons: https://github.com/google/material-design-icons + used under CC BY http://creativecommons.org/licenses/by/4.0/ + Modified icons to fit ionicon’s grid from original. +*/@font-face{font-family:"Ionicons";src:url("../fonts/ionicons.eot?v=2.0.0");src:url("../fonts/ionicons.eot?v=2.0.0#iefix") format("embedded-opentype"),url("../fonts/ionicons.ttf?v=2.0.0") format("truetype"),url("../fonts/ionicons.woff?v=2.0.0") format("woff"),url("../fonts/ionicons.svg?v=2.0.0#Ionicons") format("svg");font-weight:normal;font-style:normal}.ion,.ionicons,.ion-alert:before,.ion-alert-circled:before,.ion-android-add:before,.ion-android-add-circle:before,.ion-android-alarm-clock:before,.ion-android-alert:before,.ion-android-apps:before,.ion-android-archive:before,.ion-android-arrow-back:before,.ion-android-arrow-down:before,.ion-android-arrow-dropdown:before,.ion-android-arrow-dropdown-circle:before,.ion-android-arrow-dropleft:before,.ion-android-arrow-dropleft-circle:before,.ion-android-arrow-dropright:before,.ion-android-arrow-dropright-circle:before,.ion-android-arrow-dropup:before,.ion-android-arrow-dropup-circle:before,.ion-android-arrow-forward:before,.ion-android-arrow-up:before,.ion-android-attach:before,.ion-android-bar:before,.ion-android-bicycle:before,.ion-android-boat:before,.ion-android-bookmark:before,.ion-android-bulb:before,.ion-android-bus:before,.ion-android-calendar:before,.ion-android-call:before,.ion-android-camera:before,.ion-android-cancel:before,.ion-android-car:before,.ion-android-cart:before,.ion-android-chat:before,.ion-android-checkbox:before,.ion-android-checkbox-blank:before,.ion-android-checkbox-outline:before,.ion-android-checkbox-outline-blank:before,.ion-android-checkmark-circle:before,.ion-android-clipboard:before,.ion-android-close:before,.ion-android-cloud:before,.ion-android-cloud-circle:before,.ion-android-cloud-done:before,.ion-android-cloud-outline:before,.ion-android-color-palette:before,.ion-android-compass:before,.ion-android-contact:before,.ion-android-contacts:before,.ion-android-contract:before,.ion-android-create:before,.ion-android-delete:before,.ion-android-desktop:before,.ion-android-document:before,.ion-android-done:before,.ion-android-done-all:before,.ion-android-download:before,.ion-android-drafts:before,.ion-android-exit:before,.ion-android-expand:before,.ion-android-favorite:before,.ion-android-favorite-outline:before,.ion-android-film:before,.ion-android-folder:before,.ion-android-folder-open:before,.ion-android-funnel:before,.ion-android-globe:before,.ion-android-hand:before,.ion-android-hangout:before,.ion-android-happy:before,.ion-android-home:before,.ion-android-image:before,.ion-android-laptop:before,.ion-android-list:before,.ion-android-locate:before,.ion-android-lock:before,.ion-android-mail:before,.ion-android-map:before,.ion-android-menu:before,.ion-android-microphone:before,.ion-android-microphone-off:before,.ion-android-more-horizontal:before,.ion-android-more-vertical:before,.ion-android-navigate:before,.ion-android-notifications:before,.ion-android-notifications-none:before,.ion-android-notifications-off:before,.ion-android-open:before,.ion-android-options:before,.ion-android-people:before,.ion-android-person:before,.ion-android-person-add:before,.ion-android-phone-landscape:before,.ion-android-phone-portrait:before,.ion-android-pin:before,.ion-android-plane:before,.ion-android-playstore:before,.ion-android-print:before,.ion-android-radio-button-off:before,.ion-android-radio-button-on:before,.ion-android-refresh:before,.ion-android-remove:before,.ion-android-remove-circle:before,.ion-android-restaurant:before,.ion-android-sad:before,.ion-android-search:before,.ion-android-send:before,.ion-android-settings:before,.ion-android-share:before,.ion-android-share-alt:before,.ion-android-star:before,.ion-android-star-half:before,.ion-android-star-outline:before,.ion-android-stopwatch:before,.ion-android-subway:before,.ion-android-sunny:before,.ion-android-sync:before,.ion-android-textsms:before,.ion-android-time:before,.ion-android-train:before,.ion-android-unlock:before,.ion-android-upload:before,.ion-android-volume-down:before,.ion-android-volume-mute:before,.ion-android-volume-off:before,.ion-android-volume-up:before,.ion-android-walk:before,.ion-android-warning:before,.ion-android-watch:before,.ion-android-wifi:before,.ion-aperture:before,.ion-archive:before,.ion-arrow-down-a:before,.ion-arrow-down-b:before,.ion-arrow-down-c:before,.ion-arrow-expand:before,.ion-arrow-graph-down-left:before,.ion-arrow-graph-down-right:before,.ion-arrow-graph-up-left:before,.ion-arrow-graph-up-right:before,.ion-arrow-left-a:before,.ion-arrow-left-b:before,.ion-arrow-left-c:before,.ion-arrow-move:before,.ion-arrow-resize:before,.ion-arrow-return-left:before,.ion-arrow-return-right:before,.ion-arrow-right-a:before,.ion-arrow-right-b:before,.ion-arrow-right-c:before,.ion-arrow-shrink:before,.ion-arrow-swap:before,.ion-arrow-up-a:before,.ion-arrow-up-b:before,.ion-arrow-up-c:before,.ion-asterisk:before,.ion-at:before,.ion-backspace:before,.ion-backspace-outline:before,.ion-bag:before,.ion-battery-charging:before,.ion-battery-empty:before,.ion-battery-full:before,.ion-battery-half:before,.ion-battery-low:before,.ion-beaker:before,.ion-beer:before,.ion-bluetooth:before,.ion-bonfire:before,.ion-bookmark:before,.ion-bowtie:before,.ion-briefcase:before,.ion-bug:before,.ion-calculator:before,.ion-calendar:before,.ion-camera:before,.ion-card:before,.ion-cash:before,.ion-chatbox:before,.ion-chatbox-working:before,.ion-chatboxes:before,.ion-chatbubble:before,.ion-chatbubble-working:before,.ion-chatbubbles:before,.ion-checkmark:before,.ion-checkmark-circled:before,.ion-checkmark-round:before,.ion-chevron-down:before,.ion-chevron-left:before,.ion-chevron-right:before,.ion-chevron-up:before,.ion-clipboard:before,.ion-clock:before,.ion-close:before,.ion-close-circled:before,.ion-close-round:before,.ion-closed-captioning:before,.ion-cloud:before,.ion-code:before,.ion-code-download:before,.ion-code-working:before,.ion-coffee:before,.ion-compass:before,.ion-compose:before,.ion-connection-bars:before,.ion-contrast:before,.ion-crop:before,.ion-cube:before,.ion-disc:before,.ion-document:before,.ion-document-text:before,.ion-drag:before,.ion-earth:before,.ion-easel:before,.ion-edit:before,.ion-egg:before,.ion-eject:before,.ion-email:before,.ion-email-unread:before,.ion-erlenmeyer-flask:before,.ion-erlenmeyer-flask-bubbles:before,.ion-eye:before,.ion-eye-disabled:before,.ion-female:before,.ion-filing:before,.ion-film-marker:before,.ion-fireball:before,.ion-flag:before,.ion-flame:before,.ion-flash:before,.ion-flash-off:before,.ion-folder:before,.ion-fork:before,.ion-fork-repo:before,.ion-forward:before,.ion-funnel:before,.ion-gear-a:before,.ion-gear-b:before,.ion-grid:before,.ion-hammer:before,.ion-happy:before,.ion-happy-outline:before,.ion-headphone:before,.ion-heart:before,.ion-heart-broken:before,.ion-help:before,.ion-help-buoy:before,.ion-help-circled:before,.ion-home:before,.ion-icecream:before,.ion-image:before,.ion-images:before,.ion-information:before,.ion-information-circled:before,.ion-ionic:before,.ion-ios-alarm:before,.ion-ios-alarm-outline:before,.ion-ios-albums:before,.ion-ios-albums-outline:before,.ion-ios-americanfootball:before,.ion-ios-americanfootball-outline:before,.ion-ios-analytics:before,.ion-ios-analytics-outline:before,.ion-ios-arrow-back:before,.ion-ios-arrow-down:before,.ion-ios-arrow-forward:before,.ion-ios-arrow-left:before,.ion-ios-arrow-right:before,.ion-ios-arrow-thin-down:before,.ion-ios-arrow-thin-left:before,.ion-ios-arrow-thin-right:before,.ion-ios-arrow-thin-up:before,.ion-ios-arrow-up:before,.ion-ios-at:before,.ion-ios-at-outline:before,.ion-ios-barcode:before,.ion-ios-barcode-outline:before,.ion-ios-baseball:before,.ion-ios-baseball-outline:before,.ion-ios-basketball:before,.ion-ios-basketball-outline:before,.ion-ios-bell:before,.ion-ios-bell-outline:before,.ion-ios-body:before,.ion-ios-body-outline:before,.ion-ios-bolt:before,.ion-ios-bolt-outline:before,.ion-ios-book:before,.ion-ios-book-outline:before,.ion-ios-bookmarks:before,.ion-ios-bookmarks-outline:before,.ion-ios-box:before,.ion-ios-box-outline:before,.ion-ios-briefcase:before,.ion-ios-briefcase-outline:before,.ion-ios-browsers:before,.ion-ios-browsers-outline:before,.ion-ios-calculator:before,.ion-ios-calculator-outline:before,.ion-ios-calendar:before,.ion-ios-calendar-outline:before,.ion-ios-camera:before,.ion-ios-camera-outline:before,.ion-ios-cart:before,.ion-ios-cart-outline:before,.ion-ios-chatboxes:before,.ion-ios-chatboxes-outline:before,.ion-ios-chatbubble:before,.ion-ios-chatbubble-outline:before,.ion-ios-checkmark:before,.ion-ios-checkmark-empty:before,.ion-ios-checkmark-outline:before,.ion-ios-circle-filled:before,.ion-ios-circle-outline:before,.ion-ios-clock:before,.ion-ios-clock-outline:before,.ion-ios-close:before,.ion-ios-close-empty:before,.ion-ios-close-outline:before,.ion-ios-cloud:before,.ion-ios-cloud-download:before,.ion-ios-cloud-download-outline:before,.ion-ios-cloud-outline:before,.ion-ios-cloud-upload:before,.ion-ios-cloud-upload-outline:before,.ion-ios-cloudy:before,.ion-ios-cloudy-night:before,.ion-ios-cloudy-night-outline:before,.ion-ios-cloudy-outline:before,.ion-ios-cog:before,.ion-ios-cog-outline:before,.ion-ios-color-filter:before,.ion-ios-color-filter-outline:before,.ion-ios-color-wand:before,.ion-ios-color-wand-outline:before,.ion-ios-compose:before,.ion-ios-compose-outline:before,.ion-ios-contact:before,.ion-ios-contact-outline:before,.ion-ios-copy:before,.ion-ios-copy-outline:before,.ion-ios-crop:before,.ion-ios-crop-strong:before,.ion-ios-download:before,.ion-ios-download-outline:before,.ion-ios-drag:before,.ion-ios-email:before,.ion-ios-email-outline:before,.ion-ios-eye:before,.ion-ios-eye-outline:before,.ion-ios-fastforward:before,.ion-ios-fastforward-outline:before,.ion-ios-filing:before,.ion-ios-filing-outline:before,.ion-ios-film:before,.ion-ios-film-outline:before,.ion-ios-flag:before,.ion-ios-flag-outline:before,.ion-ios-flame:before,.ion-ios-flame-outline:before,.ion-ios-flask:before,.ion-ios-flask-outline:before,.ion-ios-flower:before,.ion-ios-flower-outline:before,.ion-ios-folder:before,.ion-ios-folder-outline:before,.ion-ios-football:before,.ion-ios-football-outline:before,.ion-ios-game-controller-a:before,.ion-ios-game-controller-a-outline:before,.ion-ios-game-controller-b:before,.ion-ios-game-controller-b-outline:before,.ion-ios-gear:before,.ion-ios-gear-outline:before,.ion-ios-glasses:before,.ion-ios-glasses-outline:before,.ion-ios-grid-view:before,.ion-ios-grid-view-outline:before,.ion-ios-heart:before,.ion-ios-heart-outline:before,.ion-ios-help:before,.ion-ios-help-empty:before,.ion-ios-help-outline:before,.ion-ios-home:before,.ion-ios-home-outline:before,.ion-ios-infinite:before,.ion-ios-infinite-outline:before,.ion-ios-information:before,.ion-ios-information-empty:before,.ion-ios-information-outline:before,.ion-ios-ionic-outline:before,.ion-ios-keypad:before,.ion-ios-keypad-outline:before,.ion-ios-lightbulb:before,.ion-ios-lightbulb-outline:before,.ion-ios-list:before,.ion-ios-list-outline:before,.ion-ios-location:before,.ion-ios-location-outline:before,.ion-ios-locked:before,.ion-ios-locked-outline:before,.ion-ios-loop:before,.ion-ios-loop-strong:before,.ion-ios-medical:before,.ion-ios-medical-outline:before,.ion-ios-medkit:before,.ion-ios-medkit-outline:before,.ion-ios-mic:before,.ion-ios-mic-off:before,.ion-ios-mic-outline:before,.ion-ios-minus:before,.ion-ios-minus-empty:before,.ion-ios-minus-outline:before,.ion-ios-monitor:before,.ion-ios-monitor-outline:before,.ion-ios-moon:before,.ion-ios-moon-outline:before,.ion-ios-more:before,.ion-ios-more-outline:before,.ion-ios-musical-note:before,.ion-ios-musical-notes:before,.ion-ios-navigate:before,.ion-ios-navigate-outline:before,.ion-ios-nutrition:before,.ion-ios-nutrition-outline:before,.ion-ios-paper:before,.ion-ios-paper-outline:before,.ion-ios-paperplane:before,.ion-ios-paperplane-outline:before,.ion-ios-partlysunny:before,.ion-ios-partlysunny-outline:before,.ion-ios-pause:before,.ion-ios-pause-outline:before,.ion-ios-paw:before,.ion-ios-paw-outline:before,.ion-ios-people:before,.ion-ios-people-outline:before,.ion-ios-person:before,.ion-ios-person-outline:before,.ion-ios-personadd:before,.ion-ios-personadd-outline:before,.ion-ios-photos:before,.ion-ios-photos-outline:before,.ion-ios-pie:before,.ion-ios-pie-outline:before,.ion-ios-pint:before,.ion-ios-pint-outline:before,.ion-ios-play:before,.ion-ios-play-outline:before,.ion-ios-plus:before,.ion-ios-plus-empty:before,.ion-ios-plus-outline:before,.ion-ios-pricetag:before,.ion-ios-pricetag-outline:before,.ion-ios-pricetags:before,.ion-ios-pricetags-outline:before,.ion-ios-printer:before,.ion-ios-printer-outline:before,.ion-ios-pulse:before,.ion-ios-pulse-strong:before,.ion-ios-rainy:before,.ion-ios-rainy-outline:before,.ion-ios-recording:before,.ion-ios-recording-outline:before,.ion-ios-redo:before,.ion-ios-redo-outline:before,.ion-ios-refresh:before,.ion-ios-refresh-empty:before,.ion-ios-refresh-outline:before,.ion-ios-reload:before,.ion-ios-reverse-camera:before,.ion-ios-reverse-camera-outline:before,.ion-ios-rewind:before,.ion-ios-rewind-outline:before,.ion-ios-rose:before,.ion-ios-rose-outline:before,.ion-ios-search:before,.ion-ios-search-strong:before,.ion-ios-settings:before,.ion-ios-settings-strong:before,.ion-ios-shuffle:before,.ion-ios-shuffle-strong:before,.ion-ios-skipbackward:before,.ion-ios-skipbackward-outline:before,.ion-ios-skipforward:before,.ion-ios-skipforward-outline:before,.ion-ios-snowy:before,.ion-ios-speedometer:before,.ion-ios-speedometer-outline:before,.ion-ios-star:before,.ion-ios-star-half:before,.ion-ios-star-outline:before,.ion-ios-stopwatch:before,.ion-ios-stopwatch-outline:before,.ion-ios-sunny:before,.ion-ios-sunny-outline:before,.ion-ios-telephone:before,.ion-ios-telephone-outline:before,.ion-ios-tennisball:before,.ion-ios-tennisball-outline:before,.ion-ios-thunderstorm:before,.ion-ios-thunderstorm-outline:before,.ion-ios-time:before,.ion-ios-time-outline:before,.ion-ios-timer:before,.ion-ios-timer-outline:before,.ion-ios-toggle:before,.ion-ios-toggle-outline:before,.ion-ios-trash:before,.ion-ios-trash-outline:before,.ion-ios-undo:before,.ion-ios-undo-outline:before,.ion-ios-unlocked:before,.ion-ios-unlocked-outline:before,.ion-ios-upload:before,.ion-ios-upload-outline:before,.ion-ios-videocam:before,.ion-ios-videocam-outline:before,.ion-ios-volume-high:before,.ion-ios-volume-low:before,.ion-ios-wineglass:before,.ion-ios-wineglass-outline:before,.ion-ios-world:before,.ion-ios-world-outline:before,.ion-ipad:before,.ion-iphone:before,.ion-ipod:before,.ion-jet:before,.ion-key:before,.ion-knife:before,.ion-laptop:before,.ion-leaf:before,.ion-levels:before,.ion-lightbulb:before,.ion-link:before,.ion-load-a:before,.ion-load-b:before,.ion-load-c:before,.ion-load-d:before,.ion-location:before,.ion-lock-combination:before,.ion-locked:before,.ion-log-in:before,.ion-log-out:before,.ion-loop:before,.ion-magnet:before,.ion-male:before,.ion-man:before,.ion-map:before,.ion-medkit:before,.ion-merge:before,.ion-mic-a:before,.ion-mic-b:before,.ion-mic-c:before,.ion-minus:before,.ion-minus-circled:before,.ion-minus-round:before,.ion-model-s:before,.ion-monitor:before,.ion-more:before,.ion-mouse:before,.ion-music-note:before,.ion-navicon:before,.ion-navicon-round:before,.ion-navigate:before,.ion-network:before,.ion-no-smoking:before,.ion-nuclear:before,.ion-outlet:before,.ion-paintbrush:before,.ion-paintbucket:before,.ion-paper-airplane:before,.ion-paperclip:before,.ion-pause:before,.ion-person:before,.ion-person-add:before,.ion-person-stalker:before,.ion-pie-graph:before,.ion-pin:before,.ion-pinpoint:before,.ion-pizza:before,.ion-plane:before,.ion-planet:before,.ion-play:before,.ion-playstation:before,.ion-plus:before,.ion-plus-circled:before,.ion-plus-round:before,.ion-podium:before,.ion-pound:before,.ion-power:before,.ion-pricetag:before,.ion-pricetags:before,.ion-printer:before,.ion-pull-request:before,.ion-qr-scanner:before,.ion-quote:before,.ion-radio-waves:before,.ion-record:before,.ion-refresh:before,.ion-reply:before,.ion-reply-all:before,.ion-ribbon-a:before,.ion-ribbon-b:before,.ion-sad:before,.ion-sad-outline:before,.ion-scissors:before,.ion-search:before,.ion-settings:before,.ion-share:before,.ion-shuffle:before,.ion-skip-backward:before,.ion-skip-forward:before,.ion-social-android:before,.ion-social-android-outline:before,.ion-social-angular:before,.ion-social-angular-outline:before,.ion-social-apple:before,.ion-social-apple-outline:before,.ion-social-bitcoin:before,.ion-social-bitcoin-outline:before,.ion-social-buffer:before,.ion-social-buffer-outline:before,.ion-social-chrome:before,.ion-social-chrome-outline:before,.ion-social-codepen:before,.ion-social-codepen-outline:before,.ion-social-css3:before,.ion-social-css3-outline:before,.ion-social-designernews:before,.ion-social-designernews-outline:before,.ion-social-dribbble:before,.ion-social-dribbble-outline:before,.ion-social-dropbox:before,.ion-social-dropbox-outline:before,.ion-social-euro:before,.ion-social-euro-outline:before,.ion-social-facebook:before,.ion-social-facebook-outline:before,.ion-social-foursquare:before,.ion-social-foursquare-outline:before,.ion-social-freebsd-devil:before,.ion-social-github:before,.ion-social-github-outline:before,.ion-social-google:before,.ion-social-google-outline:before,.ion-social-googleplus:before,.ion-social-googleplus-outline:before,.ion-social-hackernews:before,.ion-social-hackernews-outline:before,.ion-social-html5:before,.ion-social-html5-outline:before,.ion-social-instagram:before,.ion-social-instagram-outline:before,.ion-social-javascript:before,.ion-social-javascript-outline:before,.ion-social-linkedin:before,.ion-social-linkedin-outline:before,.ion-social-markdown:before,.ion-social-nodejs:before,.ion-social-octocat:before,.ion-social-pinterest:before,.ion-social-pinterest-outline:before,.ion-social-python:before,.ion-social-reddit:before,.ion-social-reddit-outline:before,.ion-social-rss:before,.ion-social-rss-outline:before,.ion-social-sass:before,.ion-social-skype:before,.ion-social-skype-outline:before,.ion-social-snapchat:before,.ion-social-snapchat-outline:before,.ion-social-tumblr:before,.ion-social-tumblr-outline:before,.ion-social-tux:before,.ion-social-twitch:before,.ion-social-twitch-outline:before,.ion-social-twitter:before,.ion-social-twitter-outline:before,.ion-social-usd:before,.ion-social-usd-outline:before,.ion-social-vimeo:before,.ion-social-vimeo-outline:before,.ion-social-whatsapp:before,.ion-social-whatsapp-outline:before,.ion-social-windows:before,.ion-social-windows-outline:before,.ion-social-wordpress:before,.ion-social-wordpress-outline:before,.ion-social-yahoo:before,.ion-social-yahoo-outline:before,.ion-social-yen:before,.ion-social-yen-outline:before,.ion-social-youtube:before,.ion-social-youtube-outline:before,.ion-soup-can:before,.ion-soup-can-outline:before,.ion-speakerphone:before,.ion-speedometer:before,.ion-spoon:before,.ion-star:before,.ion-stats-bars:before,.ion-steam:before,.ion-stop:before,.ion-thermometer:before,.ion-thumbsdown:before,.ion-thumbsup:before,.ion-toggle:before,.ion-toggle-filled:before,.ion-transgender:before,.ion-trash-a:before,.ion-trash-b:before,.ion-trophy:before,.ion-tshirt:before,.ion-tshirt-outline:before,.ion-umbrella:before,.ion-university:before,.ion-unlocked:before,.ion-upload:before,.ion-usb:before,.ion-videocamera:before,.ion-volume-high:before,.ion-volume-low:before,.ion-volume-medium:before,.ion-volume-mute:before,.ion-wand:before,.ion-waterdrop:before,.ion-wifi:before,.ion-wineglass:before,.ion-woman:before,.ion-wrench:before,.ion-xbox:before{display:inline-block;font-family:"Ionicons";speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;text-rendering:auto;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ion-alert:before{content:"\f101"}.ion-alert-circled:before{content:"\f100"}.ion-android-add:before{content:"\f2c7"}.ion-android-add-circle:before{content:"\f359"}.ion-android-alarm-clock:before{content:"\f35a"}.ion-android-alert:before{content:"\f35b"}.ion-android-apps:before{content:"\f35c"}.ion-android-archive:before{content:"\f2c9"}.ion-android-arrow-back:before{content:"\f2ca"}.ion-android-arrow-down:before{content:"\f35d"}.ion-android-arrow-dropdown:before{content:"\f35f"}.ion-android-arrow-dropdown-circle:before{content:"\f35e"}.ion-android-arrow-dropleft:before{content:"\f361"}.ion-android-arrow-dropleft-circle:before{content:"\f360"}.ion-android-arrow-dropright:before{content:"\f363"}.ion-android-arrow-dropright-circle:before{content:"\f362"}.ion-android-arrow-dropup:before{content:"\f365"}.ion-android-arrow-dropup-circle:before{content:"\f364"}.ion-android-arrow-forward:before{content:"\f30f"}.ion-android-arrow-up:before{content:"\f366"}.ion-android-attach:before{content:"\f367"}.ion-android-bar:before{content:"\f368"}.ion-android-bicycle:before{content:"\f369"}.ion-android-boat:before{content:"\f36a"}.ion-android-bookmark:before{content:"\f36b"}.ion-android-bulb:before{content:"\f36c"}.ion-android-bus:before{content:"\f36d"}.ion-android-calendar:before{content:"\f2d1"}.ion-android-call:before{content:"\f2d2"}.ion-android-camera:before{content:"\f2d3"}.ion-android-cancel:before{content:"\f36e"}.ion-android-car:before{content:"\f36f"}.ion-android-cart:before{content:"\f370"}.ion-android-chat:before{content:"\f2d4"}.ion-android-checkbox:before{content:"\f374"}.ion-android-checkbox-blank:before{content:"\f371"}.ion-android-checkbox-outline:before{content:"\f373"}.ion-android-checkbox-outline-blank:before{content:"\f372"}.ion-android-checkmark-circle:before{content:"\f375"}.ion-android-clipboard:before{content:"\f376"}.ion-android-close:before{content:"\f2d7"}.ion-android-cloud:before{content:"\f37a"}.ion-android-cloud-circle:before{content:"\f377"}.ion-android-cloud-done:before{content:"\f378"}.ion-android-cloud-outline:before{content:"\f379"}.ion-android-color-palette:before{content:"\f37b"}.ion-android-compass:before{content:"\f37c"}.ion-android-contact:before{content:"\f2d8"}.ion-android-contacts:before{content:"\f2d9"}.ion-android-contract:before{content:"\f37d"}.ion-android-create:before{content:"\f37e"}.ion-android-delete:before{content:"\f37f"}.ion-android-desktop:before{content:"\f380"}.ion-android-document:before{content:"\f381"}.ion-android-done:before{content:"\f383"}.ion-android-done-all:before{content:"\f382"}.ion-android-download:before{content:"\f2dd"}.ion-android-drafts:before{content:"\f384"}.ion-android-exit:before{content:"\f385"}.ion-android-expand:before{content:"\f386"}.ion-android-favorite:before{content:"\f388"}.ion-android-favorite-outline:before{content:"\f387"}.ion-android-film:before{content:"\f389"}.ion-android-folder:before{content:"\f2e0"}.ion-android-folder-open:before{content:"\f38a"}.ion-android-funnel:before{content:"\f38b"}.ion-android-globe:before{content:"\f38c"}.ion-android-hand:before{content:"\f2e3"}.ion-android-hangout:before{content:"\f38d"}.ion-android-happy:before{content:"\f38e"}.ion-android-home:before{content:"\f38f"}.ion-android-image:before{content:"\f2e4"}.ion-android-laptop:before{content:"\f390"}.ion-android-list:before{content:"\f391"}.ion-android-locate:before{content:"\f2e9"}.ion-android-lock:before{content:"\f392"}.ion-android-mail:before{content:"\f2eb"}.ion-android-map:before{content:"\f393"}.ion-android-menu:before{content:"\f394"}.ion-android-microphone:before{content:"\f2ec"}.ion-android-microphone-off:before{content:"\f395"}.ion-android-more-horizontal:before{content:"\f396"}.ion-android-more-vertical:before{content:"\f397"}.ion-android-navigate:before{content:"\f398"}.ion-android-notifications:before{content:"\f39b"}.ion-android-notifications-none:before{content:"\f399"}.ion-android-notifications-off:before{content:"\f39a"}.ion-android-open:before{content:"\f39c"}.ion-android-options:before{content:"\f39d"}.ion-android-people:before{content:"\f39e"}.ion-android-person:before{content:"\f3a0"}.ion-android-person-add:before{content:"\f39f"}.ion-android-phone-landscape:before{content:"\f3a1"}.ion-android-phone-portrait:before{content:"\f3a2"}.ion-android-pin:before{content:"\f3a3"}.ion-android-plane:before{content:"\f3a4"}.ion-android-playstore:before{content:"\f2f0"}.ion-android-print:before{content:"\f3a5"}.ion-android-radio-button-off:before{content:"\f3a6"}.ion-android-radio-button-on:before{content:"\f3a7"}.ion-android-refresh:before{content:"\f3a8"}.ion-android-remove:before{content:"\f2f4"}.ion-android-remove-circle:before{content:"\f3a9"}.ion-android-restaurant:before{content:"\f3aa"}.ion-android-sad:before{content:"\f3ab"}.ion-android-search:before{content:"\f2f5"}.ion-android-send:before{content:"\f2f6"}.ion-android-settings:before{content:"\f2f7"}.ion-android-share:before{content:"\f2f8"}.ion-android-share-alt:before{content:"\f3ac"}.ion-android-star:before{content:"\f2fc"}.ion-android-star-half:before{content:"\f3ad"}.ion-android-star-outline:before{content:"\f3ae"}.ion-android-stopwatch:before{content:"\f2fd"}.ion-android-subway:before{content:"\f3af"}.ion-android-sunny:before{content:"\f3b0"}.ion-android-sync:before{content:"\f3b1"}.ion-android-textsms:before{content:"\f3b2"}.ion-android-time:before{content:"\f3b3"}.ion-android-train:before{content:"\f3b4"}.ion-android-unlock:before{content:"\f3b5"}.ion-android-upload:before{content:"\f3b6"}.ion-android-volume-down:before{content:"\f3b7"}.ion-android-volume-mute:before{content:"\f3b8"}.ion-android-volume-off:before{content:"\f3b9"}.ion-android-volume-up:before{content:"\f3ba"}.ion-android-walk:before{content:"\f3bb"}.ion-android-warning:before{content:"\f3bc"}.ion-android-watch:before{content:"\f3bd"}.ion-android-wifi:before{content:"\f305"}.ion-aperture:before{content:"\f313"}.ion-archive:before{content:"\f102"}.ion-arrow-down-a:before{content:"\f103"}.ion-arrow-down-b:before{content:"\f104"}.ion-arrow-down-c:before{content:"\f105"}.ion-arrow-expand:before{content:"\f25e"}.ion-arrow-graph-down-left:before{content:"\f25f"}.ion-arrow-graph-down-right:before{content:"\f260"}.ion-arrow-graph-up-left:before{content:"\f261"}.ion-arrow-graph-up-right:before{content:"\f262"}.ion-arrow-left-a:before{content:"\f106"}.ion-arrow-left-b:before{content:"\f107"}.ion-arrow-left-c:before{content:"\f108"}.ion-arrow-move:before{content:"\f263"}.ion-arrow-resize:before{content:"\f264"}.ion-arrow-return-left:before{content:"\f265"}.ion-arrow-return-right:before{content:"\f266"}.ion-arrow-right-a:before{content:"\f109"}.ion-arrow-right-b:before{content:"\f10a"}.ion-arrow-right-c:before{content:"\f10b"}.ion-arrow-shrink:before{content:"\f267"}.ion-arrow-swap:before{content:"\f268"}.ion-arrow-up-a:before{content:"\f10c"}.ion-arrow-up-b:before{content:"\f10d"}.ion-arrow-up-c:before{content:"\f10e"}.ion-asterisk:before{content:"\f314"}.ion-at:before{content:"\f10f"}.ion-backspace:before{content:"\f3bf"}.ion-backspace-outline:before{content:"\f3be"}.ion-bag:before{content:"\f110"}.ion-battery-charging:before{content:"\f111"}.ion-battery-empty:before{content:"\f112"}.ion-battery-full:before{content:"\f113"}.ion-battery-half:before{content:"\f114"}.ion-battery-low:before{content:"\f115"}.ion-beaker:before{content:"\f269"}.ion-beer:before{content:"\f26a"}.ion-bluetooth:before{content:"\f116"}.ion-bonfire:before{content:"\f315"}.ion-bookmark:before{content:"\f26b"}.ion-bowtie:before{content:"\f3c0"}.ion-briefcase:before{content:"\f26c"}.ion-bug:before{content:"\f2be"}.ion-calculator:before{content:"\f26d"}.ion-calendar:before{content:"\f117"}.ion-camera:before{content:"\f118"}.ion-card:before{content:"\f119"}.ion-cash:before{content:"\f316"}.ion-chatbox:before{content:"\f11b"}.ion-chatbox-working:before{content:"\f11a"}.ion-chatboxes:before{content:"\f11c"}.ion-chatbubble:before{content:"\f11e"}.ion-chatbubble-working:before{content:"\f11d"}.ion-chatbubbles:before{content:"\f11f"}.ion-checkmark:before{content:"\f122"}.ion-checkmark-circled:before{content:"\f120"}.ion-checkmark-round:before{content:"\f121"}.ion-chevron-down:before{content:"\f123"}.ion-chevron-left:before{content:"\f124"}.ion-chevron-right:before{content:"\f125"}.ion-chevron-up:before{content:"\f126"}.ion-clipboard:before{content:"\f127"}.ion-clock:before{content:"\f26e"}.ion-close:before{content:"\f12a"}.ion-close-circled:before{content:"\f128"}.ion-close-round:before{content:"\f129"}.ion-closed-captioning:before{content:"\f317"}.ion-cloud:before{content:"\f12b"}.ion-code:before{content:"\f271"}.ion-code-download:before{content:"\f26f"}.ion-code-working:before{content:"\f270"}.ion-coffee:before{content:"\f272"}.ion-compass:before{content:"\f273"}.ion-compose:before{content:"\f12c"}.ion-connection-bars:before{content:"\f274"}.ion-contrast:before{content:"\f275"}.ion-crop:before{content:"\f3c1"}.ion-cube:before{content:"\f318"}.ion-disc:before{content:"\f12d"}.ion-document:before{content:"\f12f"}.ion-document-text:before{content:"\f12e"}.ion-drag:before{content:"\f130"}.ion-earth:before{content:"\f276"}.ion-easel:before{content:"\f3c2"}.ion-edit:before{content:"\f2bf"}.ion-egg:before{content:"\f277"}.ion-eject:before{content:"\f131"}.ion-email:before{content:"\f132"}.ion-email-unread:before{content:"\f3c3"}.ion-erlenmeyer-flask:before{content:"\f3c5"}.ion-erlenmeyer-flask-bubbles:before{content:"\f3c4"}.ion-eye:before{content:"\f133"}.ion-eye-disabled:before{content:"\f306"}.ion-female:before{content:"\f278"}.ion-filing:before{content:"\f134"}.ion-film-marker:before{content:"\f135"}.ion-fireball:before{content:"\f319"}.ion-flag:before{content:"\f279"}.ion-flame:before{content:"\f31a"}.ion-flash:before{content:"\f137"}.ion-flash-off:before{content:"\f136"}.ion-folder:before{content:"\f139"}.ion-fork:before{content:"\f27a"}.ion-fork-repo:before{content:"\f2c0"}.ion-forward:before{content:"\f13a"}.ion-funnel:before{content:"\f31b"}.ion-gear-a:before{content:"\f13d"}.ion-gear-b:before{content:"\f13e"}.ion-grid:before{content:"\f13f"}.ion-hammer:before{content:"\f27b"}.ion-happy:before{content:"\f31c"}.ion-happy-outline:before{content:"\f3c6"}.ion-headphone:before{content:"\f140"}.ion-heart:before{content:"\f141"}.ion-heart-broken:before{content:"\f31d"}.ion-help:before{content:"\f143"}.ion-help-buoy:before{content:"\f27c"}.ion-help-circled:before{content:"\f142"}.ion-home:before{content:"\f144"}.ion-icecream:before{content:"\f27d"}.ion-image:before{content:"\f147"}.ion-images:before{content:"\f148"}.ion-information:before{content:"\f14a"}.ion-information-circled:before{content:"\f149"}.ion-ionic:before{content:"\f14b"}.ion-ios-alarm:before{content:"\f3c8"}.ion-ios-alarm-outline:before{content:"\f3c7"}.ion-ios-albums:before{content:"\f3ca"}.ion-ios-albums-outline:before{content:"\f3c9"}.ion-ios-americanfootball:before{content:"\f3cc"}.ion-ios-americanfootball-outline:before{content:"\f3cb"}.ion-ios-analytics:before{content:"\f3ce"}.ion-ios-analytics-outline:before{content:"\f3cd"}.ion-ios-arrow-back:before{content:"\f3cf"}.ion-ios-arrow-down:before{content:"\f3d0"}.ion-ios-arrow-forward:before{content:"\f3d1"}.ion-ios-arrow-left:before{content:"\f3d2"}.ion-ios-arrow-right:before{content:"\f3d3"}.ion-ios-arrow-thin-down:before{content:"\f3d4"}.ion-ios-arrow-thin-left:before{content:"\f3d5"}.ion-ios-arrow-thin-right:before{content:"\f3d6"}.ion-ios-arrow-thin-up:before{content:"\f3d7"}.ion-ios-arrow-up:before{content:"\f3d8"}.ion-ios-at:before{content:"\f3da"}.ion-ios-at-outline:before{content:"\f3d9"}.ion-ios-barcode:before{content:"\f3dc"}.ion-ios-barcode-outline:before{content:"\f3db"}.ion-ios-baseball:before{content:"\f3de"}.ion-ios-baseball-outline:before{content:"\f3dd"}.ion-ios-basketball:before{content:"\f3e0"}.ion-ios-basketball-outline:before{content:"\f3df"}.ion-ios-bell:before{content:"\f3e2"}.ion-ios-bell-outline:before{content:"\f3e1"}.ion-ios-body:before{content:"\f3e4"}.ion-ios-body-outline:before{content:"\f3e3"}.ion-ios-bolt:before{content:"\f3e6"}.ion-ios-bolt-outline:before{content:"\f3e5"}.ion-ios-book:before{content:"\f3e8"}.ion-ios-book-outline:before{content:"\f3e7"}.ion-ios-bookmarks:before{content:"\f3ea"}.ion-ios-bookmarks-outline:before{content:"\f3e9"}.ion-ios-box:before{content:"\f3ec"}.ion-ios-box-outline:before{content:"\f3eb"}.ion-ios-briefcase:before{content:"\f3ee"}.ion-ios-briefcase-outline:before{content:"\f3ed"}.ion-ios-browsers:before{content:"\f3f0"}.ion-ios-browsers-outline:before{content:"\f3ef"}.ion-ios-calculator:before{content:"\f3f2"}.ion-ios-calculator-outline:before{content:"\f3f1"}.ion-ios-calendar:before{content:"\f3f4"}.ion-ios-calendar-outline:before{content:"\f3f3"}.ion-ios-camera:before{content:"\f3f6"}.ion-ios-camera-outline:before{content:"\f3f5"}.ion-ios-cart:before{content:"\f3f8"}.ion-ios-cart-outline:before{content:"\f3f7"}.ion-ios-chatboxes:before{content:"\f3fa"}.ion-ios-chatboxes-outline:before{content:"\f3f9"}.ion-ios-chatbubble:before{content:"\f3fc"}.ion-ios-chatbubble-outline:before{content:"\f3fb"}.ion-ios-checkmark:before{content:"\f3ff"}.ion-ios-checkmark-empty:before{content:"\f3fd"}.ion-ios-checkmark-outline:before{content:"\f3fe"}.ion-ios-circle-filled:before{content:"\f400"}.ion-ios-circle-outline:before{content:"\f401"}.ion-ios-clock:before{content:"\f403"}.ion-ios-clock-outline:before{content:"\f402"}.ion-ios-close:before{content:"\f406"}.ion-ios-close-empty:before{content:"\f404"}.ion-ios-close-outline:before{content:"\f405"}.ion-ios-cloud:before{content:"\f40c"}.ion-ios-cloud-download:before{content:"\f408"}.ion-ios-cloud-download-outline:before{content:"\f407"}.ion-ios-cloud-outline:before{content:"\f409"}.ion-ios-cloud-upload:before{content:"\f40b"}.ion-ios-cloud-upload-outline:before{content:"\f40a"}.ion-ios-cloudy:before{content:"\f410"}.ion-ios-cloudy-night:before{content:"\f40e"}.ion-ios-cloudy-night-outline:before{content:"\f40d"}.ion-ios-cloudy-outline:before{content:"\f40f"}.ion-ios-cog:before{content:"\f412"}.ion-ios-cog-outline:before{content:"\f411"}.ion-ios-color-filter:before{content:"\f414"}.ion-ios-color-filter-outline:before{content:"\f413"}.ion-ios-color-wand:before{content:"\f416"}.ion-ios-color-wand-outline:before{content:"\f415"}.ion-ios-compose:before{content:"\f418"}.ion-ios-compose-outline:before{content:"\f417"}.ion-ios-contact:before{content:"\f41a"}.ion-ios-contact-outline:before{content:"\f419"}.ion-ios-copy:before{content:"\f41c"}.ion-ios-copy-outline:before{content:"\f41b"}.ion-ios-crop:before{content:"\f41e"}.ion-ios-crop-strong:before{content:"\f41d"}.ion-ios-download:before{content:"\f420"}.ion-ios-download-outline:before{content:"\f41f"}.ion-ios-drag:before{content:"\f421"}.ion-ios-email:before{content:"\f423"}.ion-ios-email-outline:before{content:"\f422"}.ion-ios-eye:before{content:"\f425"}.ion-ios-eye-outline:before{content:"\f424"}.ion-ios-fastforward:before{content:"\f427"}.ion-ios-fastforward-outline:before{content:"\f426"}.ion-ios-filing:before{content:"\f429"}.ion-ios-filing-outline:before{content:"\f428"}.ion-ios-film:before{content:"\f42b"}.ion-ios-film-outline:before{content:"\f42a"}.ion-ios-flag:before{content:"\f42d"}.ion-ios-flag-outline:before{content:"\f42c"}.ion-ios-flame:before{content:"\f42f"}.ion-ios-flame-outline:before{content:"\f42e"}.ion-ios-flask:before{content:"\f431"}.ion-ios-flask-outline:before{content:"\f430"}.ion-ios-flower:before{content:"\f433"}.ion-ios-flower-outline:before{content:"\f432"}.ion-ios-folder:before{content:"\f435"}.ion-ios-folder-outline:before{content:"\f434"}.ion-ios-football:before{content:"\f437"}.ion-ios-football-outline:before{content:"\f436"}.ion-ios-game-controller-a:before{content:"\f439"}.ion-ios-game-controller-a-outline:before{content:"\f438"}.ion-ios-game-controller-b:before{content:"\f43b"}.ion-ios-game-controller-b-outline:before{content:"\f43a"}.ion-ios-gear:before{content:"\f43d"}.ion-ios-gear-outline:before{content:"\f43c"}.ion-ios-glasses:before{content:"\f43f"}.ion-ios-glasses-outline:before{content:"\f43e"}.ion-ios-grid-view:before{content:"\f441"}.ion-ios-grid-view-outline:before{content:"\f440"}.ion-ios-heart:before{content:"\f443"}.ion-ios-heart-outline:before{content:"\f442"}.ion-ios-help:before{content:"\f446"}.ion-ios-help-empty:before{content:"\f444"}.ion-ios-help-outline:before{content:"\f445"}.ion-ios-home:before{content:"\f448"}.ion-ios-home-outline:before{content:"\f447"}.ion-ios-infinite:before{content:"\f44a"}.ion-ios-infinite-outline:before{content:"\f449"}.ion-ios-information:before{content:"\f44d"}.ion-ios-information-empty:before{content:"\f44b"}.ion-ios-information-outline:before{content:"\f44c"}.ion-ios-ionic-outline:before{content:"\f44e"}.ion-ios-keypad:before{content:"\f450"}.ion-ios-keypad-outline:before{content:"\f44f"}.ion-ios-lightbulb:before{content:"\f452"}.ion-ios-lightbulb-outline:before{content:"\f451"}.ion-ios-list:before{content:"\f454"}.ion-ios-list-outline:before{content:"\f453"}.ion-ios-location:before{content:"\f456"}.ion-ios-location-outline:before{content:"\f455"}.ion-ios-locked:before{content:"\f458"}.ion-ios-locked-outline:before{content:"\f457"}.ion-ios-loop:before{content:"\f45a"}.ion-ios-loop-strong:before{content:"\f459"}.ion-ios-medical:before{content:"\f45c"}.ion-ios-medical-outline:before{content:"\f45b"}.ion-ios-medkit:before{content:"\f45e"}.ion-ios-medkit-outline:before{content:"\f45d"}.ion-ios-mic:before{content:"\f461"}.ion-ios-mic-off:before{content:"\f45f"}.ion-ios-mic-outline:before{content:"\f460"}.ion-ios-minus:before{content:"\f464"}.ion-ios-minus-empty:before{content:"\f462"}.ion-ios-minus-outline:before{content:"\f463"}.ion-ios-monitor:before{content:"\f466"}.ion-ios-monitor-outline:before{content:"\f465"}.ion-ios-moon:before{content:"\f468"}.ion-ios-moon-outline:before{content:"\f467"}.ion-ios-more:before{content:"\f46a"}.ion-ios-more-outline:before{content:"\f469"}.ion-ios-musical-note:before{content:"\f46b"}.ion-ios-musical-notes:before{content:"\f46c"}.ion-ios-navigate:before{content:"\f46e"}.ion-ios-navigate-outline:before{content:"\f46d"}.ion-ios-nutrition:before{content:"\f470"}.ion-ios-nutrition-outline:before{content:"\f46f"}.ion-ios-paper:before{content:"\f472"}.ion-ios-paper-outline:before{content:"\f471"}.ion-ios-paperplane:before{content:"\f474"}.ion-ios-paperplane-outline:before{content:"\f473"}.ion-ios-partlysunny:before{content:"\f476"}.ion-ios-partlysunny-outline:before{content:"\f475"}.ion-ios-pause:before{content:"\f478"}.ion-ios-pause-outline:before{content:"\f477"}.ion-ios-paw:before{content:"\f47a"}.ion-ios-paw-outline:before{content:"\f479"}.ion-ios-people:before{content:"\f47c"}.ion-ios-people-outline:before{content:"\f47b"}.ion-ios-person:before{content:"\f47e"}.ion-ios-person-outline:before{content:"\f47d"}.ion-ios-personadd:before{content:"\f480"}.ion-ios-personadd-outline:before{content:"\f47f"}.ion-ios-photos:before{content:"\f482"}.ion-ios-photos-outline:before{content:"\f481"}.ion-ios-pie:before{content:"\f484"}.ion-ios-pie-outline:before{content:"\f483"}.ion-ios-pint:before{content:"\f486"}.ion-ios-pint-outline:before{content:"\f485"}.ion-ios-play:before{content:"\f488"}.ion-ios-play-outline:before{content:"\f487"}.ion-ios-plus:before{content:"\f48b"}.ion-ios-plus-empty:before{content:"\f489"}.ion-ios-plus-outline:before{content:"\f48a"}.ion-ios-pricetag:before{content:"\f48d"}.ion-ios-pricetag-outline:before{content:"\f48c"}.ion-ios-pricetags:before{content:"\f48f"}.ion-ios-pricetags-outline:before{content:"\f48e"}.ion-ios-printer:before{content:"\f491"}.ion-ios-printer-outline:before{content:"\f490"}.ion-ios-pulse:before{content:"\f493"}.ion-ios-pulse-strong:before{content:"\f492"}.ion-ios-rainy:before{content:"\f495"}.ion-ios-rainy-outline:before{content:"\f494"}.ion-ios-recording:before{content:"\f497"}.ion-ios-recording-outline:before{content:"\f496"}.ion-ios-redo:before{content:"\f499"}.ion-ios-redo-outline:before{content:"\f498"}.ion-ios-refresh:before{content:"\f49c"}.ion-ios-refresh-empty:before{content:"\f49a"}.ion-ios-refresh-outline:before{content:"\f49b"}.ion-ios-reload:before{content:"\f49d"}.ion-ios-reverse-camera:before{content:"\f49f"}.ion-ios-reverse-camera-outline:before{content:"\f49e"}.ion-ios-rewind:before{content:"\f4a1"}.ion-ios-rewind-outline:before{content:"\f4a0"}.ion-ios-rose:before{content:"\f4a3"}.ion-ios-rose-outline:before{content:"\f4a2"}.ion-ios-search:before{content:"\f4a5"}.ion-ios-search-strong:before{content:"\f4a4"}.ion-ios-settings:before{content:"\f4a7"}.ion-ios-settings-strong:before{content:"\f4a6"}.ion-ios-shuffle:before{content:"\f4a9"}.ion-ios-shuffle-strong:before{content:"\f4a8"}.ion-ios-skipbackward:before{content:"\f4ab"}.ion-ios-skipbackward-outline:before{content:"\f4aa"}.ion-ios-skipforward:before{content:"\f4ad"}.ion-ios-skipforward-outline:before{content:"\f4ac"}.ion-ios-snowy:before{content:"\f4ae"}.ion-ios-speedometer:before{content:"\f4b0"}.ion-ios-speedometer-outline:before{content:"\f4af"}.ion-ios-star:before{content:"\f4b3"}.ion-ios-star-half:before{content:"\f4b1"}.ion-ios-star-outline:before{content:"\f4b2"}.ion-ios-stopwatch:before{content:"\f4b5"}.ion-ios-stopwatch-outline:before{content:"\f4b4"}.ion-ios-sunny:before{content:"\f4b7"}.ion-ios-sunny-outline:before{content:"\f4b6"}.ion-ios-telephone:before{content:"\f4b9"}.ion-ios-telephone-outline:before{content:"\f4b8"}.ion-ios-tennisball:before{content:"\f4bb"}.ion-ios-tennisball-outline:before{content:"\f4ba"}.ion-ios-thunderstorm:before{content:"\f4bd"}.ion-ios-thunderstorm-outline:before{content:"\f4bc"}.ion-ios-time:before{content:"\f4bf"}.ion-ios-time-outline:before{content:"\f4be"}.ion-ios-timer:before{content:"\f4c1"}.ion-ios-timer-outline:before{content:"\f4c0"}.ion-ios-toggle:before{content:"\f4c3"}.ion-ios-toggle-outline:before{content:"\f4c2"}.ion-ios-trash:before{content:"\f4c5"}.ion-ios-trash-outline:before{content:"\f4c4"}.ion-ios-undo:before{content:"\f4c7"}.ion-ios-undo-outline:before{content:"\f4c6"}.ion-ios-unlocked:before{content:"\f4c9"}.ion-ios-unlocked-outline:before{content:"\f4c8"}.ion-ios-upload:before{content:"\f4cb"}.ion-ios-upload-outline:before{content:"\f4ca"}.ion-ios-videocam:before{content:"\f4cd"}.ion-ios-videocam-outline:before{content:"\f4cc"}.ion-ios-volume-high:before{content:"\f4ce"}.ion-ios-volume-low:before{content:"\f4cf"}.ion-ios-wineglass:before{content:"\f4d1"}.ion-ios-wineglass-outline:before{content:"\f4d0"}.ion-ios-world:before{content:"\f4d3"}.ion-ios-world-outline:before{content:"\f4d2"}.ion-ipad:before{content:"\f1f9"}.ion-iphone:before{content:"\f1fa"}.ion-ipod:before{content:"\f1fb"}.ion-jet:before{content:"\f295"}.ion-key:before{content:"\f296"}.ion-knife:before{content:"\f297"}.ion-laptop:before{content:"\f1fc"}.ion-leaf:before{content:"\f1fd"}.ion-levels:before{content:"\f298"}.ion-lightbulb:before{content:"\f299"}.ion-link:before{content:"\f1fe"}.ion-load-a:before{content:"\f29a"}.ion-load-b:before{content:"\f29b"}.ion-load-c:before{content:"\f29c"}.ion-load-d:before{content:"\f29d"}.ion-location:before{content:"\f1ff"}.ion-lock-combination:before{content:"\f4d4"}.ion-locked:before{content:"\f200"}.ion-log-in:before{content:"\f29e"}.ion-log-out:before{content:"\f29f"}.ion-loop:before{content:"\f201"}.ion-magnet:before{content:"\f2a0"}.ion-male:before{content:"\f2a1"}.ion-man:before{content:"\f202"}.ion-map:before{content:"\f203"}.ion-medkit:before{content:"\f2a2"}.ion-merge:before{content:"\f33f"}.ion-mic-a:before{content:"\f204"}.ion-mic-b:before{content:"\f205"}.ion-mic-c:before{content:"\f206"}.ion-minus:before{content:"\f209"}.ion-minus-circled:before{content:"\f207"}.ion-minus-round:before{content:"\f208"}.ion-model-s:before{content:"\f2c1"}.ion-monitor:before{content:"\f20a"}.ion-more:before{content:"\f20b"}.ion-mouse:before{content:"\f340"}.ion-music-note:before{content:"\f20c"}.ion-navicon:before{content:"\f20e"}.ion-navicon-round:before{content:"\f20d"}.ion-navigate:before{content:"\f2a3"}.ion-network:before{content:"\f341"}.ion-no-smoking:before{content:"\f2c2"}.ion-nuclear:before{content:"\f2a4"}.ion-outlet:before{content:"\f342"}.ion-paintbrush:before{content:"\f4d5"}.ion-paintbucket:before{content:"\f4d6"}.ion-paper-airplane:before{content:"\f2c3"}.ion-paperclip:before{content:"\f20f"}.ion-pause:before{content:"\f210"}.ion-person:before{content:"\f213"}.ion-person-add:before{content:"\f211"}.ion-person-stalker:before{content:"\f212"}.ion-pie-graph:before{content:"\f2a5"}.ion-pin:before{content:"\f2a6"}.ion-pinpoint:before{content:"\f2a7"}.ion-pizza:before{content:"\f2a8"}.ion-plane:before{content:"\f214"}.ion-planet:before{content:"\f343"}.ion-play:before{content:"\f215"}.ion-playstation:before{content:"\f30a"}.ion-plus:before{content:"\f218"}.ion-plus-circled:before{content:"\f216"}.ion-plus-round:before{content:"\f217"}.ion-podium:before{content:"\f344"}.ion-pound:before{content:"\f219"}.ion-power:before{content:"\f2a9"}.ion-pricetag:before{content:"\f2aa"}.ion-pricetags:before{content:"\f2ab"}.ion-printer:before{content:"\f21a"}.ion-pull-request:before{content:"\f345"}.ion-qr-scanner:before{content:"\f346"}.ion-quote:before{content:"\f347"}.ion-radio-waves:before{content:"\f2ac"}.ion-record:before{content:"\f21b"}.ion-refresh:before{content:"\f21c"}.ion-reply:before{content:"\f21e"}.ion-reply-all:before{content:"\f21d"}.ion-ribbon-a:before{content:"\f348"}.ion-ribbon-b:before{content:"\f349"}.ion-sad:before{content:"\f34a"}.ion-sad-outline:before{content:"\f4d7"}.ion-scissors:before{content:"\f34b"}.ion-search:before{content:"\f21f"}.ion-settings:before{content:"\f2ad"}.ion-share:before{content:"\f220"}.ion-shuffle:before{content:"\f221"}.ion-skip-backward:before{content:"\f222"}.ion-skip-forward:before{content:"\f223"}.ion-social-android:before{content:"\f225"}.ion-social-android-outline:before{content:"\f224"}.ion-social-angular:before{content:"\f4d9"}.ion-social-angular-outline:before{content:"\f4d8"}.ion-social-apple:before{content:"\f227"}.ion-social-apple-outline:before{content:"\f226"}.ion-social-bitcoin:before{content:"\f2af"}.ion-social-bitcoin-outline:before{content:"\f2ae"}.ion-social-buffer:before{content:"\f229"}.ion-social-buffer-outline:before{content:"\f228"}.ion-social-chrome:before{content:"\f4db"}.ion-social-chrome-outline:before{content:"\f4da"}.ion-social-codepen:before{content:"\f4dd"}.ion-social-codepen-outline:before{content:"\f4dc"}.ion-social-css3:before{content:"\f4df"}.ion-social-css3-outline:before{content:"\f4de"}.ion-social-designernews:before{content:"\f22b"}.ion-social-designernews-outline:before{content:"\f22a"}.ion-social-dribbble:before{content:"\f22d"}.ion-social-dribbble-outline:before{content:"\f22c"}.ion-social-dropbox:before{content:"\f22f"}.ion-social-dropbox-outline:before{content:"\f22e"}.ion-social-euro:before{content:"\f4e1"}.ion-social-euro-outline:before{content:"\f4e0"}.ion-social-facebook:before{content:"\f231"}.ion-social-facebook-outline:before{content:"\f230"}.ion-social-foursquare:before{content:"\f34d"}.ion-social-foursquare-outline:before{content:"\f34c"}.ion-social-freebsd-devil:before{content:"\f2c4"}.ion-social-github:before{content:"\f233"}.ion-social-github-outline:before{content:"\f232"}.ion-social-google:before{content:"\f34f"}.ion-social-google-outline:before{content:"\f34e"}.ion-social-googleplus:before{content:"\f235"}.ion-social-googleplus-outline:before{content:"\f234"}.ion-social-hackernews:before{content:"\f237"}.ion-social-hackernews-outline:before{content:"\f236"}.ion-social-html5:before{content:"\f4e3"}.ion-social-html5-outline:before{content:"\f4e2"}.ion-social-instagram:before{content:"\f351"}.ion-social-instagram-outline:before{content:"\f350"}.ion-social-javascript:before{content:"\f4e5"}.ion-social-javascript-outline:before{content:"\f4e4"}.ion-social-linkedin:before{content:"\f239"}.ion-social-linkedin-outline:before{content:"\f238"}.ion-social-markdown:before{content:"\f4e6"}.ion-social-nodejs:before{content:"\f4e7"}.ion-social-octocat:before{content:"\f4e8"}.ion-social-pinterest:before{content:"\f2b1"}.ion-social-pinterest-outline:before{content:"\f2b0"}.ion-social-python:before{content:"\f4e9"}.ion-social-reddit:before{content:"\f23b"}.ion-social-reddit-outline:before{content:"\f23a"}.ion-social-rss:before{content:"\f23d"}.ion-social-rss-outline:before{content:"\f23c"}.ion-social-sass:before{content:"\f4ea"}.ion-social-skype:before{content:"\f23f"}.ion-social-skype-outline:before{content:"\f23e"}.ion-social-snapchat:before{content:"\f4ec"}.ion-social-snapchat-outline:before{content:"\f4eb"}.ion-social-tumblr:before{content:"\f241"}.ion-social-tumblr-outline:before{content:"\f240"}.ion-social-tux:before{content:"\f2c5"}.ion-social-twitch:before{content:"\f4ee"}.ion-social-twitch-outline:before{content:"\f4ed"}.ion-social-twitter:before{content:"\f243"}.ion-social-twitter-outline:before{content:"\f242"}.ion-social-usd:before{content:"\f353"}.ion-social-usd-outline:before{content:"\f352"}.ion-social-vimeo:before{content:"\f245"}.ion-social-vimeo-outline:before{content:"\f244"}.ion-social-whatsapp:before{content:"\f4f0"}.ion-social-whatsapp-outline:before{content:"\f4ef"}.ion-social-windows:before{content:"\f247"}.ion-social-windows-outline:before{content:"\f246"}.ion-social-wordpress:before{content:"\f249"}.ion-social-wordpress-outline:before{content:"\f248"}.ion-social-yahoo:before{content:"\f24b"}.ion-social-yahoo-outline:before{content:"\f24a"}.ion-social-yen:before{content:"\f4f2"}.ion-social-yen-outline:before{content:"\f4f1"}.ion-social-youtube:before{content:"\f24d"}.ion-social-youtube-outline:before{content:"\f24c"}.ion-soup-can:before{content:"\f4f4"}.ion-soup-can-outline:before{content:"\f4f3"}.ion-speakerphone:before{content:"\f2b2"}.ion-speedometer:before{content:"\f2b3"}.ion-spoon:before{content:"\f2b4"}.ion-star:before{content:"\f24e"}.ion-stats-bars:before{content:"\f2b5"}.ion-steam:before{content:"\f30b"}.ion-stop:before{content:"\f24f"}.ion-thermometer:before{content:"\f2b6"}.ion-thumbsdown:before{content:"\f250"}.ion-thumbsup:before{content:"\f251"}.ion-toggle:before{content:"\f355"}.ion-toggle-filled:before{content:"\f354"}.ion-transgender:before{content:"\f4f5"}.ion-trash-a:before{content:"\f252"}.ion-trash-b:before{content:"\f253"}.ion-trophy:before{content:"\f356"}.ion-tshirt:before{content:"\f4f7"}.ion-tshirt-outline:before{content:"\f4f6"}.ion-umbrella:before{content:"\f2b7"}.ion-university:before{content:"\f357"}.ion-unlocked:before{content:"\f254"}.ion-upload:before{content:"\f255"}.ion-usb:before{content:"\f2b8"}.ion-videocamera:before{content:"\f256"}.ion-volume-high:before{content:"\f257"}.ion-volume-low:before{content:"\f258"}.ion-volume-medium:before{content:"\f259"}.ion-volume-mute:before{content:"\f25a"}.ion-wand:before{content:"\f358"}.ion-waterdrop:before{content:"\f25b"}.ion-wifi:before{content:"\f25c"}.ion-wineglass:before{content:"\f2b9"}.ion-woman:before{content:"\f25d"}.ion-wrench:before{content:"\f2ba"}.ion-xbox:before{content:"\f30c"} diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/index.html b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.eot b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.eot new file mode 100644 index 0000000000000000000000000000000000000000..92a3f20a39267ae7f45144f412a995a663730360 GIT binary patch literal 120724 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

    8E#xmG!w{$tO5=<$!EHPzZXo}IBc1_sqA&q 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 literal 0 HcmV?d00001 diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.woff b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.woff new file mode 100644 index 0000000000000000000000000000000000000000..5f3a14e0a5ca6d20cc4fac708979e807b0d51bc3 GIT binary patch literal 67904 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

    @FHUiu&=5w(f-3S1h*&)&h2 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 + + + + +Created by FontForge 20120731 at Thu Dec 4 09:51:48 2014 + By Adam Bradley +Created by Adam Bradley with FontForge 2.0 (http://fontforge.sf.net) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.ttf b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/fonts/ionicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c4e4632486d863337c1c73478ddb3c20726c55a0 GIT binary patch literal 188508 zcmdqKd3YSxbtign?ORt@^;W&_3xLMn=x&lAfC5MmBta73YC&8CYN067k||lTWXX~t zQE_C)9xI6*JGK&YGLG%UPNFP!?D$K}?6D`AIL_uIZ{DMw_kGD^@@8b(aXfh$=>1ML zK!TF&*vWkJ#{;^%s;jH2?>+b2v;59Ew;5-Qh1nVt*`+;ujvc)J9r`zM)(9tW6xatHO9n;nec*i{+_dU3l~575hi>H_hX&&I3T_x zUBUYo@xFTg{)Zo%HP}A9{}aZ{r(XYtyUvO~`q^J(!pHG_=Ck*oee9C_I`bhWeCo?M zzxcq}`|tUQ@c;1u-hYcR;rlMV;f)Xf=x_Y#Uozn{YiQmVEO z0#E8a`~9h(_(R%$@guDt+StB_N&GGR8%)M22lzQ0UD(+E152@Iad)PObZ+m@+1$Z) z`P}^7?CRIpH~x`defcUI=2w}I!@)OgoK_6p(e?DqZhZC)yrZ+SOk&iZaaP1$sD4uU-GYum6|pe}Da@>)*QmKfkVg-THd? z>$z|I;L?9`RfL* ziGF?N<(I=^SO_zF-9BvZu)B80ZrdaFkUe1c*>$^Ym+ZWqv6HrI+qPxvp})PQKWOZC z_s5l+gx~_Mq371WtyJ22{QqD30&~%!ALYj};wtO+>v$&$Ok80C=fXiI2>h^wJwDHv zs>l*f6J6P9w%nH6Xt@>lxkt~PPF)&Ez+zdRHafXH|pJJXWWanEAcL#{8tr8 z*4NMIvZVZ>9FZfw@25>w(^Qk6*7fzzjE*ip|9mi-FJEJ8{7TTTlAp&`;G(cX+`sNfO*$-9Vy!MD(zOIBDU7n)|^#mt+?v*BDxcBMUh|St4zThc*7?dS7bi7_@cdh zo8O1)`2_*pV;3|o$ zo@{m-t#&Kk@)BWAv>4&_8QxM`;|1R8b|!hFb!}~Vb@^~a)Wy{LJ5t!Vdk3b+B_Z;$ zh#gs()VplA-D`9k}#i1c_nkay-uVIW7mhhu^KeO39b{1bOMw+eO7hk=4 z>B^<6SFiS_$}0DH5u=*-GbV`1_#BRNwnTS3N_SZBCIq(`t+yvSt^)E7R77hmCgCg|Eh>e^xI+PoV<*V^59D_)6%A^~OSQ#^}|_~Sd# zrB))kbXuT^8>40m^@$n&(H>`ZPz3WN5esvCOH65U53fX@_C)u7Jsr`TMVNGF}j< z@u^#QqjD?fY_xAHO+bzdbi0cn1P{1`9|L(f(ZnN~c*KTWDHFl*T@y5Ih-be33XT}l zBWdoxnsZ)3liqysiTg1aoNvsRs8@+s+LeGS0!rXA>M*-?&b$^Kf;m$|D`|#fv}Oci zXg+l-H@x{4y7caS>zpCx#hk$m;lg>GAOsUrIEn+p=A4OkiO{^q8TiI>eTu6@o7b2! zTzm}*;b!dRYmkRm*jcv5F8KF8!8P+N7a;cyL7Zc%tjMZzo++lRnCFm>Bf}shgn8BE_#0-Pj!e9$`-TBa^JJ;@7J9FyLfrc9$C`Xz@Wjood z*%-b?o&GV|yZCR7=Y@DoRp_6%sM0$F{J!zAm+)HM7JVF#C0gU%PJ5zvgG#w~RXm1M z@K2w08(RMvvsPQ8zidcdVYyxl!Fny5V#t+e{}@(MZTL3_JOtrP{J-r!)Q4 zY$_4c^-w64&X+3#`C`JeEGLxzWz95=NXRu5O;rp{3ENiK3Ms0g%CIb<9XH1{#5~qw z$NeK?eYLElseI1hxJ1=3ssfX_AfJ>hQRJpBs2W#SphQ@p>`0+140b|md}y#yFBLQC zR5B5D!Y~CwE!Pc2nmk&HwlI8?oTPOlj{SO*mld%jR^l`TXabO$-?GoI6xaQtzptgW z_FcQ$scZGlDgIch;zY6$=W6g;;l=f<+?QJW_O&GZ)jOT_PjOZ?A~r0Gh*7<{NAnUq z%zW^$&!VuPeSazjf#Gq8RuWPe40(k~B9mbKfG&b~l1UOfs*s*v;0%3=JGQB-5{vSP z8g6#WQ+xvYE(e~;@mQ0`W0i*5Qo9wyF!+;3&A{U$cTZ*Rp7M>qH;j()dOWYa;qV(? z(Ut;R@OR@IWhTli8l;D$GHFHUDvS=5pJa+41catJtq2RT7-z9UET09Py|`x>X^OY_r>ITqmxK0&!^QQV+SBu4-oY|z+ z0L&Po$C8A$LB60#qDYMq1<>VY1LW6kz%5_8^~*qpTgK#n2OTP2>ow?bxH$IOWOzmU z=6uqHk^rj~pQwruOaoC?z$=(d@6ofLF3FZ4vqOQ2Ah42YPpb2PNXJa zVLEoS86ox9Gc03?E&JVZSaDF+uv;cE*%RX(uu`C6uoHDl?o-(agwuZtUiWI+`m&~N z%hhvh`Di5PtY6`N#4eI#+WIoAtzXhK{=C-jc%IYWdtHB?Gx*TG{<0#!!dGDn7Fm@I zvL*ijQ)Eq6wDW=iny4~UF(Db4P(H~trb`+WE;Ng@1o=f)k;M0MHqc+MRV(FEK9^3# zBaW>rEXk85O<9QKo)JR5o`f+CG3||c%6Mm@URGkA@rklRwk7NZ{*)by+3O#s*ZGF- z919u!KX{9Eu6EPjgL2 zq%N=6=qLJ&jYM9F#1{qz>h*Ftla5Bv{h@)O!DhX`-rv_K*UBIT2vN!u6Y)qYnglUi z?nDA&1eQ8kWMl3a>{G9-#!Kyb#U1aqOYuaj3&%_)=L}E&Vasu>^~dPdMPt_l(-hY6 z8ohdT^@`6|@!_}VL#|m)(Tc^amznkO!1IC$z$iKEQYAwH}9iMn6Uq zXFwcowoxJ>7|gI++xUvM-1^P*Jz(~Y?@6*@qEi{lNaS;nw=+xt$grexN#U|6VImOJ zumnBDjzSCqYDlLV)lwlfoE~b`DlIMA?0Pnb4HD*U7?C~B$6N;MM{f|WK}Je_N&p*t zGcD$$x2sCqiDffUp`Lz3e`C5>fpFR=^yW-HO7kN6Gz9&`Y+bgM$r7HeT zsgk;LPr6L)C)w2-Ynsb_Y?K}I58D>BJD&@q4;XCN>>@m0uB(EKo}7fGtl*F$1bYfQ zYH~~;5Oa9w=J1n_iMqgOFrlq*(<5((yl~a#aV73G>acsuv5NBTnBa>i9)J83kC(V0 zC5}m&sBvDK+rk1pcHobEYx8#%qKW74_3UVLazrU2O`D%-3-+j}m{x#-R- zcq?d5+}nGPXsvGNLS?`oNLcfCDQyroF(dO+cg>G9IXnkte;T9~CFRcfh`XJ@?x6oY zpG}2i>G~6;JUkRx!jwT5p<$)-&=Z0LaGCS_aQ-c>W2V+0b>vtxvLX6qxKXeJs7tU6 zuo2Kzm=0cIynFdqF5|&5)e7KY{)RzdKU_?qUBV%>N#s|8Ga?v&4r;%90H5PioXQum zi?%|Bpb=O2TVb2q0KKl#Ft3^5(8bmYb5k55IkLjSXi+Hatgw*B5jU_`n64=L64Q0% zC{uK0A>#ub24E53C;yA@z2eU;E-ozW+BGwiN=74$Ego7tbnw8!{)PSf_U_uVYtQ`d znYo#{S$}d{dwgWDzfsO7r&H63Sj3BZpo1GvrU^m>EpOPQUMt}>%CXisZ1@0JYzi<} z0H%>u3WZ;W2?N!NBZ2zjWUkP&vGH8S+>2-GnYfS?SAj}=zv(#Ud*5TauDQ?DYL>}$ z)2eCKXD?m4a^>l#zsQRv0NmktG?R(O9a$}{X0xzt-XB;t=K(TkW@!C0mc1QDN8!ClMnc!ws8F!>yXBLiQ-}o3f|T z?SP?3_5`AbD+SxG3)5ADp##09=p|gaeCsi;3NvCp1~s0@(rECKC(6*+%Qpc64qD8^F`B zFn~|TlCdb^(>;_efY)Yvm}8*_P=`5xlM&0CmoJ;yg!#-fW+F@b`IvEeDtNuT@hKhY z?FVwP_x&}7@2_Q}`nUW3YO`AFeLrR#LFAi2Ikf@=A_Q;)2SiKW0=NVUPr7`WUh9(d z?6bfI6llTAm+2Mg#j{hACDkN41shAc{ET7X#AlwtrH1}Y(6&*G?J|6mrBA}h23;0k zG%-~(&@aGei9}~Wz75R@SA=l{Mbev}Lj1ns!B@F&1~7QBoJe@v60 zB<+x?i!!A692x|T6gU=})*@ZDP%V+~9&=%;lKcYqd8!xYGr%2tZ3-rvTG^aw{E1Mg z*e!&tx$e*V_LqtwWBorFp^)+U;(JYlhjf0*3KhD=P^iEAGdAYM=jlT}ZiI@)`ZoZ9 zZuM(b#KJvRU~PXK79)@#cz0+Ntdf%;C|3kRgk)J+VgL}~&noglwD;#|-i;ZvY2?>8 zwD;!wPcLuZzPx>@nod{KV}aKGnR9#hp4-byIJ|xN7!Iea*Mr&dWgOmn4&P1w8skOG zff(%8LHOLe5fT5urxsigkA{30L%z-A2=oZXDrhPia9hw=O&7FNOowfy!y<B}9Yghc}p85HGd-m;~Z3TbbcH2r~%zB>Brc?yd0eKOR z!MKMIg;2!DH}<{u%_H3{`;As39^-i-q<>wvZT*S@JLcGb6&FN$JRt~Ah*yLUisA=_ zqVQQ!{H!ptbAfw`^bdw@8+_TY1wlOJ7>I$1mxI@XTlNnfnzJ_fljs`93@WjX-*UOk z6EMW&fH!4yj8Fi(k{nd@J2%_G6wSq8g}Vozlz+45in7&VNeMJkLs z0kL99mVuT^l6)9iSd!;84IV1fOwBZONtF;d#^s``J53kPv%K*X*g85zPwo_ptHFa< z4B~MI~7i9DhmlAxC=EPGh_yl z%>n0!piqD{81NP!S^uglz5_wXcZil{t$*3F)*MOtoUZ>G;P;}{XW`NNejj$C&mwG! zwfxZ?^(d_Vi6Ky?pIR`729o!Ju|Pw}yWBuQ$42*gyQK(1ppANGQW!@FoBklnL*s zPUfmRcb3bu_r&+N+xy$MM{GcbgZX>{u$cdJ#vYBtB7=p>?95+v_IEn_=k189CJKeY z0?AE`26*PJ;28s+LzMxct(L$td`<7&@#{&LqRO z8MPwdRfFqjIv>yT94}EYy9WnTY0G^O+EVlbPL!Gh1am=XT{Y3vSKKQ{0!H9v611ZB~@B6UE%EN%j_yX6Yzw_;H#LoC3fD|Ll$|U;P=HBV^G6I zMpOL^lr7YTa62I@u)eU_Ox4Kv1)Kuo?AxBP;yYlmeAwm zm4ICc(4jO6*zgA|m0J|qUH?r>;~^o&Zxhx(rhq-n#h7B6R^;6Pfi&Y+R74?-Pshee zR!fH(u|g8jgpHz4%dpZA$H1(FRbg=MTd;b1$p>5V2RsLHjBZ&`r=?cgQ?K22S4~h$ zL&qnsT=|i@ujLlHL(9*<4Y%BwV{6c_O++>!8Jhj+WK0rNK_p{Un5$Kad5QZ7ziLwO zMUa+(;R4H^rd==ZWNdV3uw2SWPO}>G6txZkj@PnUZ*=PPf=F?vo9K4vb-bJKAm8bA zL+J67HQ6j@Q+mQl97sgs`e@xyYBg0aXOnt7(mR&SmQDF@mv`(~-tpDlI8n={YNlMP zDMo#iPO6s^2}jE&gG+HRnbi``2XOX|CiDg97egQyoJ`gvWxObS9wFx>9%N0{Dheh|15u$$yWUV6-FgE#ABdS_ zZV?ck@VcIgX#0)Mt_>2hvulQ#6&qCY<|D&P^Rixw%f>l$(DxSS$_}KM;)- zJ4H<$9@bRs#G(f>HqJBD{(jZKiLv-8oK+m8aisi|Vqh0g%%_4rPO=3I&K=19IOH!v zVn7=r90x;zg42YVhE(OG8x}&A6W*z}MVaBZ|L1LJ~3X*gCmjn zlTd&xZ-C~I#Q@2G%{53ckg)9~S-=IwNth~m7@v^XJsnl9g5plgy2O!S=VTLwaxz`CRiHr=Q90z)Z>z&V zcP75nxGOnYtRyd_%1Jd`D!5^oMux~;B@~h)9CuNauv;vurXVD7TC!3cP2Sa5*%lKG zEf!Nv)!9b;M)HUSx;e~T-?k)3A)?9ISPG&ifX9$ZgboCLJ%6fP{@I@`m-Da7XR`Sd ze6?~<<&&SpOR<>E7U@>7wLtHyptlOkvdi}Py9T)`YnXwUkFc>|X`N@J4pnluBmmCj zB?+R6G#Ly-U}=)ECGx$K(P*Pmi*9xGybfrN@J?$SBSC2^Gy?G!HIVG!z!Fu--=Pc{ z*vCDXCLbfk0WcVBN z?Lyj2*_NZn6nQviBvn;c+;GBgd%gSJu|9Tmugf&wvN7;yx;5-Z1+;-$ZhlR7_DY zXd@4G1X(!<|E|Ko5>;gt_$BB@o+5aagdr>{G4Ql09aTj->f(zjjL0Zm27{Okv+wRY zf9%#v#Pk2+cde}WFHKY5dGm&xGV{Kxc48dMi~CVhaA^P0#iI-J zbNRMW74S#>4FZt5Wp@nc~7t!>J=HVi`SKbu~bF` zMAgGQ9*i*(Km!1m@W}>o2ed^@;XiGJFjH+~{ZrTx!g`3uk$cAbup_U(#6!kkQI_5M z|7$oAe%vs3raH{o;U*t9_y(I61J{*UG-tSe?<_rClRTSHEP zjtIiA-z3i+I))%Pq_>GHB#}8gh|Ok}bCiUV>!^t)VhEJhi)Vdfrmhy(0MS^%M0A{& zoY7#eZP1|?&vqg2+ibT#TTGdRR>7F)rAZMA2!Tc50dfXqg&aIMIOO0FIglnbK0e+a zZ$~rUV7U_06Hu=k00CJR1o*}T5QY*s6_^}QVdT#RrbP_41qC1L6XP-dSRX>zkDr+D zXhtYHGZ7Al4O3G?QOS*04^=C4AUsjQ?#Hk4$FP4d;J8Vijc)7^mm?}U3}5S+^xZng1@i|$u1Gh4H`3|vB;%m%Dm|%p->F~&I3^> zri=?n#lPm6E5F=oRU)l1Kzc6a6>cOOb)dJQ(nU8=;XzDC2Pf<6*Y#(zx@_O6{IRP3 zvBDq4p&tU<+Msl0{r`bE9|h71YUA%J+D@o)2DoyCy?gORhx7mh0356{k|_{c58NRD zY;U)?4$YxssBSn0=!(Ljp-1QvcHz6e0>Yz+Oc&0Il_L2h`5YxJCLPZKSOf$EK4plo zqFxk>Z>WL<^>m`i2Y75eg5;wv%1u5-ubBcgQNnFsi zW?!|E%chcBlo%!4E0`XyY4LXZQFX-moIT(p9vTB+d@M8%DC76wERbJH5&p1gy3o zvOS|p(;}{o_?%`&#$6ThZDgqtZ>fM{>1l)J{Mx#2@J|@U^)+8$-MhbVH$SodPh2rx z`r;Scvh0`;DKw2ippPIvpN4f8@xzr|CI!gM$7g3_2>I6XTxsARQ!{V_5HbPS3AK<= zJMCd{gu~N*L6ZzMKHzwf&PsKE#)iPI-Fr{2e^8SLjiKY)2TenATJ5EI9*=Myikh01 zDDL{uiI^ldGETDez?fzkcDOl!7^M}(1$gIXjPil ziK~}NBO|3tt%N!nu`f~9pd&iKPLx~Tjs_}=`;^4Y)N*nB^(8tQd>8zmHTXYiHo#{6>HfY-8NOT) zMOCpCl#?JlX`?0D!tF##SCA3ZK+<9%8v|)WR)Bb>kV1c1Q;lf z)4>LejWHM)N&@Ndx)?n%J$)kBUH?b-gOO~euP>7=hV(ztLxuTMr{)X6E-w@c1pMZB zo+tzQpv{NSW)FE<4ZqqPfXR~pghj4$o^u~r*n~~>vPW{+Xhc9>TYMS-C3F=4Ahd`a zU^PC%y8yxA^|lKf=|D)zqVfZkpvm^9Yh#86b`VN@YRq#Eqz9kkGh;CqJChurDdLF0 zOYhmCY;VN9u+Ze<;5Mm!%+>hzU0&m^&M{XF_F6lX9rc745|MeshdaIYf0cawDQaA!8G5%odJOz8I1hj51I|h8`9(F%_lwD>&>i@{)r`H~T^XXH!-*)uy z@_~_|up+U+7RJi9} z7l#3+fhq7A%KXYm+Mtg+Iz2wef%*g)iu+6ffGWRlA6G0SE(!8JxGqrdFD?kk zy8zn$Embu&+(hR5qagwM;t#@-91`z9H4pM8M2r84X&9z~S`s{Y7p0hgV*qrUn*-2~ zr>ygoE-&=ntbgVD`1SFzr;$ezlEwSS?ooJ%^G}T351i3dI8qxQ9lI3f4_zO-jl&q{ z{O!*QGMXg_kT05GX>tl-P)pM(tYsnJRW!Mbau*9QGQAS3^yX&~{M`Vzpq8UtOnE@Q z`5gEg_B2z^gRh|qD9H`)01Ut{22#F^`AhL1E-l0p_>0FQ06HN_0yc+eBaZH|yjr2b z=v7O>qp2YH(B1qDri$g5(14tR7`*SY0TW_V3#> zKRYu$wUZ`Ddt$u5QJO2yxzSy2(s6@C8?P6%q(o6wK}HdzSb3tdsml>f#bM~D5k3L1 zuMLFMgVb%ob?c5JnAcU?6BJg50W_d#ifBquD2fz|a!3m#<#JUrMMcvtS^(m5A%_d9 zE+B-0!QeUym$2bHi_(@W#Z0mg3M(*cxD1;Vu6a0ANM_z{2``~;NfPBd-jWq8O0VPm zaLF`F0Y5;nL0&V^ugU)X;)^=$+b+{oRl5VmAktl6J|RO~2vIObT(P(WmICrdspP7v z9K=RZkD_EiQDNqGaHV$fd%keRuX9Ek3(^MOF>FQ;N;A-1h=-$=3T8j7S~swGq5cE^ zj(j|r2ao`S1d(P7oG)^~@PvZS|4r5hX9aTxOtyj<0ej~lHX?Z_B42=bz zK(_!f!pqtW_Xbtk3qU(jOOQ!9l}H6eaIh(QO@&DTxPP;>qs7s8uTt(#ObhMqB>AJ{ zXR7>@rn!Cs!tcH7Yya(3g=?ul&>RG`2_g|jKI()vkGKKS%27&eh4Qs{p%CBsML;$}*sI0!`S=tMn}3NE zU`t>BqlOdD3}mj>|JH*T;6em%c;1MLCE_a@+am15Rqz(Yd0;7S2JvCBpiktV(NF?7 z#%2>ZP9;MaR#fm*Qst;)d7;FOVMT2G1_y54hkbqH_*Ty3b2qtk>;4AEuJsuAWwyb< z8*N_VJ|98rH}hmDJqD9)B}kY-o40sn|6-mDae565NE49z>sNcvpDPwudxd#KCz^qe zQSFo823g>b-w5bJO@Qr@13~}`MGRyr{TUr87jv0JOjFndpFrhelyYMNX%1xvGbIsM zL5`kP9n>;X5iCAx)Kzj~drI-WX3{GaM|1g1j-!4krb(s=Kgo@_Zh5%OYu0ZzlHN%F z-_;%0ja0u9OM3C2ku>XP;*x57C8ZmNp8C52ThCF%m^Cms$T;8(-5QZE0_(? zc9;wyt2dynF&Q!60N1D5tMPbHiUt0It<_q!_F8znhhFH9pQl%(r_vr#E0};AGGiy9 zbjxH5 zp<9k34qgMUTbXDexd$Dd7I&ien|+_Cw}Z~dC>`Tw?>8t#blN=g)l|yD2L_SwALnmx z3BsLFROyr$0+=gtON3AdP{p%5bMRiUpa>U3vQYgGKOso7eTE~UNPs>TYKQ80g_ehi za1<*fI!o(bLC&w*QT}S_M^~`m$V2H0UdBXqA@}i+1NZZmQpUyjK{Zck3V=>NsWatiF-8m zL1So8KSu92YRu@fg<6ePr9c6POtLHpDxqql4XyomsF#GVIXQ0p5-G7t_3 z>p?iQ+MD*%rQ)Sa#TzCR_Ag!9>|I_${vFLr=wwK7neZ1`fI*e?U_@ex z0A!wLcn0!2P-TG|PBI&v4fJx)HR-7{6rn|*CS685q`hvu>FsRLlD^+$O$2EPwLYjI z=u2`S01_oi2ay6R%wzyA@uwnaiOy|GK(ffLT=B2b%atpE+<^^F^dy`a8HGUGLvt!1IE2!CLJc>#X6gx8cSyS}Y9u zx)+zHF(6#L0pDQ+-sB7Zk0R7$D29o8Fd2xCtgWDwm>FOIi`G1_5^!j(&`L~~A_%E) zZqta_9uGTqc!fDh?y8Qv5{0WPs0Xo8g~Ldi73N1r2M7E5s#Qu2fL?Bmw#LT>M+QfR zhx(d*&4K=EqYD3_2bT9}K}#vPVOxjp#@MHVOe})BF#1jDX5}KR1rdygun{bWN>J^w zS@pr6^GfAJpQc?i<-SC@+p_orR?odSL6C@Ui*x-vbHVbXEG%=3I zz07zalTO4!Ocj_7o)9S$0vV{Qh+M<#V*>nlNKiQHh#?VJMIa2~*n+rs7BNVId1{ri zi^{uNqlF6BUIqlJK?1v`G0}kiG6p{t`e;g-fZslas&}!|MmTb8+=E#UJ=5Z==l9Et z!wa;jB3|6;I68PQC5<=bziYv>Vmc zMC&cNbQJ0Dt>Z)Key_@&7u53H41Y!A(Mpw)9jFY9P%@IuB&py;Yz8~|ld9Sj zk)U?0J}`Uc%rmFsXQ>up8&YfsMe&4p`q|T`=LV`j7gQ*qe`L=U13w|kifrDWL+&gu zdWf!}3BYCn<$-@7%#ra6!6r-a9^hNtvho;XxokX!&O~F?2?R!JSmKG&#R<@y1aKP$ z@j&1ZmkBY=ZUO+;u>nRyZw zz{Fuov=um3AweG(`ujQS@Ah{_hAPMbP9|*2)LE8iY3Yx$EvUAL6(m~Y(*l%V>9f$*#+w8rB#H8y0GrF7#X-JmJ@`1*Q<^y>xKsgf$cI1v z_=9i^DBVApE4}trsC~tB7#U`0A7bTbCZ)~N4iaaPr-kFt#Q7{1wsAuy9Lx$YqkREx zfJV@AN?1T6cqN|%sSNGSSNFFz0ESa4YvG)>>cbq>;?8a{%^kH?N7oue(tF^KP)BE!rbFLg>2$f zI)w}sNaWLrlSQ5{RD_(D&z*#?m36%A3L@Bfka{@}ZR;63kr&*f*{ z^2B40yz!w+Z@75jo(Io8xO&I!D<_U0IecJo&-~o%^i*+Yap(5#L~C>ep|XlwinXF; zr;4?mDmf$%6KXgmObXbdvT>4+(K|q`cpum}ATPzxDBRF9ccz4505wi=R5y__3}&tL z8ppaQ7*y02rK42F8Z8g-#kdF7_f*Kb%CtxrI*B9jS3EY3@)6qM&ef#jxMN`e6arV> zgk$7Tt%co0BY{hX69D*CVJ6(bT~;871lk&0o;MiUv8Ujy2h zbfbbNLygPYo#~LQy|i;BJfUgGOPGLi!*=Dsf!o6^!4h>-$wj3itOpl9I;)Q~-ApMm=q5(QHah2>UfeS7cOo>N4?@LNA>7iDc0PWk0b~ z-0)-j_RdU6rZqpivn|=CFz0j2@8PF2%rdPD%tZR|83)W_Uw}wOpYEWQ4noXOLdNYd zqJY_H$b{!Th@GZO0Bj*$pjQhx{hGHCE`GOn@uxO#U|zV{jPLq-BrsKuA6wji`)$Wg z9Y3{^#Y&|Bf$PE(O9eEMqysITi=%9+8Y6ZfX}L1c&zA(JvU;xYf4nMF|;vIdERa^`xEd;ZU0^EUyDND~0WqL{w{+dL7X^!#H&EX%pvcNp*eUo31eim)GY$9z<&LYW zNV-Z4Kyy)DIDEJtcIDxf!z(9_&F`8+IWwXRV|{!2_s|+hNcO<8j|3J^bXdzGr z5DAjyJjCi5e6O!0!kmIxWjm-fe(=EN$?A>mL{rR zI{z(<()Ca>fxK1}^vF^no8XEa8;#j=BCl&vEGq!#J)B7O=kt+l!3dpyFb!Iw4}1F)87dxa_4kYLP%lGnN@|jSiuJK^e7O(@kaaUc`zy4cFgk zrDNM1r#*hD0E>B#W*Z@7poQ&5F`v&B@~~Mp>7U04kZ(j_51*q|iURyeMp5T^h;9TR zVGM4hV$*xZkHM-$;cTG*l(SL5YDMsnl2~62A#tpYkcaY*erHnMB+z&6xN)Pu^;dQ2 z_Kl9*kR@y2r7#iz$51PGoSkLA>la57F6{H|6EJLcw9vbw(1)jQ6D0M_>jVVzfIU&( z)GlNfNhk%y;uCOb&oE?9B3J7?ibJ&1xI3Y6ls1M`baI0c%#%?xO86m_>>EdsNogQP zbL(C7b2o3JVJVC6?k+37dv^8Y?aNDvcpCU<+>4`lG#ad>fQcL|gHUdCRV0~F33VBK z40QtYgOb041suS(fKSzK1GRn#{szTI|MEGis{WJ`Q+}$qQD1lg^X!EeB;(g`Kyx%4 z&mbE01WtJ~5>npvLi7nEZ9Eah8NYPn$_y0A)-$j!LvRMqVlmhwA|Ao!!;6bpK4DS# z7y^b^aO*HOfYYR%qBsfuyL(Zel;uf%Q3&6>%0~Xvq$uvd=XWjYJ8?2T2MUV60N)CO ze`gq~lWXA0DT3nW=p$H6RH917T)oH(LC_n8c9~4Z^WunUypp!xhN7Fae>J6V^q&a$ z`PZaZ<;FQ%Y4i%Zprqh6=<&#FQX$ZtMfk6);7SqMGGlBKG1_1C%UCtSh&o)X+D}+iVgd_n+s0Xo8 z33XNh6(WL(>yYPsKDdyd`);pX@e5NsC&oQ*c4p_?)LgecJ~=Uo6}`q96WbzQDG^4R zWxS!*ym+MnNlNRwc=1-lgQwGOv~xmJpaV@|iekPbTfGJ@AnAH+cX1 zzV&-Em4UEW>lbFK-~VX1rb{L6^ka<(E8@nT5B)G=Os1lEjlL)!Zr}Ui4?p_(7lvy2 zxR|?m=bgu{{lY0ea@5tv2OI~LKenpA<)5}IYB=W%4I+3F@Z2Wdf=wh03mqBG zd=6l(2uBYN9*PYEN`eUw5=Ehgu*>F474((34$W`9x~l-Q$X9|%4R1rK zYkxNFc&-PjZ{7^j))drUbv(rBY1^%1tT0A(#OLr1@1Y^fbq_}n%BO)$&_SGEfb2!VtZB2Z%>qJkun7`jC(c3L=D#ust+~CQDRG ziYglQ94sqcR-ppGGPEuXm_kP}HKt0?1tq2^&PZj3D<#0rJ&L}BtIs^U7zst<#ma5b zP&vhoM4!XAy`fbUin>}5!7hfJi4*PL zICSWthwxmA-g#$q>A{KP?N0mn#1alnoR~Py-#E80BMh{MADL-2=6AyqUYN6Dlan!P zu07Zt9NgAi#*w*+0aR9zBXYBy6u5?@lE)@Tws1ISP4=H6n>AG-3)3@?29+ zLXLoMOs1}2)j_~=9M#|}46ABcz;`XeYb{|Ox%y+V(cz(He_y>+s8vf9!lRuqtb~@j z34{~)9*21fGSW(`unpk7l5q<`iiAY?w=E=ftohouqeDXjW82D6b3ht$bu%658+5|q zd_IhIADDmjs^1)F`j&m7=+o z&_m=Br=dn1wjyL-&`{*_zg9zUY0K7c4sxb9F#H+#35VGS`HJ5{ewOI|&=bhai7FxS zQLco3$Fgael(7|>*P?miCdjsb>;2$vHfH^Q_pW!o`F04iy(SIm(Qwq#cr*yrl-rPh?a>z?1%^I{0Y0k???O z*Rcs)rwJ1KLHa3VRp4AvF&r)<(S-^eV$3nTqaunKVI0y8PAkB0>?B&SxsbLQQxiFX zDg;mLf(CPjw|j_?dgWXvSN4#C=WQD{MaxdvfC^(_sH;pA$!*f^<3ALOL{oApiZnwM zUGmSRqkWEDNcZ&}>FY}uLrz~9u@Wo?6O-i_kA`Y-s*VEsmoBF>8N6Us5>>R+_$fKd zuYCUFx8w^=dJL08%7Vs?>+)x5r(>iXp4e33ID7ThA5>n!poSD2fYep_r}T z7Yn&9WlJs@#j$4Czw;x+_5cEFHe!NZXmk;NOdt4g6dX)TfS~>kQNvydr`Rju>?PwN z11{iSj&x?gBXC;Af=dw3Ku+R!cMX0R;s(p$haq}t*#Byl`Q8WidmoLBx{Dy*(*Wwd zhaF*``lQEYladdpBydk7-C#2R0O5%bV{e5h@^bf~Fc~A?6><1d4}m9_elknO?0n!!|Mk?S0ej?R~j< z2VF%LMX|i<R_4ia7xAhyr?%P$ln$%yJ$T8i_-Z<>d%}AYX5kPzI-C0r#v^-#(D9 zCtW2TlEZwo(8y*Z*SO|XGnGOzl6o|hEbeqd$-<<)J97AN0C^-(6}S#^ZkIw_$Dl|$4GQ5v0tN-HilWgXPE^&l#BLO|9Y1#T z1~F@;M191q57eP10g%0da3sr!ij!QeK!_ke1}1vUYd}tII2ZxxJdklKS-X@cxe<8& z5^A*e&u-f}Q0O4XV<45R)V9BEXUM}!2c~h+c2X|NxLhx4=x;{qo-CwN^}%YP^5H{= z%FD~;Pgr)|?VB7f^rfPbZK+~9Swb>hDN~3R0MeOQ@&562Dq|WkthFC9zh&c>MKn9> zWs~15A3j_LC2#t|WN$eXfpS6y;!G52Lk$>~HbLANehRH0ij#xF9Kw?6=Vyc?q`UV> z5`uuHj-5XwVOSFiz*P_)H;IZ&kO8-Jt&VL#5`{qXag7>TIYkcjF$M)`h z4C|u=5i|_?i-a7DH`R;P>&h z^|e3qhw6PJbA7b`Q;!`x_SjzBo9s0f`1~SlwK5yWnvAda?<+x;aiE0;3yDSuPQQ(` z4s!d$9F3K6isIVOV21Wc=Lg-(5vy1e8aL3$i#+w+mcE z7tdoYlg(m3q%vYnrWLF;f)!gR1-G|{0wl`9-J8!-om_r2KRP_vha`YX3F~ynoT!5= zh+d@}3ZIa-cuQ|7-rosi4$RM(+!H%EhTm5pm^8;Xk{g5Wp6H^69}mtd*?g?q6|`8E zuietes~`XPZ*P#|&+e|(v&oO2HKbS##f?3`?bpF;GSJ{{>;Su+J;I)1&$0LTKUn6b zIx{&uRFN%n3@fI|PaYOn=uK}pvy`*}XMW$aYj2ezTtTi~l$(}{YG?~4xTS$n6lTkc z4F^~T{EVLoIf+Ocs1qSHDZ<=v#6>bYCJQCA6Pgs37ItiZ?roQ!e#_&Jyz#z!j~$uc zwf(@30~6z;BNZelHHgDwh%8M2rYJXp*BXqP8$u}HCD=)=ZeaHGgnC1T{|svgb`*SR za+Q0+9I~E7xlH~vq!N8#^B^v_>w{%_lEQ$;gwJWzp#r#T=e~CeV@-| z_`^qzKFl-uzEF3+nmb|TBI$G_nx0P{XxlNvwiIO+umr@Xg3rYlwo z<0kQ14Y_cZqK}np@7M9m8jAOTmCsvA!l_6`5MMMARoWS7`%~;5_78s5OJD|6D}tss z5J%>B4-2MxdJqeI80O*S{rjYlL5MId7rD%IQImj=Ar(?1e9R1)M(8{XS!T$hTKXU& z4s6k+nkAHss3xaM;xMvw@S`#iE{yeL4625}TPWr`Lbn7k2Ur>Rln6Tex84+}+TMk` z&aT{c?C8P8g(G{9%wy%Nos)?gmSSy{`x00_W`orNJApWjEbM^Q5aB?^F~u?9X9vud zkb688k5wtb7AvzOU36nA1G8x;ur}!2o6|esMPe`h>lyyYhl!aGEAQ?X3b)%S9!;g9 z+)eXci34NdXe_sWR*S2e5vG;>@Jlf-AqNaq;%C7lslG^2RYUoEf+H`O_yG|${@cVY z+Yk4+C7uJf+#5-PTRhj^FIPgjelH@2jqrbqpz4u7L(3>@53*(y(Bu3 z-2=70{dY=NKlGL57uWv!b;_vnAK(4trQqBdoR}geF$V2K5Ef}-e znf6A5H@Cg^1`Q1w*K5?zQ**vZEublW)8?r%pS_QL(0_je77ir8_;v*gEA8aEJ)9H_ z9qChA8;Nh~9J4~G+O*FzT67ucoNk14?Zon-J-fGcCdLQ)YJS}><|!?MRe3cC zFhYET(RxC>w?HuDILhYm+7sFsx}M)l9&ex=f(Zw;Nz*n8nI8Ductd)$mzKO~p5ofz zpFX2cNo`QN;^sBI$Y$Vp!(R_RL>+WIcA?NTuoS{=Gd6xj$cYu28h#0Hu<1uo)EtfH z(?;UJMai5V%qE-&_QKO&HPc?Dk&c=`?<@l^s%C`~VOpj@LS9G0Fs+amD`&zn)1qIF z0*Izcx@yGn<4{=cfmDSYONA4L` zfJqEaS>lC7E15|TPObkf>}cBzJ1#PTk#nv|GOd$=H8pT&3?>X?#{s6MB0`~ChKfBE ziw_`93hhB@o~Yl#AuSuZk(0g#J&{38=j;4qad`hW*JLcPg5R3rx-Q1~z2mkMyJoj_Mu*FN<*GqzFTZLm1CRp@A43^> zfZ<~75LY56~j` zIuyb1%s9ztnuZufnwS|-+qSA8Xd*j0YBI5MqpazU6HC}g6_&whQ0O*-;KUcWvkutO zw2{RcV57+8WLO`h!WJlU5dqS^9pgZ0mo=DVRZ%b%pzR`lOh(k-ps*W)V=ia$PbuG_nUh?m$>-c%JN)9n* z$Lf2ecqtc8g~M9mg|vm5CJYXOn?e3-k7m1kA9r(S-?p7h2TU;kyyw*mHguKAq?*Og8!Cu;iM9j)Ph%-Yvq zY+}I!)#H+J7;($v(Xc3*K&pgQpUbp zM9?_|S8SUD1_Q#b(2xBw1EPXvE((O8&O`8cLx>97jM+=fw#i7d$w)i#FW(odbyNNB z_jKbG-@EJV$(7q)w|t0Toy24;o~XFx8t@2M>pcmP02@JB_cl{J(IQbFV53Mx>2wkE zQIRC64)96?Yo^)cE5o!8^hzKoum^U8lAvW9Ao(e$jQEsp7_jsdZ}2Zi^6z_cdAFnP zY8S?JK;celD3NIXf4sd3oE`U7=Ue}(y0zV{?!NY2yYKCN-?Vh=swKH4*|OTUtksrV zwj;}S?8r&%IKd>HIJ>h4hn*)Nc}Z}>h-5-M*(@eNLVy`3I1mN~oR|5)gZBUrZ(#Bu zbmn{N-j-yO4F>4t-nvzFYx&pzfBt9ro!^NbdX>I-V_&7_)vI-U&d~RUGBHS10C-t> zfQ@=6yR@w}p!e6Ki;;-c$Sy5;;X-??S*mC4;o+s3@n$7Wvd@j>Y~=1IM)hGe&_@(` zuBjsBxkBzXVyHul)ljOLg6SWHITQuG!#rA?tXq)``M0Toh&@usSw^O6dKsgk${CQ% zv3#aopBW#IVC>O(FZZ9d&LQGReLzz}7QH2uiUUxUj)Kf)6^O$Sh6_GTW)?#~%kxL{ z^SosM1jL;@Z>8<;Jq2PC|AeRTgS6of(hhPvdT>vlWlSu=DR825^xk{si(t-y-~xZ* zvMuDMs8V2V>Bdm6qpXTrLf&=&Zg9c|6A~gc5P3pi6xLRM_=g^N$(^?k&kXht54MJf z0{ZcwD_kY$q|1n{2$B54mcr1r7^Snwyu{4Hl5Dfdr|GH?wvdA4&?_X5swWh?YNtd8 zZ1BE0;gz^@z$=GTpY?L7+H|u~i^M4w>BVy)GEsR-p>pQNO42FCBUZwuVkZtL%dGiE zENsUUvBADpG}cI`-B7`e5^(S>Cy^zMifmWIjrs^#fbNhkcwsmdODflhked(btLsM0 zaHtsZ{8+*Z=LhP*XRaTg86MkLtA|6Se0$+=EERGMBUxH4=-E{3OaYG>@Y>dh%f%@h z!cQ~u$oNo!O2&z*$|bUq;Snl}IlTfmmG6sB{HtE^1Lg)tE{iAM4MhO{ZSj zH`MK~A?lF41}hZK#_?>%zcKO$9j#I%)|yW+x*6ryY^dKcO41^cO5FFT6ZTRi3GY? z@3xgQUx}kzah(jgUffN5iV_=55gnDhl$$zhB;=9<#5`(t0ArFh0Af_zg|CsOU_71> zQ&$Gtp_^F-1Rp49tnI+f|YPe5W@`K2bfO;XMMC$C!k;N!Jl`@Q~;`wwS-=9fzE`@QOq{l@SAawhvjKmYL`4}8lnxPJKC z;}JL|^bUF`Zc$h_bWMk53U{b>24+1?6czD*qGte=BekfF>#9A6znmQ7=A63pO-?T_ zpX98Z@y~w$mkl{rC>X~ZjN>S+R0%xUXfbQ3CkJNI6S&`1`6g5aK{as=o)THt7*afF@XzU9@d2J3ce*K2|8w6 zfg#Y{TROhGc0M&fdQ<%K`7oL2sZ81NmlM$#{YIZ&xpjszHRHhOP0!oaDkWJk%ZYIW zu<6Y~@K7vquS*daiij{5Wi z2SGNA`$zrB@J+rm+O{Hn^#^z)`~<#VpBBDdd#v;3L)Y!Z;uG`zdM2&il-~0aj(0AO zXC>^N)-YKY-?vxhm5dhpgRz4XOhqr1@llH)ZJRb2`APx zsIhMHRX7n|Jq3pJrW@BFXF0I{nmsGKcP-6K4z>y9B@zRvWR{{w>0IE96PZYmU;(Qf z5|yq=J~t~yK=5=Lpa^i*jT32*nOkf$8T8ZerCQB)!^-j;a-bc86(ikZPlyAt_C7y{ zYf`0Q{4C}Xc!hW4L%NkoZIY5(>VDi=+o0l6*>+S>ADl5Aizb#~sS26p;W#&C9Ow+BVv8MefcB z%8o$xmz1g}qZ{6+C;#i~-tm{HxOYOyJ`0Yt z!JKeJJEl>?;@Hufhlk*Okn@ogBDfS8x``MIee_pCLdi;n@zQ@SI5=73WL&!8xp zn4ZW6V=f0Q!rgnPQi+0Lz%Q%Rx#e(p=RNp1Bj7L#=y(Tid)Y#D#4tvx2W|_8Z#%%U zIb6Nzm^<}uwQly&V`k>(X6Q$L)HI_$C5>n1pxe;XeMZfgXw1*g%{L}Ylcl-l{>G%S z`A5HY2kjs9o1kr|i6%@Q(3MEi3u-^({wlilH{UGTXk^vOEy!@Yas#^DUTC4M{y{G9 z&~F{;UfY2)u6u^--2BSB->pXG@45Q?awUItI~TxNdh-Ps=1z(1rw%G4dZV@r-yRbL z*XU|)7V?h)J4dE*8;`xZ^w`4N-nQ`AM`q`~dG6x*^B2#3=tCl=g8sC@bN>FEB+n!I zc#z!S_hGxj-XU-IFruVgz+-W&VQ^_MXTS^(T{`W8s*7h0C0OXnIHzRHijs&uDO3-d z&=_l>)kJzspf}_A+k!x`JZ|wdfD=Ya5wdE|p@xXJNaPimk07et-$+mAlW8j*@>6pM zyoK=j^L^n#)9c5Jr<-@h(rUd{`@EY5haTo1s}!Byu07}Lk>Qn!=@m1PVxnlJW5xH^ zy3dw-c;xDP5V?(1Cm@M0g=_%4`clzDhxt9kZHMs3;k5zwWa;~^x`#lRN)P5=)F;F( zcOZc`Ca#5fk(Tfq1o<;2RE_G~_qvJA3$@y3f54lN77d>3I?tjGnr#dm*PLiWtPi4$ z*xvYr4iRzF$X0S4%{>v1#=>Ccb>~ob$Qo=M~v z6TXj8$V0K>x+Kq0umtB2Tu-p?$n-6qQi-Oq#hAe{Be69Sj;YM)GUY;U3{;)TyMC_A;llN4#`cb!r6E|2xVK8B|{Mui-GS^$96$UtfIlnIHxC zQtz29bFWq6iRexRR`rG>+8l7TAPJVYtqM5x+HkuD|KE~uV~|!^Z%C0Z{uY)^F1%t$ z(Ib3Vs2@_gfjbbt7ouU=G&a8i|D|d8bEJBKKQ@iKq-q2i+V&hgF?DKQP)^UbpQfT- z3dS(CBdoiKX@dV?zAPQQR}@Ys%Wy)oA@8q&#PCXxlArFl-cZ8J1>0u1l+8fYLf7Mk z06F!U$qgjR6@r72eH9#xykF+~t5+rWJGI64*H*26%=gC>4K3ANkK>O@E!~8i<`uTT zkv?zE@dKVe1S}kYm)ZWtE3=hEK=L=;rTyz&GdZ(T$E+%xDh0G0PjuCub<3!R3=Rr! zt{qMB5N{w#iL3)DZMN&lM8ELnl9SH}5lAsL;DG}MV_r&@VWS0EWkKDt`zP1dCeOaG zc3Go2wRYsl+6(KKi7fKDuJcIfY3+@j2$C^qJnHcDB4;Bw$zj!9XJm`Vm2QI92JT^t z&?>_xbeOl0_*+8aZyD|G4Lacm*qz#1wQ5iuyIGyCO*HGxfdvofS%$>Cc91K(WRNP0 z#T4MEiOhqR?eU+I6xA&?yhB%qA9%ps{JiTvZ5tOqR%*?<_r)`rN+!HF%xfkdxlP$C z%@fC)yD=gco^V@+J=rSOK9H%TDU}yymx^#MV=mBJE-^krX#E+Y?%*AA*;JAUpshNk zVjO2Ea-o~zEIQlEs$7mdpFveq$AfEX zc4}OUp*mcL*q+k6zxQ?Y&RZ_0>)mq=9v|dfd|QtD(%x}1TD#L9+-HbVC32U{kw3uE zx9;+)vvlw7>T_+~mz=XVABV6zXQWzg3x(AR;mgfqB{3RsRDoF&Yzq!(suN2u3W|;+ z{RjjD_P{l)2T&~$ySBb+ArdCX2l^W|u#Dt-5TRi(L7W0VYKBL$(5v7x5#Slck&)VR z(qlFe`(U07yzr=3?YUR%JpoUQBuHX+jO-)GZZtxu8$qKu0JT=Q>iYDrT=v1 z-_KnC(?MyTk_z6+o4-FkM>QT>g=+_!y+S?VS{i1@;J!P^E2+bTHrlLZQ9}?|3~w3n zJmzkdM+T9u?Jt)~)FZ04O^R|>jKG%|coPH^&M)G3nt-4fb@*(u|1Lc^S3A8jyqa0g)0c0idR5J32rxN$Mmp+8iEp97jjKhLc1TbXi z`&)^2U#?qQ6FO2b47jBx^o0=YqFc-OsHUcER`NuIvh>bxp7gw$=kEK=K9_e--4XWc zt~Yq+py$@T@V0B+8*cDs!;xyG32bUktsn7RcJFl9+x4#FyROr0I;`_%jNkQUJujX1 zyjhx4ef#U$Q?&g6vpf6F{&8UCM65++lyLGrck0DVOE# z&a0OHGFa{e>pNF1b4el-v=05GgXUc7P#8~&{!p%)m25i0Ry1lDe3n#>Q*xf%(xdl2 z{`kG8mpd1h-hO`LH}AcD`JZx}0j{|%hsvnh@@YBJqf4FT+wc9&jq`6`y6`=&r&~?s z^7W)_4#J`AxeHr|QQz%2nGS)-?v3FB;}Bs^o5?L%RCRv-a!>Ph5iMcOSe zeKW!Xk_viAw`W}1n07x&f7qbwU0&p1^4x3a`|BX4zyy#;tdZ!7TwqIwZH6ukMxwi5 zzrZCCc)1eInL2$ih3<|Wi}n~0U&y^|d=nD&ryb{;mpEj{dCqYrosG`=KRORbM+GMc zM&lVBky4zPO3Iu<>_?dcl)lPoq_0zin8tbDsno{CrL9vbZN0O>c{p3AH`i}4*Kdt4 zY8V9Liw;fNhSq@^s5j0$gAktV#cT$Z=Z zuUz#(-5Gq?{Hb8mjllo@9*cCPdaP< zv$CU7#n|S>VyjhDGkMR56(@aVwKjiS;6}8=6(9MCHV-Gpy7r{@AGKfCzNA0dS#DH{ zM%w%#a25~0T+e0RrYg0cKcn|mKKu?n(s%4o+Nj1)C@r>o`+^~Jlw)`+FIAZjs=i@W zHHdRcMTB3_@DipoxpM`TtEF?bvs$Ir2YdB7tqi+w**~ZGaS{m5YVm3$UOlTNqxERA zj(fQT3-3D7&P4e1Act-kPD83a==UP246~Te8tIIgKBd*PNV!IB@@gzvJ&X<;)B0kk zhFe4ZW;Cfq4-YikjG}r%tDgePRWcISYb6)EvIIz`p;Y6r)@aD^Z3N^BMXvaX|J^I* z%Fq5=U2^9m|NN^hd6ETd{2N{_nLO)X_`>HuPXI~#!k51ArQi7C=YRe4zy52#`YTU; z?lVt*{1-p+f4=|1&%E#P_q_W}Z+P@|8?S!FgXizR_ny06w0_&^TW>iPpy98-?%*m! z6H7a$CPyg-IY1&FH52k=yLkX2@FtD~fL^38qp539F{qYwu^a<%Qcg5t{sY%b#+KT} zG8iRR6~LGRpEj!ToM0qy(aJym8S&HDSYv=+XT(d>LYKB|VRDubWEZAH{!s9ly!BpO z8$YEuG-sCdUI2S5m?+^zwq-dH2bfd55YCxPwACuDZjEIgSO^>Tl3T8Cd{T2 zU<+YENePB99a(gsXQU>y086D5N-7<4(#^q)>n7qj#qs(@*8GjC0!0X(lPD{s+W2VU zW5?M>CMd9sP(Bp%V@x!RKl~`*tb_@pK|_68v`L*Eq$3z^86G@u4MTeY#$<3$NIlRomeESk}XIQJlW(U#=R2AjI*9qLpj4fzON$NNic1XRUk@3t( zK_JfBEeM2s(G<+9ng%P~K&3=hGZ1tHUp-pqpkWG$#F9dn((AG_kg*CXU;KhHyDbwR zpe!hXJn;1YHRtL7+j+Y7wDYhkXHRC!surHFinxbLA12{FYZaC!R7z&_gPK)KEnj= zP5D9V2;RG|wOa4}S#`nRTqmS+!N15(!5^Et3%p*sdU<_)Blx(swifiop3ZIaY>ukM z&P=<%uSok3w+70koD~Zlxq*_w$Tue*yJp|c9U@@_92fDTt9zHW(@jG-x+IfyFX~Lp z46SQ`NL}Vy-0&t{S1P&S%A`>2317v*BgL6rV_MXUMNdhpx^fTm<_ZqWrN+y(7c(4d z-&M!LSUdO6JXq(N?r{JpaZ&&L12NI`?ccxu=>DTO-FS$YC;f(s%87DcFBl>+yc+|RAa7<#{iFq%)huZ z14^PU-HW(&g!}~`me8;Z8w~s4d|;izj^}I`Jp71LSn0dM;ZQ8pBrCPad-(ln`@GFx zI%eN?oBea$w^(=O`>}<$es)E|p-|%?8|D0=Mko}1SiZwQyYf9Di|W32R|j^1)@`RQ zW~7W41*}%1fH>b`7Gi=_*1cqv1XGK=14@j9&{rk)x!-XFh|z9U`ZDP#^#O&ZL?9W& zx&UP)qW%aF>tKqPY5w~+#>Qlx-(UP5H~gW=;OG4Jxi^_7yZ7d6b*~|jK(ah5RYWcNU|28x`-LimeQI2 zP|b+XrF|fSj{karB^b4a>(gVzM(@e?1fJ6du~Mr4L4~6YHL2zi!kMvh73e^4N|4g? zwgo#Vm8itfC^f2;LM|S~R86RaBRWoyZ_$gHiu!ABC0}X1kOJU*q2~-pET6sgQG{5j zgzlN1c~dl11b~)QzOb8|zc`rm$)T9ktN7qLS^C0$XcQU!gmTdyJvUjf)Fffazd>JF;z zoc)i6R79#-2t9P~A7!q?WE%W-Ha4DpRv7;SJ@N9~8P%@T?;yfM-!~46r&kn`ZvBp^ z6Q#Q9RrNchv6_jVfS){neyt~usyP%!d68IfVe4P&1{cxbeMzs$@`g%9*1KLyEwe*R<)jmuV`6LoM#Tsz?+JA@F zMYfvSUui2W31P+mi_QKd!I?Cl2q0+R(0)_~_f?yMq9*>qXX?>S4P(twkNpiAot^+tW@{j|BAkSqit3 zxO|q_1ssfEREb?0XSJ9SH)8Q~8i>}ofRgmPIWi?ey%QY42r`@v>S8#CkWch;syn~y zsT|D)>+~;mt`W}lqUW6px|=Ka^)Gp{&e`sHT)aope*ao0I)S27{np?Ar{DhRpMoCa zEpK|mt6urg%Wgk&^O3c~*B#uxEmh9@WI=<}6j9i2TBHVG=1LSB%EiEupUMT%poL)U z698CNA~V~w7Dx(94BQ1_zLoVL6A&I1*giqiQn-mq76PPYkD28Vhu^}A%}k?70c?Re zm#@#G31sa?Oa2hA*x7;^i&2#p44H@>UN{OLAk(erwuKn4a4s$jRZDPVy`38DDtnVp z$~KA1bD<*QMZ>^n#;YttC&b-l$PwbZY9Ck+;X{WDgD|e?6n1Pr_bHKYZ>NxKDnHgL zQTT}g4>zG`&76tFC)K|6 zLd`U7%xFG<03ecY$4#=6DTJ+b&x%3L03eEE>Ln||B*#9k=pf$>hlDe|fOCPu zPB1*Of}j^?$5!XKDr)PQI^U z2TS}L#$pl077+sgG30;s;5>N9iNO1ed8_V0w3qH! zI54X8csLciV`_w$f$xwhsGG^;)KU@h&XDMQgBF4oY_Nl^-%_JSkQb!vihz1k|gu#LV%S@@HX8!Te=Z9IQdYr-K!95i)-tyT;+jI_7N zfVpP)MSXpibo>a|E1_t*H? zFepr(xo%K&aX_F@D}0UThhH2CpkEc%N|jS$3~X7Z9xhhwZ+)1zvL!J2fk-({WrGO^mM9BtGD8Dc3)ikQt#_a zf48;%zO6M}ba&iz=$AUy+Jl|s=wMBl=s~O_^Hvx$ySfgKe(p~NMF+YBztcy-su@NZB!CtUY$rx1iOi+bO!UHDZXI*+qSA!F1wi&XM!P zTorhn$&=2Bmw*zF^{t{ zQX7TsFJ_vp#lbiX35Z~BJ?PVy)HUi7&)E8SDx?NSV4Abr^2-C^%*@=oRJLmTkv^9^ zm`oi=&LKfwT12jz6#FT^)L4sdFS!c~ZfSe8Id|7bQ^`^&6d$~F*PI+bXj^=%!rQbe z{RiMUnTS%4Z>y+CIE6r3;Y#rIO6TEA(wvgY!>Hf4cXwyUwlsoiLE0zql%Ryj@W3z6 z5Sim|p7BpIu_2WLxMW`2b6B3dFG$N>)z{uNNr#xULt&XS1un`jGl$94YPfC;CMsKB z2&zNBw{L!MadB|5>=z&bN;An~L&$tBYCgNmA82Kp*tDrr{yO-SOo8A_-?01_LG|}u z`#!5l-%4r4P7aUmR$LTKUQGIwN(Fvo3E&~hNI}kI4HRZT6jliao6^R>5;*v5M+@XWH5MXT#*ogjUFsur3*%d zD_NywHO4S-jPH2zDNbSXxOG)mLoL^yrt&&eyB6YQQCPbO=zSZzHXuO$*SoRc;F z&IhmRR%h7R{0sb*S+FWu-~X!D@NV|~BhH}njPKv%^?P5HmHpmLI6uG9?`3>H!zV?) z|K?wG`%o~)_G!0kztX7{!I+UNLPyt*9lh~}L)Yzxn{$Yg;MI!Hl#hF|4^_R5_5x>z zzRt8_ng)a^5u)iO-?@^j5)>oO1fB+_eeuo99F_{WmjZ6m|PXg5$W^Hj8 z;&T9Vd1Yxy?Nk6{87Jrp^lxj-F%l;ehBHR)xB47fod8w|`b0@qvK)K@i0`PuwB6fe z8ZWigg#$AHX-VqJoLYb)NG+Vo2sLlWo!R`a=$}DPNBT+J2oWdMgP`0E#*^W&p1j*Y z^sy00X&?keS~9GO74rx-7z5% zl#qT*Dw+rh2@!Kj0>wSDS*6TRG!|!lBzhD1Hj(J6l=G1Qz?SJ>Yu1{Ldbfbj)z17# zih6eOf8-L#`y)xbYbO8VZEJOnoq73e_5NGDziVUjx%IF4zf-9US1>$k$0k4Ad2&tF zHa6b1zW!srzeCm!S3X{=y>fDLq0<=@A3W{Q^CNU?Dozk9Sw-C4rajboSsWD_$GCQm zM0`fLW1fp9^)TqMuzn637gJqYrvtJ(XXb`7aI=+MXE70uUZ~J z4EMZxSY-HHd!G>*U3Vn0()Lx$N(;ncay$^M&kA&a09-P5>GF~)x}~JMS6-g!z3*|K zbCV_3@$x1&S$6lxlB!+)&bPJRVb)_W?H<4T8oj*pL9*-h4zhyfPM}vDLF7+d*J02KWatEIDH&oD?m6^LF4 zXuan<-vyQk#5 zFTT7ak0sFK=zbS?E;S8~LP-3~KC(Njv{as{hI|SgdJ4EL;4c7ZV_~Qp@VBC-NK8;3 z8nT=Mp5iHGMD-k{N-Gmrl?NrspH$P!Q7NP6b0#d-7Os}SOkkummsLvQY(&j$@iO1K z`qF$OR#+6~?8QQ?k$-7+_8Z@r&7L|HSOIIDYGD!A>SCeVS=;=>+1hOG6tm0K_u_Cb z_>mnL>XlqSiK6n~h|%fi*7( z#H|a2xEY3mKy;#jHUmV5kWs3`y=&B+q3W4MxsAm$)gfo`@ER`R!;f??bIci?#qBaX z>c|~%%?P5NZ9k)J*LI8b%wSj|hK*W*^3!V60ei(f7w*&`BBKj!E_Wk%x1IqyUK#G$ zVc5;$uNU0|r8!U_I82LrZHO9CJ>n*~6@jCmkF>;ETgU|_S?2CvygN?X8O0)yDAUaE zWjDI#_B~OzjA}5=I->V}?7pHm9LbG5UGzr6d3E8wQ=LxVwpdjBK52Yu^nu;|3-|2X zch5rqZgH*|tY+iH%Fex~Hov?u5}8^^B$h@Z6En2?@lO>oPz?&he9mqWpQAOfAeg=o zhxjoMAr3=FaD;{SYg!>Ez#itpaALqFOGa!#v05~RiRq<5(k6ehar z7)($IUG+~n$cavT`{LAOLrN{AQi(wj7brJ|E(*)c^p-=eJL6jE`JRJL9y`iVFp0&L z#PoUg?5}pjtsi-3$cisrf89?6y8Vq;y}nU^AFj3c@O7(@xZoTmPswF;!d-mft3tYRc6s72Qn{JPFmWdiKI_I@{seYxs(l_=@SW_==^ABLGOC z1>+}5pv-orzB*QE6*H1lGar-)3*aN^g&@1B>t&HqB@Sd;?#(8;&)sfm-@%ys%iv~C zO$hh;{Dk8Qa~DdqZ%&Ulg$? zq=v+V)FaiYAQlrY#w)Tx`U<(F_~{LJ8kn+~&cquou~LG$5>poFzNi|?SWTr5W$>j^ zQkeu&nY^hNfxl49{@ip`@9#Y^^-0(LfCF>Oe?q&rqf?QTd1o@Be`WIngXQvI`O|K} z{h&h(MJ94LRF+T zVfr%(bDj9UG%A1q4#geH1Cc6G5Y7dULzn_hYxThDN@v?#V$bfPU@heGY3(VI93o6? zA)n4o=b*f|W!oH;&bl`z9zCObcLeVOK5s#!5jl{ls?TvgN2%ZFNz?brk+^vhB}08~ z)Nx*1)T4>C@hRYfR)kuf;b5D-ktrl|F}s-bzU<`qcFuW?K2XqFerl4_+1WELPV*wM0iHUdGpT`@mektDp1(MFN7kwNQ{Ix zqGcObuQ#K)T6|+;%@|MB-ozMGpaB!ee$a_|?J#b{8U9`Nsm+-Q%zHMLI z+Rz#rW=klXFEpedamTz|fCK1$?Sanyr?-)}_@X<{tV>_H@5OhY(+T|_!4-PLVc;-I zYgA&)Pw22FT$R8AsJI7PtgsIvBGGK6hNb`lK)0cQli4Y#9*hfHL_Ku=_ug~rWKE>(ua#BOB7P;Wvm6xek%T@cP@(1>+6E&*hM!sxqF$4-8;bg(VM5796I!vs6P zAQQY$##oF($+M@ErmG<;k?HC^Oi4MVw->}O-hZ!YPMgN))GgsUOxtH72>DbtUds3s z8wx?!<|Qi-0i{97QG&-{UwL(44={~7+`lT)0-KZQ*YkZ&-k202qU%Fw&1em}n)iy; zoKgb`q)B_-FlP*7VfOY2EY1z@)(HHLkYlS-df2kO$>vx^La#2)uNw#IFt1&wy+M16_IB-k+WYmJJM|w@#q|5$ z@ya7+p?GphFBg7vUGFQyf7|!cLf%M~ghp8E3OrcJ>sc+DJ&k@ARUkiL-7EK%&S|Mq z$WBQ&C`n0oV)WK&<_oM~XPttlvG}dIj2;C;3LHwE)J!d1Bw3@XidvyuES#vRvQ|o! zODDpR3dLgf_401VZcO@m%#K}yOIHA@FAGkdB@YRF%01ur)G;T1j&sNF{@*;c;8|b( zT~A#~2^0MbZ~I^7+`Z=hPIvtL)0QkL(L{6qi=0LR==rAc7QAk@<>}CbdXzx|eey1l;gkHsWMsuYmb9n?VRY9_ zPWb?;6Y)|m8V5W|K+Q6t_%A|6N|-CYYZs;MlJN=&9HK2#F*{MJrqcwscVo06UMPY5 zu^)a-9(>iwlMg`~9Em!vG0zBey%?pD5YJnBuE>Kq>QyX(CA(33r1Q!WbxLFbVkJ^*P|uH%@tC!VsSrqj-E#J?2u-`aDG@uY62I%9i_CB7WX4@(BZ($;6Flx z6L}s0goCO{j@marzjk>h#Ls)M%Tn^`d5=|~ z)mM4}y! zlXCNvnFF3?n9u?xSg#h5u}(ncN{$U%*lsV;6%^6;s3xB z^ss>R8+F0fZQ0Pac2GOoxoLI^Sdp<8_QU-N9d@u4Oh<6mXk93iaK;GIL@M40k&F$4 zAY>DgJ_FeV<~oiBM}Wo7LFYjKME~Fz$V4x9IU?VKaneGw*mFIDGpGXsA6I~EZFb4J z@ET<-aSC;HXG=VE!2p{HFhY+iV2wE3k`-O`Igr}>HVHVHWOZSz+#F}0e&lKwEm|JXk$-=(r*2J#SViM#`3}19=&)l&? zvwM#Eky$Tp3RZ!B+4DE7X!|-V+sXwgJg)T6GUeTLS_bmn}$VtRR zlm}g{5*Xz%3R$5;M)RqRCH5uhFUp+@W?&g+NdN$e!M-u zXKnf5(Q&92xu*Ei)adkJHJLS`-Uk_5Af{Zvo3`^{&=79TUoIcrGkfUR+@6%_amRq8 zile(GTGRUqNv~0KW9fRq#S%G}%$G{{@1;De=<3e~x_U-Cil6+|ogX>^9lwCdcPJC> z7ogb+qjwo=aW|CTf+s|)!gLM;uS7f010A0Ig-61)?!^QJJxg3I$W8*Z1fn!z)3qQk zB6;0M<({#ri8vZ0B3aX5AK5KlW2NhN(p&&K1Z z`_XtjR#D#eG998__G5Z&Bs{a!nw}YO)3Fo?X(EtmuheKx5TkUl7{UCwp2|pKgIV5Q znF*WYy5;*2^L%Vzc4nZjZ(wG2pe{p`|E{eN)|RykoyzD?qlynoKoBFt^_qCUNr8p+ z5DUscX%gjOQm|t%$N=)w3@j>f4+aER_`ZZahLkphC28G6@}>Jr6|3%7Lf}Pz!0%9K zcgJ>!6z3$TC7Dh%rO@s`j+nnh^RT!mOQAn|$vI+TK2t2|(Oaj-M@LC=iAQ~Cq_56^frw2W z6DcsGqvO-Ja?|vAZG(BJqBWtK&*vgi-bby_9?!S85`7ILIg%2K(E=GtSSARoXW`Qj zJs&dw!mo|~a%n(i;7#=5Q->4Z_Y@HO+Vu6;Pp4Xd5RET{*~0p-00glI(mYngh&<(gss5zcgLhJfJ3M4nX0<~>zxaojZUpo6FB<% z`h^S6J}cKiJ6xb0;vf*E&g8+)s!O*E(G*u8HPU}hhzp9~jCsOglGQ?#h!;*e zK8$UWDwR^x)3IkkfOI-n$tUTo3)-GeXCgr>K^(wEk|YmXaS;2La1nI|hzbf!1I$X` zj1nbcq$NP;@0K5nf&|AjAN!y?_-Q zthHbonCCyszyBOOH@3Ik4#NZ->l^ON6R;>$shp}Ps8I%%X5&1^3m@kLSdEa^7KF5H zdahPm5B~n!Ek2|O^+a(nmTFL~gd%ClOkZC{mEv|d8uNUp-t({lkbRa!^Mo8A8LLEo z6_20fwy~BKyXtvNX}jT%eVg zVTtM{!d6P3FKgnZbjZO4Kuu->6JSsWok$kh2Mi%RjVCxR)q*W*A|cRqiURApFnB>e zgsCY>|GTa}3I^>z`7n$Vu7h#`)J@?+{uzhB2rJA?pMS~S=WeHf`jMLs?BBj^diTuk zq1Jd9^jr+HDd-k-3|zV5aN?JTFEehpV~7(@GRp&>Qkw$nqUGxP_ku@DJ)W2A`QxNe5VsC+=aU)oB>s*auiSl)K3)GXT3 zE=#pX@0S4CXHBF05SW2bZY66`P6pjgS3j;Z$`Ar?X*x)S+~~zYo4O+xxv(xgGtF zer)G#pP{E07ro6t$x4+r&L{E{!Ffq-AS*lM0=>8MuDejZn7uulNP&9UsIEE3uPgax zBy@BQ8Y3fOuAEt>xpv3V`z5S>j`~bM`fUsS0A_n~3@8*pz$wzj66yHQaX=FYI1EcO zx-*o5Az1^MC`ywUV22)h@Fn-(a_Z!X!`B}?u)1&e!z&MGiF#LHCxKA_vcoPoZGKv! zDH$;fXdz0PQc;PZnn-5RDTo@#3RX#TVVCnhTcF&sc(UP;Vh=eC$?J%E zc9HJb{gNe6xbAN1n421S@j%L*c-LTfC z)WAS0zw2;gRR6j$10usu*1)r*{gDYH7fTBXc^%H*sP5&`VZMv!Xbzc@}3s*B4IbJUt4NBW`xFZ@T*Zuc)78DGH!7+X1mgbb;PVj|k$b zL6@}Km@ACYHoXxTg{^-0?@s;w$V2F~B0ek5Q zjzCO~x@sE zV1iD#JUL;mFY9!nWxWMhK_WKP%ng7Gsx#S{6cgLeX6BQ46ypb(f*~6sh z6^iM?DXmDQO3KbSMQTkmK+%WQ;a~xqKontZ^}l`N>(Bo2AN|f(zVsVUefBe-{tuu0 z(9i$$PrQ>V$dA3{p_fY~j-xm4+q*|VB=hxpbvltvB)3&itorn{=n**FK!8AyyCCG< z*_ruV7pdB6FX;p95ojAtl0+DcqFO_8(y-dRvPxX!*u)Yf41OCtEE(I~6(}8LRJR<- z8o}lszOAC?7FvjeKyN`@@D+wV9|xF#g1m1@)8ZFtg5fAqByh`D^zCTy1jwi9^@w4a z&KiLl#COS+Xt7MNsR|1cMWbL}QU4%`PxgqXYU!x4iCG>^*OWJ6i;egX5=rK>U9=KW zQ(v3EfpWMBt6r>hCt`x?jTa(+lun5Zjqd6ew0;oB`FySM3AOrAxi?5 zM_S35GOj9GB;+honuBY%?Vr?rH=_Gt0uCI5`P#T%&ro}gAcskzI#9&7l=O%hCG8pI zN`S(`ez!HxiVf8O@3$A&!L{1UwYTey&hRo(jUB3x+^h1bmP+SeOw{4kr%oEV;y%p0 z*|7ntfJ`dab5Z6b>-0^4>ZN28yhM>?B%C~_Q6n)~IIE=!`9dmxPD|&Dne=*A`3WuO z!(72r61E8f)M#D!HZTq7@2x)tmnbmy_^``2MS1PvlyVgI zh$WzaWgwSG%vJDYG z$+#u|)AWtnJew00$r@$I>xCBn-b5khzDw8}{zpKnN|L1IUS8UKOYJYm7ADuSD9#Kw zFcI?*t_moD54C?k%-2rY0Jsu3tt0T-t8gisC4v@7kSmF|)v<;e#EQv5O^_Z|iTl|& z)819OvDBS)K7j?R^udw20i$iVbE!~n!B&?5Gx|@hZGP^iOB)xT+w9=lJ)`z~wE7bl zxAd8Bqi?)kdzbd}+Dkew{;_wz^DS?F`Mr1TwkcE9*-3)i^b~0t6q}fw7$P=u5^cn| zv0A|)8Csb~yzGATem&H|odJ4AV!~Jfz-PMnrLNa9s7eRla7f$t%2zBejg9cAz(`8o zU62wC?N&BTy&g&TWumFiQ$3amX|BywMF?revV~s@53t-6Rekhv7)hjF5EGSXSve-J zpi9UsC59CF%SI5XC#W2xJjYDFMURtoWV+mhqP{36!#Y5@na>eGmg9)6%~qMQ)c=e{ zvXP3*lte|>6v8}|GdG`$XEC@@LsHRdqUJc`OjF@7^j)ER+;20N%9KHX0-tv%Ru*@z zp0L7M>|@+kmL3OklC$#6POh61ge1~;Y>Iq>fWc}oIbH%NUM6hRzxjWW8mUtph*Sn^ z-mK~bpKRNYmkYj2X4s+fj!cB0b0|YCy^NQX-kO4j3&$r$8&{X|2wyOR7)I6{AjC`! zb00}*TBEvKOS=iN?Q}DOw3ccc*dS3-fGKYlv7!z1(_vKhaNq8j}S1weckC5T2OV;{RE|XgI6> zZ1?rr=P=%|>3EHTqnSZh(}j~rdq(?J?W5?`4zZ};7Pkvaf2Mt1`ySojQ-!(Baa^v0%w&!#z0lQG zwBHKO@IQF)zb z9!i)nAW@GpgZ^0*QP;;;k)RtS1cqY@<~o4oXuWbSR1J(6K?02#L_EZSuao-Jd9Zt0 zj3%iG`fqjK6T64iBEQGf&FTiV#?mhSmq}m3?XPCll$wN3;;-SVcuxB~n)M~^DeafF zPrzmIA?=4@!FT}vi)*$0u=0;z^8Xp397SGZ&;<~-V1R=ZV_kz8g_Rlng-{+N z0K_sy-zBuz5)vo|d)JM^A!R0!U(P@+gE`(S_@K~DMJjNtjOfmk7#nA8Rf%HDu_!(# zVud3H*UufuX}Io%Y4{Eh78Z^ej>1g_e!mRDOneYlu7XZSyaYKVU*}gW2)REaGmY#) z{4FrkO(PB=Y;KQ>Yn0`fAsRXdM%m{WLfG(Gpo#iNa|~8I0#z>&$%Z3FbJX%84D5oh z*B!X7(ef~n&_$y*Mm0(wWljvw(Q^c^^lB+qZlZIBoB=6A%Df}0qIw1wgNI@owQvKI zk&n+o+4x{}yB&7l05T|I*g3q_=%UPcB^(y`+yxtGMkIbsWpl@HoG1|EL{rY*EyaD0eerJt3(xuXS%RvT|h!!79Go|f-&R>&5@JQL_3kZ>Hi z&(j-9_+di&=6{L0BnyOuQ->Qtw5kxHaE?uzpsnHsHQCJM49bv{V8g4~B~LHd$pNQM zBy_OPpo~y_(!)yS{*kNM@P0I+xS66Z4f(%F0WKwD;r$_;gqfk#(UR0_H8~9?N+Vf? z9b;JR1Rw-`g_uXR(quS6Q5$X`PAJQ_(KJko$~mD(I;3K>r4#ol083lz9`Jq1c1^?S zD9|CEG}(jb`w&^sd^`dH@#hFo;{i5^)xg6+u05QQ)=)KS#uLeuU5erDqe_J#xk7rF zGKVT5eM?9kFb8Z#?dB!dB``rp!f0SKGkn+%K z*C!wfCzImZi!p?AKkAlXGS}Ht*l0)&A(cgZk5aYCxIqFGl)fJ5?Y0Ho{LcHG=(uuC zsf9TyyC@XBL7@N|c>+QOFpI1t4ekN7&>K@s%zW0IG+;GbcHMNx8 z{D0IfUTX7?CDfwoDX$%kZhr1H_Hi0rQ4^8@V-3tzdcY2B<%BBl9U z#*gC2A&L(Z8njJPmre@R64AKQjEHcFn5E|G88x}ynaun7yubOhyyhn_?B9GEQ2*1E z0pEO1R^eaH*J_(zeC8RNA!s`-$U!R$DmP0f$a6P3pj=I-_COF_47@F120(KvEgpe6 zwyesM645%th(2YMBE>JCgNTTvc_~LCU2dvW9Vu2nE-1 z>GE|n@YE7#8~|T72|>xYaznMUZn;IQf#3oyVvbRQj7}Jud5xKdEA}c*M|q01RM|Gm*`V*$)U(V5Njx^U zej+1tF_POwa@Ux9u^EkZX#|MjsS3vE?c%Y60bJ_TgI%PTez$#2e3FvY?b%=!={g$f z-4ueLjF3$UNm@%i+MeGrwE3;+YnI1St0VI_erWHVckb={slIJ+Xva0v<9kB`qxOjdNlIMjRPINqulFCY2Ij-=`M`+o#GX+fLnjJHu}av5rv zQY}j9pawXfVhZCWuoVO%plhrB&01wZrU+4q#YQIcV3r8+GUOms*y}E+X{phLY{_K> zSAiZ$d`y<-)w@gi^~%`7P$#0cn_f0;Hk8Wh(QH~T;DN{{kQF&S84ja27@=5VIRA^K z{9Vb$o9sjR}RT|jbjs_ z8IY`vQowMgBh)&+{u3*M&Zroo2b&Th&B1?0f=o6UsmdfSFRJF)q@LF)}Cikp9P zPz|pi9NGF@OnhQ}W1S};dc(6poKSL;+S)apJ$*&pwG%Nyk~F4`-DkU}nDbChnE0eB z9q~BCH5PZkWoO=?k)^$Fpg)~X@RtIacZFRx1Thr4KC>KdZLlDS5vDfG^Ip{Bselhk z#p`u@eb4Zob$e^!Zyz~!?2%*25164MS8oY+`3p84dxUF|_UhKN68y+;r=1Cyr9o$? z715>Wjl6BqVG(b#L^>NHou4;>%!KCbb|$ADmlo>vx))u%cu}3_6I0(fF-N zrTv}ppL*Rp->C*~`>ASW{c9sjOC#5hqkR1N&43Byjwgq6|7copX#4&$wxyMMwmM@(nF5QZ1*X3VH~X5KMJLN>`iuBKA(Q%~kat9CHm2_EZ+B7U1$E4c0aQN=Qp-+DCy~k&_eYtpZ@Ldf#F1P^e+SFiBLoFa2=+{&#QN_U`-Z*IxUM^~f9F7+HS@ZH`jNxZ6PXOYV~3#g2Dw_Ay9} z1Qadgc4^pSxD8PU4AB$F+!qBiM3e*IAEk$wD?0!)e7A zjf5ahkW>rO%H8giTgYvtS{rQn(B#ITAb!_&&sFOWA3y%c@#Ff&+aG=OEpxj`guifp zuu|Xrs;qtFxH>yIDgA}9N`qbCer>LMPI`OnwE7*Zy_Ay0QYy#? z?CC8zWQJf?WUO|ReP!qds7E#gPFdNK4f23zpK25ejlu_;<@C_h-l?H4IPjCNym|3-xj%E=*xoZ| z_Ksbf?Ju8Rym{-ME^$v;*e-TT~8MdxQm8R$2*9+V{7A> z_PBx%PGDA=E1(ZM2dFe}h~Q(!*Ft3e;D^OU1)L5$RRG@tDFoDV>#3V>nw}gUMCKv< z#H|--Hf=O0++>m(pJ*rW{&jyr&EJ5QiE&11mTiQG%Gr^zG>#e50Nv&!U$U&; z0f%8M^29Aego1+oqKPwOStmEv2)VJa^EcUW(hEbM`6#gh&o(xnDXOz(ECsZPFzBbn zGa|ph!G}#1voW*azv9mtn1IdG2AXB=m?ZfQlZO35wW*jC0|%|>bZw7oY414n6U5x8;UQDeoyMJIK4&*8_5Lg5>Q!dJ(A4x<6KX#(Gw1)`iMNj(Pe zAyh4oFjzg!hNN#vAd&e83IL*+esUpiGbe>EJ>RI8aJOVJolYvh`AsSI`X=2@Sx zS%|WAt{KXOQ{Mki4Bn4W;65iD$a%JE->%5fvbCXd-_T^bluul5SBI;)$&DMZ3a)_{J+UfIzNb(U51I;QMwq*AuWVi4Mw0IJ&PIGpkTF%6ww4}GA&}^9x zUGK!`NTrYBa!{4iN(HUptc0SH85OQlshFxWDa-2d-H=97wtCwu9%@va(;8T?`#O7@D6iOoYP&-8pc}Uj+vf6B)N6 zuBwhWt-2YsT~6=IdQi_@g&u?jkML4v*ID(%ma~d(ds#1+`dkIH^8qC6g!YQg%ge>A zj~8NexYYmO=>=JlL!htyrvBd07na8U0BjW5HLIF1%zc>7=Z~jB9SEP zCK$B_fKYTqOg2NZY$nDA+jSz=!XOF#P@H6&aPo!8HrW&fSwl^kAd$XwQhUbcArXtV zxF!1U)fqMC^Na5-sm$5^^~I^{eS7Ecv-CAqJsW&_eg@5Xb@b@+&%AbcA@SJBSL++H z@WG?YCd)H)G2^~0?7@7%8G|0>cG6X|q zy0GVRT&H*nFMaCV;?bjv=RWo6`*t2Zy7RtgJKitUE?%ttg4eM>C=0k?@Vsp49WgAk zDw2E@YKcV-eo_$A+C81SUUJ{Lv$usDdu*@&=L2=30tH7V?b>BaI%ZcN2v-Q#Xs9*hG#JvfaTxWUjdA?Is z=hVLM)m=+hcUASiR4;0^mZR2cOR`#$C0mv(w~Z|u8L*65j03pAHeoSFIA922>EseZ zFmo~C0h2rlQ8Lfu<_?7Tk_pLO=018z!et1_IFm^(H#bwB-}{}aR!cG%$lPaospZtE zvwX|@z03dozwt^w+sK5V+RV91iB6lBYMPR6P3!~J5!G-e+tf@Dn1 zZ!40s9S-{jBEfF~L#hIqCPo~O+<6M48ECZ6JQGRPE%FQDPhR#%tx4}fL?vMXNO~E^ zF=8xsk^qLEhURw}GL`{gi^`lG@RgGFjPl0Q^>l7#aK3-bXPsg)g`+N4tn9QhfzgDw zFO>5}BQlP_?HE<$|0?QMj6OWaD*HO)?Z(d=@ALewGyN!T;K#OYh4;FT26J}gJrO+r zrO1O1q&?Bn8xNSd=)-T`x5rz|`IpJ%RRlpLTlklZkV#;Ox=6u3GkDhM^P7D#^9cHQ z&QWLz7U#1RptrLD9H0chbVM|gwSXi>O4&&1oKcEqOHnxFb7ZBTGm1Gb-g{p)V|sxh zoh7+9?u(r@;yzy-R}1yDLvXO-6!7s^zQim-;{Ug66xh)x{zqP8&Ko=TFKtLk&i>R@7uk32sjcN?l2f$VpQM!oG zLBlqf9!=B|wFNNkRIRILkZlsDMl+IM#Ny(*^;~ z?;N5;Zz3EsH-l8n&7rSRjl{-HB8BRz{5RP{V&yTDLnD4MLox#3vWefA055*8R=cxN zO!xf?NZL@dd@{`qE3FRftOxhh(P;D-p>V1cXf~ zCI^Xwz=;7L@u{jyK-JX$* zC>C1Rw((H!V;{JNU;D~=>>67f*eRyTQUtPlDp;)QI(A;fmaBM#l?6j6&~-hZaQ?sfxWxysfl{F zxGzD-OplTwJuYAolL6p%KgQ9*Jk^rvPyrO^QP9N!ixq^EPG@VucFri8fxPA?-BX5w zdckYW4W6^@bAxk04?J61-)e2~c+bqG$nZ-<$(`~+a2bgv5<}_KY&?|1W1(W9(ieL> zK$P0up^@6WgIepXT^bvl=b+a7;8=9oeYG6*w(tjoj?3iw`tw;hE`6Ew2)Rw=P_i!) z?^mzzx%e!)dT0iHXW2O9+|VlFpKxkra0$ki1*x3OsPQZVxD%t)Fz;hX340$eHB+KE zTRcJ^zjOOsdu+5?2~+M?Wo+$(#p!QnY*9Zn_qAufDauXEL!OQ)mJtaUZOV=5*Z|J4 zIoS(kvtp_*`TWr@U_et-*oNhUMT}(9zKU*gdbQG5f*B5vr!GeUoJN59y4R7jvyuvdBP)&7 z5b#tp1n|PZoIV`-*puhaKY3oQPu9XgPpddq8!Gv|#}oN{;+BE0L_)Qr{f++q#%9~n z#*aLMUVf8vFapy*l8am#(YAoofRr{!4uUf7G^HygE!hJrCb*x#5o4pG-`?FM6>Qrw zKRsEmHwFiigQ3Il^V@2PvRlL^l+cG>F#dPvVp$tzPs`j*C^WW1+NVXihMaA z*@FGhIjJf79T^zeHq_V_7IaC>jvtzwxUtsVA#&wAU3=*^BzDm9P%|MH-V+5UQ!JMY zppK#gt>ziMHK_NHIm`fF$N$t%6@;C}u+!L9WB|q^_#H7-CkJX((24*n80NZ6_|6@} ztpc&K1(v^zU_x2>ECvlUSNv+iIpiZtqb-=T1~Jm?g3w;cf~r?lcAKM>zU(!BabTc) z9DvL)fWHF8V-&C+>vW+1KK!*14o$pmU|>&t)QS~lF(YFsRla5Ycs`i zGt*R%7)JZ36``d9+UPX~)nG(pD8#GNe!d>iXt15f_m-?XP!cz=M9=>2Y6FG)!)E7J%kDmY|2WzW0H?fOwly1k(;7ofl`O;LDix@7y^+PFF@p5X)-E3_h zKx)DrLA|+ki7^y2YT#Fw4eotQPF%CxFb-@~N&HW&yS{S>7tsua+XbJP&V?5rlTRH$ zgWbL`J2~3G`Ik+(F@M?eQRo4im4aD=4_`KjTbsA$%p3{v;^w~cu{t*4 zI1_&<54EsAmo$0shaVxR5%yD|^WLyOFWd6)cdjo_{^!YM{qP^p`6Frb9(c&Z{)_#I zLLt%b4<~*_A4);NNS>Wua0fYH#aX!grJCy(pYVVp=rYLiQ6 zX>oFVpxPYr!HX(pg=jrmqN34cb9xSFh0}*)0Qn(&ZnBrnU5duw{w}#vc7Aoofqh#> z7o9VVvuIgfzyav>hj#8fp`b{x8pl8M>i7EXp?U+Bv@F?BW}<)l9m_lB2leZ`?<)<; zP1J9B-13zR^;>oZD}BHMy~)zx_(Cb+Ox#<{`g{>jidE92bkayab+vhwh<4YLORCB% z;f>htY~@acBLcWM+!4$g>KO`xQR;-rLDgQD%=Wr61%WuBRg5c`B7`MEhVR-Xj@-Gt zwkER#T}I|v$|xCiV=JTWm~&(n{jEJd7>@zx1jo5N$7nK`N07WAtaZ6OAVPRF=@M9k zv>w6}EIFuprrPi9+_sd?=a_VbLL357S0A}rSobDW@7Z@{LSi!1Gfjw>SQ>i)SebHq z-c@Jx{L-@}sdm=*pc0BSS67{CW!#;5Ym%b*8@>4^FFK#m`>Uva`VUD=uSRhw`ElUN z4&Q_xcJ}Y}N8BZ{r@NM;L>pD&8Be)Dp(&c4Fq$D5(w5(EofYmm3B)S%G%2w7)BH!| z*>B%WfYfgT&6&RHDd!_GCY;T|z4h^?h_eKXstCYYY08bWhC=<@q>QclzB^HuM z^!k8?6Y>snvJ{;wB73eqQv(tr^P3G*Q-g)wd%|kAP@jtIUYV*F_Us9FzOiR_VQ@4x*BsCf~Js;ld?8J$T-&Ew#p{?HlF(uFN;LenAyH z&=KcQEsy1o8`LudqTRDRNRh&wfHj%fHiRd({c5>C;_1RouRu#&cYn$BpkCqPEN{Ic zTD@!U>HRu3OL9_uC|Bo(=YL6Gb$!!)L`IiWF=EoIYWz5~)#Fw5u)gxso9<=jNq_kYI(mf)^idXFiRM*`FP~DH% z=ads}gD)Iz)~bZ%byXbQ8##1eH}j#{&=FVON^TZuc%m|k*?_diYp)H63B6JFccr^) zAUp_pWi!0GV4q}hORH*NGgz$ zf$dU~y@L{6#6?H|4nSrSV~z403xH%#Lys?5{zBNY?W5jUUoysKR&0PmVbTz|+WfRXjr$0IPHlKf13 zS5lz0edQYel5@7xlQp{Pk8r!#teix1rtJ*TevRGKODSlQ_5zEite;X9kkjx`p%m|yR$4#iH^2dj~CWDp*NBJ!V>^~LR>;8N~Vq4O5a7XAKe;NkwI z!f$wU%J*7!DW-?Z$pp?AER(>HKQ70Mtm<8*FJxYR2Q;F{odRB%Y2zm2cIUQfmh=hA zJ6Hf9UFE}bKcIDHqK@lz8DAvOL@qW%oV|ozx;w;S%l7Txvvb?x{LD@5!xYu2SNdXb z>{|H{qKDj()QoO*gf<`m3maYFg}HgrxDcCZhOwqwA!r1s&z@l)K0!4T+_<>Y-0z{S zx7CC%f)+6yhN`&auN?4r9ttI5ne5;A?Ck%X@ms~4(4Karg5Is3usQ)Pj~O`V_dECy z0fYN@1nqf7PG5fCut!A~?RMflby7Km68 zzjrVh@KXu>zYw|;{jJxAS#*i*1}1)q_L~|MQN1&HEigd6(%z?>v|;R7-o7+5H9E|xn?tqYWH3d6Hqme;6}fC`6pmQN z^8(djAx0&TcT3FkhWJ!m4lERWjd0r7vhce@qcQS5qtP37%q_P1_X1l8nazpXz~cGZ z9Qu}8YttmcwJ?vS&LE2IU0`j#T$zwuKo!$f)y7`q*3Xprb_6mOZi%t9fqd_W?yR7g=T z8L-qVl4dkCG*+6=Z|oncWrrpcjgbcH-@@Va`!n} zLZ{hvTjpD_SnS}gElVT)TOcnPDdg)zTc6k#$zgzog7=f&mIwvQg=8r3mNb=a%wl0^ zY_L-Qd^lQ8w3a3+twO>Vjo1(+)JFRIYo$u662&=U+5Sh0g;FS(F3m?mKLq9j$8KM) zPpE_V(fXEDHmcJe*nKRXl0qQBEs1Jl=HY$G84VV7ZhNWie!1T!1GLanoX&_(^0Q zNh`tzz!F%8@2-aiV@QeknYUT1bxYP5duZZ%s9jk9RK`9Lg#)sh>bu#_(01SS`xdp>pSeSNgp-;Sx+~vP>#(w#ePrd%!t0WZUfB!@9U|GJe9-kh>75baUW;{mF zyZj|(eO-l@QCX^Z*vajU8b@-zW2ZcTaqd(R0PC0#l{LMf5#_#{$^Iuv2)Q3Ox z-uJxjwfEe8_|QJ6YU%^H2U839Q{4%V$~VVQ>II&(`OiBLcUl$f1udZrl3zXaWpBZW zOJE9LD_C)MozouI-Z9yg&UKZ^oD6_wrc6Gl{L<}65%;$~Y0l}5If|9*UxF)jnC9Kz zjZo+``N2Ym)%}+H6|`64q587s-BcDFI*{rjg*&F`pF;ryz+>2a^fQ8w^A} zIm;i71a3g)WJ|eF(lLwWOtz@@Mx)V0sZb5US`sEkm9yebzAp_RR_*m=Vm4I~QXYsi zSplJ)wir-QFMBiaTPA~9e*>!ML@FP*BNXnma>-PHJXgOj87{CQ5?BrAAfSO40NiOJ z(H{#%t1&xONGH`P&tsN96fdQssJrLR5C#o`n5NoMtP~GL$WX_U`yf6$`-VV>&2aVK zFY!}rPa<5VXiJ=^T)l4D@%T(RUF7qJEh`-%IX7NHeiMN*Yc=jSmQ5F{#F@^c*HI28 z7z#yhNfjblys2=%v2=LeL%i3Hl%xJk2)-?4R-h~}t#Bk3&xgW+FibEukyp=0s4x|P z#3z{vKbbXgtfLGy+1B zaEPXx5JmhPVw=POinf50mU1(aP3bZA&d-gHWfLU?;N=@5_PC#ZCUF{>-B zSlQ;5JaF6ivSjx`s{?<@0_jM^5$4sUY<9RllFO-3a=0(@k`X!W&*jEy!{l?Vd_bwE zO!H{xp<=s4dRCigcEW5cPpmYjP8}W}FBgJ&yJp%1(5lsmK|3GHm&ZpILK&yO{?J@u z`lLTOIXF1!OL$LClLq7ZsxF~N`a#M2zZ?rNY+59};qSRiw>Iy?~yO$?8E0za?T9@uu`+#kfho>@6&R>~NbgXM~O>{eMDtuaSD#nUFdA*L zpfbe6h!_Kj6)Io+_EhGgLW1F0hFFYk|LZbH~l|cNv?RJG7CMs654F=R$nuDPd)z zfEZ7`3Sz?5e1)f(Ci7px^Y-YF-RAlpUDj=@ueDmYuB~x&jg@4LS=DV7BJy*k@-bZP zVR9L;wUVr8I6GPJAnVBn$U?+#b1IHkRK}J(Gr9_iv@b;$d-l5ZjpOkijdZnMtzTW= zSVn3*6;CDMJPm{My)JlAjE^Q{H1aPr(=rkzh(JEQIGXi#fIOL%*2*8Qtnf(j;)ms7 z1&8U%i#+p|ANi0M{Bf^10syDD+ym4**E0oj4+BR65DGp7xeX#cm0&8+wTVkExq!OA z^Un`gpc!~G9?;F>I%w3LDhWu0$8ZLNieZxJ1X=Sa`nAvEY#g@cwv=tg8Jn% ztNNPOkbE*@qE3ietvNHv{0GE@|BTPpxUy@`3rYodpr?yZkwj^30fQ81aVlvhB>6xR zn`Z1Bfza-$R94R!&MwE3ws1JQ!;!5oaRJDzM01S|FXd~wd_)n@}bM^a%! zpXSBY)wn)!aCPJ z6E}5qq{ekjbP{{OdS|1XSEO>6MDtY(u`_W$H#rku_hh?!9Zz%)WMIqFfCp zBRug&Ie$I9XV3IM)@Nqw|Cp_mb6@|u@Hgm}dZV;8H@e1}CG(wXt;iNUa<{l# zSYEVmTqw&<2>{zvv_8+r*wNgl8A6h<2T-f92Ea?x+Ql5zjROQW6d zKl{1S(a$~BYAMf%wh=j}tdnm1VFVn{R^uM$u7dI#C6I~Y$?z-}#oH_miN1rcC8{K^ zfto82#<*b?*Z|z-)PJ?W989ib$cps0JS|d zu+;gpLtC~ST3DWMHs>2^drJ2IFdG&Q-OJ9+`A?3IS1+7wMEU}I1MzLup-mr2H!z1^ z`kwk-^-*JhQL|)x$w@7?s3TMDOIZPrH8Tm#o{4)Rf^obk4WrHyBEa__21X{Xh5!s) zHgQ2>H3$#fSGX*0gP$v)DQ*MDA=e7v@%^X31DQX~$)|>Sv zms=a4(#IJL-Oqy)7}nnUS3BpZ1#5cxs2L95 zR4IpgF*E@86bVuoW&k7*AHu_d3&}Vg4ulBzpyWukX*f*PVFb7DC=d$Y-ie8kkwju* zdIIqC$oL2~a|i3?{sf8lgk zU-?(IOvND`E*>0tw%jOp{;5%Jtlf9WS?jN>Ri|^wQQ0l6Eu~;`|Ndk!JXUJ`zT?cZ zV}rl!q1hXU?!7m$RG+Pk@IxDL6SU(h?bsw&X@Svtz}Z`;9ucxbbSwOX5>fL93_nvg zfX+hrgpjTH50CIfcmgRx2yV-kElXRL(oD~MJGC9lcNDR72?sKP$mb$FhRNsfE$e{%xAY@R+Uhq-^|)ol>!oj4 zAsh%z5sBHXJT^V>Vg+;zUJ89A`(AyX%*@T}U&?4XL#Qe`AqmwHhzZC#nxadGK^VbM z`ymOq5-9XR-(ojyxEU96?y9f096Z?H`|Ga%zubGz2i^8%l&V!CK{Y+T9A|qPq3l=7 zVk#MeyJguAoWlP_+1M8tr7^og#6%X+{%AH-}yVKftvb%^yBx{NcH>b;G5Q^;qZO(xc;Who z>F?FLdOx#9PNT^P3y6M~GL(5V~VJPb~!d}`^2i1=g7ojyrh7;M^V58uIzrb9D{3kp|OQY_agN!6bE6)OwK#f*zovD(LQ@H|1mK0V`6ZJ|sj= zZK4EGCtxjr17w2_MBbm+c*iH)0|)P(&xhn%b^wE-rL&o67)vL15bF>!5mkk4*cqn; z)&tImC$DHHUUk5-th|*^47GFADPLez+f5((_mxYLo=CiU`T6pnuEJN{yMjOc)Bi(n zTL0YVG|vVXG}`(0Ro4`AF&;lFw?|4(w9U9$CMm3w? zdnbwb-*bM0?ZJ~`yvC~*TkfPSJlf7*LvPH0;vF)+>7ssSB%omUR^e!|Y$?{RDG$g& zLpidTIl^EDx>+-rN#HjCw&CD&F%*UN=5LZ#@e_U3nU!yWy8=%waO$7zYvlNpp=346 zLuHEJ4Uk$|0)9;Sswl`mG6AUmLdPp5tRLgyZT&j^C;*xMdyv!xR)F7>+qn^FyxsI92Td3Cy zWoM$XH5iqWO;=y)pVVjS!3k%)j=NFob-n8qPMV*peXcw4)hCiM<&y_3r`>ruPF6d$ zrpZF&-%8bo5H(2tP=GCYhsm1R_LnaK8Aww}Ixs3xNNN>2lN#^V%epY)ro3Ij{GJ%kanV ze##jPhY4C6(&DLPI1$#G9eSbYc1T>qN9B(MIw`)V?WQ=O#N|{6Psq#mTD!f5Q|9pD zwf5om+Tri=-1#G3E4I6H*ietCN4UGNk#u6@_)$&FaA@N@Q}_??HQ04=ACk|V{lUr) zR@5VSucEPbl-EB{Bl0HN?s1vZ-VW^(pmlER;@faldc0?;8L3xr^ETZjnu5U9LrYFY zyV-yA9;Y1e5fsN3qR)21W+6kBcGX1fX2*uBDx;WS$p)=^X{B_&H2M$!fcRDWs{Am| zBrYXmMXI`?-GxajRHEJ~^M2`>p34&3=CDi!t@r!X{w$Q0Qo}8ui$Uo|NFbxq{*47f zlvNlr1uY_WnBt;b%C7g0d~W2uTKb>wJfqgpExwy5PF1TA$EhOxXP5usAM`c7NLyXR z-y0X%8JCfxmc@H(pxVt#Sbmy)^W7INsEcdZgII$rScMnd zd18#4q5z_bbFSd?5sW>ihVV85=FEvxSo}lk@h2-!zO~Z%;UncUKde4dQM2!>ysy&v zZ$DQ#y{+B=<-`WxR!Uw-!4XaDi*(tuwtgzvd0w07YH zT6%A+u5nzyQ5CE!LxzY8%Zi`Smlw5=N>RL*5^y-7aowY%TDX4EQ|V+lRIkv?!t3et z90&%aW+Y2i2H0UWSV<%T3GRtmBTb@>Y*%BHxrI7Qf78<+S@`B3ZzCr_MEBPYkFJe%qmVN+8;0tEZ?Hw+QzGONzL(sxcd&>UPVKeX_`oDt~}g|bIP##~CA*L7in zZD%}Md?*nbA~U}0KDT+TidVL6^vgQ;CV81i;xQQNz2;5~X}P5%@@$yc(!2$|HaJl3 zOC@AQ@wsye6Pnn>gh$$TCO1#Ejf5qH??)CPz0_391vN3XoLQQfEth8}mNLszi$g>C zJNjBv10#L;eBa2xRIBd}X!*fQPxsI58JjAVrpETn^-nL4jdh;Cbzo+sK2-x=G*us& z8MxK!2N%Vl;K99as*;5mxUOq`poMANzH&u)hzO>e_6t`|z35)dm2-5@Du*Nv#&I3m z<4SCz2|E69=N%Ny!jEcDNYzd&5CqXvrA*!fy+48W@Tp=d=ZVCjAdLi16%ttwWuk>S zhy)565d1iSa;WQCt-(PzVv$a_Mq8sJfXoJ|-gMS~Qqv(GGQ-|ID>G(2`T;izX4*AF%_vtTIYMZ!7A00>W!Of+Pj2 zUUMDLOR9p#R%d|#ceI&8@x7y$LY?=8)cKIw#NavgSHBhdUtH{hF~#++ASWf7g_oI2 z5iA|fFxCXb31BLe3B7V1B?L%M$RKhfLE?7jo1TQ<8JJ+;^> zTQma!I37%$d0;ri2`2%aWWdwT=fDAKioeW!dmhw{u<6^D90*E+vSxD;5`O(V@7fQ) zW!hel#=rm|_Kw?8=xzj0j8!u-JNobH;S_{xrb((+L_(ZFZ*|NY4FrQxCIivADD3C9 z%BTQ%kzm#fiiKoIp&_uUvElHbuNDnteG!tRBL4ZVVbb|;Ui3yUsi!G35DN$4i19|O zq8aIr+sUatH_ncZ0yD~I0*zpx>a+VK2n`S@KzTZ9_XXi7;#3rGAv)~|c`{}O=CCAL z{ys9x$(vJlHB=V*7R!^d({yt%73%imDr~xD3)d_sUyW?3! zJ4e%oAq812t_q%du8NXF78HBwY_%V~8!WX65=Rp0tb|;2q7ViB(7$EIw(Yh|Sf1{E z`rdmE-f-_{c2qKzdv{boxL&+x|DGoY_n&*}*!JzM7XM65M#~lZQ&5z`=pL2r6@nqz2^$U2$g-0Y~R8q@Lvl~HY0n}c;hDG?->wTGIJf>CnAon1IR;Ut|AONMaQ5|*q`$q`j~xg4#e zry!a`%i6s@`=K?p7V3P>Zw`+Si|(P8tCbe`>ub+{CnKMwuv@T#{?(rAFM zNiD;{BHq~R)=4i-E9&N^dSk4ULcBY~8ac#TDH=uZ-x(dfe`MstqcXOz+dit+jT+k1 zH25sW))2YPgl;COfTt!X1!{WQGa)HsAVz?98Iyq9!A&eifVjpGT(qJHE`b!nz&18E zHa#{y+^P?x3w8?5+olAiG?bNK6fjm`TM`8%h|^rCc$#SdGcFA`uSolCs%=}hZXL+q zQR~-)$kUZ#H4^R{{`vd^Px=CJ^&Z%g&y-5BV*|IdUoC$}$_q#Gt&20eqcvZvzyDqN z*RkJWzxO=_VNt#~(dg^z`?s}j+kTXm{T?kVGP&lIL8@pEhCE}$xf-CGqrI7awFlOkZwB(mKBJo9{9xzX!||PYHS|I*#i}~KL{3IR z9qRmhKFSO~R4Y6AkDUEu$X+1emaEosr`zrlcNlYqv$0UnX5o{t*pIj@;LKMp3#i#f z^K~yL^Lt#+S+~tLuHx=1?c<(%a+AzUBJ&P92XdeU3S@p7<}%5i$ZK4@j8DUR4y6jA z!&OPyT+yp|>giR6Q7VeZOneXof)W8HJJwEjNyKHNLqI99a`A-J)rk$W{fQ^OygvG8 zM~QIPC}P={TW=$6eVeuk9Ol~nRD5-1)eVq#)>l?p z?7QL8^-Z5t^^b5QuFAv8kA16k1lP6-&{`$tG05;C(J+@$20+ZvlOl7-xA01S4t4Kz znvUKpwk)l@-gn#Goy%%^=JvH{(*AQC^&5Xs|}1gh*4y(I!r2_r!8W z@pfNx#_wG@$>ziBdFS?%=yL9HB}rD2#=E5+!0eGBn@G*gaNKUK2gGK#)rd1>ldb8U#Z07mCEaPBidE(JiTa9?|i>{ay#`Wk{UPa8ndd!hV3VRRbPo~z)BbKA4hk& zfN$UiXJ3*sCO)+c8Lxvzf`Wphnox_*dXZ?ZpkqW$CD6-sa0jC@GN9(+#=>WB}oSs~tYPZKAQ|08Rnf(4q(u z*R;94LxSg!ZLI01P@Ba#TYV$-p%XM)9cj;@|;F)u( zF*}G|X?`?SC=#|Wq&{Mj)ZfrA%wN2Zj|PjD|JDQ>6So9?u)F9N!QidE{&Q-u#4DLyVCm;)T zen;+~@kS%K$L;@d$BlU^iH9W z<&;yR-HVOk#&D}Cv2>~Jkxpfj$xNKuUyM2Jw$^I0*3x?XKH|vhjYN5U=Cfx;tEHEW zQgzft30}DHEf*(9xNo5S?aF8g+~{cK+wIP`wBq*m)zyo=7t-`JNmpNW^E5;Us~B~| z)mfi#-WeyrRVK<|!0BY6L?;tZfNZ`2DT|Tiq0*5KXQtT;duns#)l+0f}m>vWE}#;gc3)N5Zax z6-70=8Yp_`zC+5ziM|d*Xa{8Iza3F-_SaV(XKVv0df%Z#_i2#m6YN&zFX%Y5lgP!( z*rcK(^c%Y!2YNuGkdKGqqNRE!{#(y7E1(1CwSjZwWMPz%-{UpQp$NKXH z5t*W@Xs-d`EO?p{b2;(YGJ|0-OlQ}Z&ldWl`=`nISaDyfSFP@zYL<(YnFHI89qoLE zhwZDoXNL3^1cjV+4fz@-W-O>)vV?$CQ5sM){)h+<*+DXhwHWWd?1}PBCXt9lSWxmA z0-l1?O(i4o2p~}c+hG-Q{cLV11z<5{-0>%O|GQ4M?>W_TjfeOZ7aQIzz{aiL&=Dc+ zQG^LW>W4w9?!%{DL~YvHkO)= zDWTJr-uB$v_)r8&LEavraTsisVPai6TVn0YnV!!5Zr z0kJj^q*4>G#@z_Y%VV5p4hRSajRqJ6rmS2t{CXv)di6dYYRFu@%PZ6bY&UIe*XsaK z_q|L_zz3uzAdQFKRYmXeF;mbdS!@l5S`%peS3-C!%WAI%K_}V^3CNx(VFVlZiTm$A zp{o6PICYE*o%IV&|5WIU;b{)(>T|{=eOwn`>oA~x+%fgR^kL-tSLSaB2~$P>GD8OI zdE|&%9;#N#WJi(O1mrp2< zlAd#I@dSzAvP{|HZIjN4d^P$^`_J?F*5E`XbI1KBP6STp$zN&b`!BVRMaN^W**iZ{ zEr092cISueR11y=lXrad!dmcj{&!+_dmFdUoZ|E%d!$YC2Gs!bR8aC7PAVC|-}>WP zq1&<)-IgZaAzrpCtvu(PIN?k#Elpn4+@FrU=Dn|pjYp52I~LXR<+6$+mu;hL+~V8} zUK1Y>x}F8Yh&Xx4T=0^IgD$P4SUV+0Y(xzqQ&TDoGl{T`E!);voAyyAy=4=;^_TtS zBw?(ao3`0i_RvywmW^Fc3B7?ZWJ#vYSM|JZrPGUznZ?%8;noA*Kq@?bK)D{zi;W$t zYpZ)ct(^GEg@#J*MIyR#=n{H}q*4V9(DA6(4s+adp75c>yL;chyH(_4Qx82fB@YMX{XTtPMjV&z z1)~O|?Jm)2w@uaxaQ}#0V1R(Vv`*9dET5E~6E+gB&KwixmhIg?+g?~om(m%+m_x$U z3%@o!BIV`;7vCVci57>k7r+^5zCAE5MMWsWPEg;IAiNJa1WpOHTGruTiBR`RlbBn==K zM3$4&ta(iOBZ5j7$F0}c&t1ctifOq~s(RzD1Yt)DXwVA}76y|=@HRUm2q_-sXVu?d zcPj_3yWK-qHHW(EsvG#{Yi{q*RX4Baxa*@Q^Di4Or@GGo=BL9QW)O(WYZ=sSjGNJx?0KP4~4y)C>qVAve*TC zW8nHod{>EMKLAq}A82QVl@In^Pq-4pT|2OH%i@+>mn&7RTX`dRogvT-`mE30x@GZ} zouoU!VMm>MSU~fE0TbdOD;T9h!Lo==#>$4jIA!d0aANzc^Vk{~7~s|jR^aTQF*iXY zk4o8ZsZzN)jb{U7LP0=DX5g;|m5{`WY|hQ^ zMQX(cc-VPkC}G+W`~D>EOo{ZLf@OfQYI=#|K{M>bFCFI*G2}T-dbJgaScm1=iX2TT z$j$avk&F_;MNAo0t>9N6Al~eub{%-sx{vvUvDK4E3rePzS&-l)a~U_DhEL`om!y=_ zLaLpsO9u6nS|uf}vx*b&VrMPhU+Mc)!bv<<>94L=FI>9xV*DjT`v+e#E?-_Fm73iD z&czjO-IY?=lO1o`jL`j~C5kTzczC&?p0q2zqzO>AIQhyv1Ovd9`P)}~vu5j+0MHvn1Q z_sU-ZeY|xslNuV#)a#Ai_>81zvu^R7sM&1_srP~p)cYll=*luFw4gt<+fqfM(N!+g z+qq8v7k|ShJozT@e}Pb(N_VzdKTs?r;fIUHCgv)hnq-SaU?W6j@&B7=qR|y!JR9>> zOz%>#lqjT3&&Q(CXZFt9!O|y5IT0j=Ps^A!wT_0=HkOSQH_3#aZh zC@|I-@@3^|HjDEg zH9TsEqo={xblp}mWn$=CacW3LVn=w2MUEShSVTH%;{Xc1_@_StjBoq)?K`~h@QpX@ zUKTR_1?X)Cr6NVWJ~WunvqC$iCAS(BuN0(VwFgVVY$1tSxQ4I6$Ld{@W{geXL#!H^Pn z0CU6@K*?tW?NIPGS)293Lh(-&W@G=+l_NJDKGaBMA(7pYD24&;;@m~ni;-8Kb}P(^ z8`u_Evp{RxKzhX1&t!88O=gK0hC>TdiZYY-iYox^K9v(xb+dsjExN+md|+{OFkGMA zw{Nx{9voc^%%>*?eEo&_(8yFU9GD&n%@_K80~4Kho{psYhSY6@zs^3MJ8cd1rOw4K ztSVzRFniOk>G9y`^z>+Oe0upX8*(75RdO~|5#~?JTM5l36}W4KlA~J1=x;xM=FH<~ z)T>TKqs5j|w_fb((i`o(Xx!%9GFD->jgGYHZsSrrDo1S9CuuJdauQy30U-!24>1dj zE5Z1SE61<_0N8e~A!lc27iSj}DymE8>R{Z*w*>%%K z%ghC@Zkh7CE^2#1);vS!Ot`qJm_&?p{b*znK@6ri^PihU2J;UjL`x$1hb zUExv2XV3$B;SI%h)y@f?dX?ONG_}594mU0UM0D@mD5#syD|60`1*Y)9P8wT`yT#(a z`&D<{xq8Rh+s~Z7?bNMq-8FZX9K7*{1N(*1aCw*1_}I3zb#bmRag`Z{GK&=k+i=$i z+cKZXwVFN(HkUoD97v@Jk0#U*wMl9;PY=K&D6g9CugyEDtHUI0&onXAuKm|(^O8D$ z)jyR~4^~?6UYo_{7f)=w`YS**>d}$G^5W#-aOx>5lpW~3P)B>8y{RwUpWF1G?GNp~ zc1yV5-Kv%E6@P)>OMx0e>ANKayPN_!z0_*z zcUYk3U9$k2KrhKp9oC8kA#*HaMW zb*p%~*OG(DP^OT)sv!ev{ju9g`Sjhmx^~*EVSB{691a7Q_+%$V~l&SOljET>ch9?U>6vFZ zk~;kU_jBB9_d`3?$K!DNbn37^ImZ&`sC&G$@LMD!q`|$6P|0TzDhmX|v7p7NNaAW@ z7Ei;%{MStL7Su5FR&3H6<2PDw=k*a5(iPtCR{ef|=P!1XXWMIsGBLKgQ$^X9vvBhJ z^{OkgQ(}Gi5^AFfve_4;;<3xhgmbGlgVmDDo_)Dv-*wFeTz4+Qi*hbpYn+QuEX6=kkf9;w>Qf~QWPQ1~6?l{7U0){{&H{(e6_^R%HJ!g$Y z<0ZA z8Kfi{oYxohz-jEqM~1%_1S6GFDP(Css;o$quTiDdPNa*uI?R$VwFdnDXegg31uZ@kI)xbb@Dfqg1$J@yV*wtw-% zPd$0iXNShIoiGb5U)X0sz#W3JICRxW3HVGZ=n=jO`NF5kv6Z0`l%ayJHF(5;f}f!h zRQo^r%)1_6d;9Az+_hTErY9TY6D_H^NI&cD{IO$2{B?RLvFnu~rI+3Am~sz8a^l8# z`0?YVH(H>f*cdJ`mCjgKjjF%w^Mt}7N*-M`T+s2ddAPV3E>@O|9q0xq?wg=616Gue zP7ip)@kEA%Dce_QN`PEycEQi)v*?p(B9khlGSL`0MInd~(r{%*BKdt@=t8N=$Ift? zM?+DLgxdpy*pi~Sc$3yF0Lc)R%797sik z>r3zzj~%|xCm}Bm9R`q)$c9q^oQMqeSUQt0r3x@_!h!0KP5Pn>+yR#iAtr+gzokmY zEz}N{TgJZF)P|#2+IY3u-~Be{5zwX>qhb8o(9xwsDNi5)XP*(zDJDhY6!7hAEaQoo zz_$s`G5&Pq>k*z7S_q{4#HGcwc^Qji0Kdv&Cig zbh!%Md+phdf=PeLv@;1i1;8-ML+IyCe=?cwyOZ*g%!XGN?k8aHPrAyVdwN3WU06w3Gj4v4L z&L>Lfk)Qm;$A0mnANlap7eDaS`>757?sq-$_+#(bw^#gO+qN!l0m9p!nScl{H*9-8 z{`Lo6vwsiM;a~qxpMUn(Kl^K+`Sic~m0$kU+M{p%xkuje<~O|VwfCO8=WelS#iW&J zz9 zX2PuJIJSQM@(*0eHRss$R(;BU{su7RsO8Fk@)2d)@rI^-EJq%qX{jK5 zMX@+SE9@ao5w&AhI;cADyl}+p$@+5S`*>A4kO{^Up+q zk_p88=}asV%|*!;h=nsy#MuR35irv2b~eDSIk;vbnHWciBWKb9JLk)rzpie$*H(|5 z#M2_zXx?z%&%3CVK5{{YK!n>-8~)-*L?|slA0z__=84w>l`xlY9=T9ZcHH*I&44F@ z0hEx-<5JS>py~3hE8W0_Kx>pIA#^mB%FHkl@t^1rmVWL%xFN0FLYmL!Sq1em7>?H*tNXzKgRl3^t6#mqFblkC z<>VvhZ$j)7r=~k>x;@1rC^evZjT|8M8wz-(xycSU8C%(~jFF&pBWs;>&c`wll@7{i z@H6ljq|_ah;gAXtTl9FzvN6pN5Vk8FWF$QS*WZZw#`A1H!yeXhM z4|1s9a7@dHAq|Vpw`H80;3_e#eR+hlPewe76eA)TjYK>FGwx@wsb3(69(-HMmnLTI zQ;9$_6qTz

  • F(S(gioucm()OHA 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 E0LEz`i~s-t literal 0 HcmV?d00001 diff --git a/2_services/1_metaverse/nodam/assets/frameworks/ionicons/index.html b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/ionicons/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/jquery/index.html b/2_services/1_metaverse/nodam/assets/frameworks/jquery/index.html new file mode 100644 index 0000000..b702fbc --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/jquery/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + diff --git a/2_services/1_metaverse/nodam/assets/frameworks/jquery/jquery.min.js b/2_services/1_metaverse/nodam/assets/frameworks/jquery/jquery.min.js new file mode 100644 index 0000000..4024b66 --- /dev/null +++ b/2_services/1_metaverse/nodam/assets/frameworks/jquery/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){var b;if("object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype||{},"isPrototypeOf"))return!1;for(b in a);return void 0===b||k.call(a,b)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="
    ",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c; +}catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("