From 5907f1e84dffe2924d7b0d0f9a5d7565f549fd72 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 4 Mar 2023 16:40:30 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A8=A1=E5=9E=8B=E5=BB=BA?= =?UTF-8?q?=E7=AB=8B=EF=BC=8C=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=BAMySql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xxm_oj/db.sqlite3 | 0 xxm_oj/manage.py | 22 +++ xxm_oj/user/__init__.py | 0 .../user/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 165 bytes xxm_oj/user/__pycache__/admin.cpython-311.pyc | Bin 0 -> 492 bytes xxm_oj/user/__pycache__/apps.cpython-311.pyc | Bin 0 -> 532 bytes .../user/__pycache__/models.cpython-311.pyc | Bin 0 -> 2934 bytes xxm_oj/user/__pycache__/urls.cpython-311.pyc | Bin 0 -> 368 bytes xxm_oj/user/__pycache__/views.cpython-311.pyc | Bin 0 -> 1294 bytes xxm_oj/user/admin.py | 7 + xxm_oj/user/apps.py | 6 + xxm_oj/user/migrations/0001_initial.py | 41 +++++ xxm_oj/user/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 2388 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 176 bytes xxm_oj/user/models.py | 87 +++++++++++ xxm_oj/user/tests.py | 3 + xxm_oj/user/urls.py | 7 + xxm_oj/user/views.py | 22 +++ xxm_oj/xxm_oj/__init__.py | 0 .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 167 bytes .../__pycache__/settings.cpython-311.pyc | Bin 0 -> 2717 bytes .../xxm_oj/__pycache__/urls.cpython-311.pyc | Bin 0 -> 1142 bytes .../xxm_oj/__pycache__/wsgi.cpython-311.pyc | Bin 0 -> 687 bytes xxm_oj/xxm_oj/asgi.py | 16 ++ xxm_oj/xxm_oj/settings.py | 144 ++++++++++++++++++ xxm_oj/xxm_oj/urls.py | 22 +++ xxm_oj/xxm_oj/wsgi.py | 16 ++ 28 files changed, 393 insertions(+) create mode 100644 xxm_oj/db.sqlite3 create mode 100644 xxm_oj/manage.py create mode 100644 xxm_oj/user/__init__.py create mode 100644 xxm_oj/user/__pycache__/__init__.cpython-311.pyc create mode 100644 xxm_oj/user/__pycache__/admin.cpython-311.pyc create mode 100644 xxm_oj/user/__pycache__/apps.cpython-311.pyc create mode 100644 xxm_oj/user/__pycache__/models.cpython-311.pyc create mode 100644 xxm_oj/user/__pycache__/urls.cpython-311.pyc create mode 100644 xxm_oj/user/__pycache__/views.cpython-311.pyc create mode 100644 xxm_oj/user/admin.py create mode 100644 xxm_oj/user/apps.py create mode 100644 xxm_oj/user/migrations/0001_initial.py create mode 100644 xxm_oj/user/migrations/__init__.py create mode 100644 xxm_oj/user/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 xxm_oj/user/migrations/__pycache__/__init__.cpython-311.pyc create mode 100644 xxm_oj/user/models.py create mode 100644 xxm_oj/user/tests.py create mode 100644 xxm_oj/user/urls.py create mode 100644 xxm_oj/user/views.py create mode 100644 xxm_oj/xxm_oj/__init__.py create mode 100644 xxm_oj/xxm_oj/__pycache__/__init__.cpython-311.pyc create mode 100644 xxm_oj/xxm_oj/__pycache__/settings.cpython-311.pyc create mode 100644 xxm_oj/xxm_oj/__pycache__/urls.cpython-311.pyc create mode 100644 xxm_oj/xxm_oj/__pycache__/wsgi.cpython-311.pyc create mode 100644 xxm_oj/xxm_oj/asgi.py create mode 100644 xxm_oj/xxm_oj/settings.py create mode 100644 xxm_oj/xxm_oj/urls.py create mode 100644 xxm_oj/xxm_oj/wsgi.py diff --git a/xxm_oj/db.sqlite3 b/xxm_oj/db.sqlite3 new file mode 100644 index 0000000..e69de29 diff --git a/xxm_oj/manage.py b/xxm_oj/manage.py new file mode 100644 index 0000000..25aeba3 --- /dev/null +++ b/xxm_oj/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxm_oj.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/xxm_oj/user/__init__.py b/xxm_oj/user/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xxm_oj/user/__pycache__/__init__.cpython-311.pyc b/xxm_oj/user/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..494dd3a49ef0b70fb88462049f8b02e99520664d GIT binary patch literal 165 zcmZ3^%ge<81m7PqrGV(iAOZ#$p^VRLK*n^26oz01O-8?!3`I;p{%4TnFAHa@n9$7r2;Z2Biro18te8@uqL}#j%)HE!_;|g7%3mBd ix%nxjIjMFY5S_g*Lo{j9n98)*q_YvRNjgyk5yG(`@pg?D?rvrG0fjPMEnE( zjEe+3uC+=R2w0?YHhPj+In3^RGwi&1`&6lv0VDi0*el|PE{ZUJ$owA312AADgot>A z05g~w8jLm%mL!umfxZF2DQ8P80r(Kr%=zp{_P%)p)pyJ ImRq><3x_0fDgXcg literal 0 HcmV?d00001 diff --git a/xxm_oj/user/__pycache__/apps.cpython-311.pyc b/xxm_oj/user/__pycache__/apps.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..24076fde271142090b2b950aa014b8e939685dec GIT binary patch literal 532 zcmZuty-EW?5T3oeNX(CDia-hr%WJN(5D_6JXd$K%Ash?Kncc*M`|~ab(JF-xAU1ge zMSPi*;YzLSA`ygC&fZ-F(b?VEZ+5%QOc+-|?u$r#B+GGkFiFaZH3;efHk zRJmemT*Vw(T(}5DkVfBb^MU2|JcC~vj>m-^8b|$JJsNt)ePQ!hi;&vVb8((A*K!17 zae*;pMz+Ky#;zmF&O8+^x>jTlnT7GJn2)GUxWkY( zurzJA&**66FmFI*RciTuX!tjQ99W_>1Yr%;_-D;(dsD4CD{hUOas}lTx23CbG3!kx z3gjr$R3(WL;s&B+{vd7VFxW&>PB1)0HCG8CGuWB_-t#quROawk-Pb*qhNq}Vqg C+=a^k literal 0 HcmV?d00001 diff --git a/xxm_oj/user/__pycache__/models.cpython-311.pyc b/xxm_oj/user/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf5c14f6e326c74cf3eb964c3ee90471eb9d19b1 GIT binary patch literal 2934 zcmb_eOHUhD6ux7RUyL7vA#Ia52_fKM1)-o;Bt<9=#XwLnjd)a%Wob0{4q#{OAv1OY zs8VN<1&b_LL`s(|(lk+6uxKSVmHHFL(JZW4Rq84`BGOG(J!i&tz|bU%-oYRD@!fOJ zJ+GNxL!mYT?c0A`^a)4E-#BPAPrY-n0iCCW63WP=$YdCXxX2`-u1AErCD(H|A+O-) zw2a$cV`0rBF$K0U-@@|PEHAKpA7Oc^e~u&qZ%{~rvAjivO0t$~$i)9leQdLUxo$*i>gm^6ff+nf+>#Nd6a8_Eb$fDYXGnQwR7W1VIZmzN_sa^J9 zCgHXGf>08Rk|0=Zf&d3sWb6k8;eJJw>np+8@yUhh(OF?(ZhRI5rP5O~7B{zWXM9$$ z2QSG1>i2$VY&eUDY1!P0RLZ85T%{>TLDtmx#qy?x{5Ba z!3!Pj9Dv?@Y8@B#=~}QuAFo9(=(q7v!wvos8#SD8&;!=`U?Ufi+#ei78S2_`KX-vM z;pemrxak;&ZQ*#2aXdTT7LM;TIDVTGXq-)5ppUObPFsr{zr+=SjU79I7Iw&HqfP7v z^4gw*1zt5`hGZg?dqgrk4Fa~)5MY#sAzC69i|%@J6E@B#Tvl6AToYuev|L`XxK%Y@ z6xDU%p0u8DsU1MEyp>Y^enpyiSs$~diY&vvpjas@LP>cjh?J^d0`*NNKx3PaN=srz zE+-fj!#CGd3ofPNTJ!kXZPmFOJ*kFw%SCDYM~7A?nDt} zH!NAKCdo@09@M2q04;xB1LZISLU`qY#_%jGYV80zsYN;-|MW}Wvw_!rg|RWu#RC+O2hQ5YueG!^w6ZeCkh*z`kLKCuOmZ-f9SZvXjt30 zH=*-6#yw(k+-bKZ*8?&~oJ+8WE`hdIPrON}VO~L1WN9PXxQOE|oVy5nwbKBNdt85Z zyA*Ym<@@mlvrNpu{pD#*|ATFm$Fd>v-#_VnJecXKs`mpx)FL1LI`$|!q`(WylgP4#l~0>|8szhr z@YqW)QU*U*WeL6(0!m4M&jqP0sTf}K>KA}eX|W2=B%&u~Pw4xS zG_L^IfozASDD4k`Ls`LH*c>vs3)}3j_qVXY zC97Q0$~z;nuiZH1%t;=O;w z`4GFIj)FLRiD|C@_T3D_)JV)Y`nTWaX1eytaoBwD7H8jmSo(@*FiB5Fu++#~d+ps} YMm)y!?UUoM6@SwI7U$ocuxK0OU&v*TzyJUM literal 0 HcmV?d00001 diff --git a/xxm_oj/user/__pycache__/urls.cpython-311.pyc b/xxm_oj/user/__pycache__/urls.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90e9ec4734b9de6e999fbcfe097859603ee083b8 GIT binary patch literal 368 zcmZ3^%ge<81aJN@rBndv#~=<2utFK1-GGeg3@HpLj5!Rsj8Tk?3@J=0%sEWC%u&pY z3``8Ej43Rs%vmfjjVUZ^SeG#~Fsue*2uNp)VohNSX3%7R2@=p`yv0(GSd#IQ5yD|D z%SQ(Ocx?G{53$XP{fAT~Ep7-&pM zYEfSCN`}usA%v@#i>QbG07RJc`+{e$)&lec_qa$&iN^+F%c2IF%=cL@%dRX zr9ee7AanH!Dt~d<+ub_56-Wy4 zz@hQv0Rtu`_JD}NgC^XJ@#=BA+1O?i6BARFTO;wp$(hGyva;V-8CV91LQx0R$jWNsyw#6h*KlX-Uyx8e>|pCaozZ%wWu{fv`=m zg@B*kCvrb!*bo#2h%j=FD@yt9~0mRhYkFxymT=^ERrw3!^Pm8~&{5NL?9{}=V! zCk^YJ+o36=DTA9kC(fs!;i|&)yeuzDNHE$O+_{J(F2qsFPa%?N#)-|(=O4-+pZ&-^ zEkAjAj3{rt|F!qZ?=WmBsKg`zkqaAi6e@@m&S0hc2^dji!?qAlDi9eAK3G<&=OXg3 zBL^|0Eq=ye5qy||r^1H4njSt%CSCK9ad;(om7m7c13n^5gt ze{8_*SsyKOJsQ{Zu3hDN3fzd!jTE^tjT?H@MJG%1inxjv3^zAI^fg7K@ zw7@+T&)JARyIcWal?qvY1Hj`2dt~{_dGjp=E}(M()fp%^daa$ClZDoPy|rJp_aES! zfk{7WoD&lBVpJNCV-iv#8AV3qeKs65I)*<3)dt`m;?gDMYUipIdIJ!7ED?vzp?wsG tGf8+2bzqmg$nq366`G=`61bo?&JyTW8)pf4)W%t9ZlNw$z-d$c*S{-gBj*4B literal 0 HcmV?d00001 diff --git a/xxm_oj/user/admin.py b/xxm_oj/user/admin.py new file mode 100644 index 0000000..bbc920b --- /dev/null +++ b/xxm_oj/user/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import User +from .models import UserProfile + +# Register your models here. +admin.site.register(User) +admin.site.register(UserProfile) \ No newline at end of file diff --git a/xxm_oj/user/apps.py b/xxm_oj/user/apps.py new file mode 100644 index 0000000..36cce4c --- /dev/null +++ b/xxm_oj/user/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class UserConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'user' diff --git a/xxm_oj/user/migrations/0001_initial.py b/xxm_oj/user/migrations/0001_initial.py new file mode 100644 index 0000000..f71e358 --- /dev/null +++ b/xxm_oj/user/migrations/0001_initial.py @@ -0,0 +1,41 @@ +# Generated by Django 4.1.7 on 2023-03-04 15:37 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('user_id', models.CharField(max_length=64, primary_key=True, serialize=False)), + ('user_name', models.CharField(max_length=64, unique=True)), + ('user_password', models.CharField(max_length=64)), + ('user_password_confirm', models.CharField(max_length=64)), + ('create_time', models.DateTimeField(auto_now_add=True, null=True)), + ('user_type', models.CharField(default='Regular User', max_length=20)), + ('is_active', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='UserProfile', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_mail', models.CharField(max_length=64, null=True)), + ('real_name', models.TextField(null=True)), + ('blog', models.URLField(null=True)), + ('mood', models.TextField(null=True)), + ('github', models.TextField(null=True)), + ('school', models.TextField(null=True)), + ('major', models.TextField(null=True)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='user.user')), + ], + ), + ] diff --git a/xxm_oj/user/migrations/__init__.py b/xxm_oj/user/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xxm_oj/user/migrations/__pycache__/0001_initial.cpython-311.pyc b/xxm_oj/user/migrations/__pycache__/0001_initial.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..497c5ade99187373827135c7e0b0951725d4df2b GIT binary patch literal 2388 zcma)8O>omj6qXcOwj4W=^NW*Iaose74P^L9Qb;Kfl0uRKZ9~$b9yc1DM&IT z96CAl&?C3zz=2ar2Oo0Gp$Co}S2H?f_QXt2+{{2PoVqL7AwL}^E9?2a-S7SG?z8`l z$D<4xSN`R|Q-NXrp+a+n8qB+C!u-Ji2CzC)VRLMS%W*7~IlU#vbIeT!wEV^Z9pQ!^D$ymi^Rm%;zzu-9kSF8q*~$#s>4V5yG890OPz;fDuruZ2la@~{yKGo z9^Xpq{)j*b^wv&n@gzU;27}Zfc_=DU(OTa@>jc&Bqhd`xf*Cj*75L1@#6O9Vk6~x< z7?{*CFrOa-llC!f&6r_(S!(j-@E+GZrA)b_IS0O|4IQphNj$tSB`((qz9ctd7>l=? zS78D3i#D`yxJsy^fj8HP(Hof-a$D3jMTbVoS;4KVmR3=%b>%)>$07l0s;)hTSoD<) zwE{DoMNbJ9s)qKU3USOjTOs39CvtB$D{ z<|9P~0P{vw*BhRk^;P&dHV;cxUA0n+B#<{<#4FJW1GubKbtmv6YPO;l9ql0`o_hiW zPs7B*vIccv<5sHtgJmvjI>ej?FgH7$;Tx`laDYWmtVNF*jy;4{!L*^`8wt{`sG8nL z+v=nskz}F!2;$YB;S0K1!hFRv0TxP{vr;W!!7i?trjA1uwQO3LrzLspTO6S*$wf2` zg)}GVkjNbKPNoY-6yL0(;HaXI&Q;YR;bV&OpsMOLBqD`1LvzT!;240b&;ZaVYS6Z5 zH^i+|et~b(o@defhQ+BB)w)4zf#cJp_6wx+ff&0^qJyf@l(f<$*^WRG7vP!`u#v_2 zTLBmU-hc}xA%Q4>vTBq}%z*-q_-T-ai^Efscc&(&zr|5=6*ijiU(7oa3iILS)I^?c zhn+93KqEhG7ONF#ICg%D#GAi&?{P-@;y&3mbNB;DQTXZu$) zPaG|}@}eg%BIzf8?HrBa+|Ce^ue$P8PrizzYxVX>S6e;QDn{QjguJJue&SdiiR==ElI_*X+Hry#>Zy|&wHd%ZT2oPBOddZS35apf6LoJtkmP+xX)*z3z~^Qdpk?Hlv@#*j4b`#3{=oY@in7QKrz-o+oi zi$9|!4JFHNvg{?xNV;F|jMBQqX7r2;Z2Biro18te8@uqL|#w^rFO)%>2CKnE3e2 tyv&mLc)fzkUmP~M`6;D2sdh!IKr=zM7V`s%56p~=j2{?aL=iJk3;=L{EVBRr literal 0 HcmV?d00001 diff --git a/xxm_oj/user/models.py b/xxm_oj/user/models.py new file mode 100644 index 0000000..0fa4360 --- /dev/null +++ b/xxm_oj/user/models.py @@ -0,0 +1,87 @@ +from django.db import models + +# Create your models here. + + +class UserType(object): + REGULAR_USER = "Regular User" + ADMIN = "Admin" + SUPER_ADMIN = "Super Admin" + + +# class ProblemPermission(object): +# NONE = "None" +# OWN = "Own" +# ALL = "All" + + +class User(models.Model): + user_id = models.CharField(max_length=64, primary_key=True) + user_name = models.CharField(max_length=64, unique=True) + user_password = models.CharField(max_length=64, null=False) + user_password_confirm = models.CharField(max_length=64, null=False) + create_time = models.DateTimeField(auto_now_add=True, null=True) + user_type = models.CharField(max_length=20,default=UserType.REGULAR_USER) + is_active = models.BooleanField(default=True) + + def is_admin(self): + return self.admin_type == UserType.ADMIN + + def is_super_admin(self): + return self.admin_type == UserType.SUPER_ADMIN + + def is_admin_role(self): + return self.admin_type in [UserType.ADMIN, UserType.SUPER_ADMIN] + + +class UserProfile(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + # acm_problems_status examples: + # { + # "problems": { + # "1": { + # "status": JudgeStatus.ACCEPTED, + # "_id": "1000" + # } + # }, + # "contest_problems": { + # "1": { + # "status": JudgeStatus.ACCEPTED, + # "_id": "1000" + # } + # } + # } +# acm_problems_status = JSONField(default=dict) +# # like acm_problems_status, merely add "score" field +# oi_problems_status = JSONField(default=dict) + + user_mail = models.CharField(max_length=64, null=True) + real_name = models.TextField(null=True) +# avatar = models.TextField(default=f"{settings.AVATAR_URI_PREFIX}/default.png") + blog = models.URLField(null=True) + mood = models.TextField(null=True) + github = models.TextField(null=True) + school = models.TextField(null=True) + major = models.TextField(null=True) +# # for ACM +# accepted_number = models.IntegerField(default=0) +# # for OI +# total_score = models.BigIntegerField(default=0) +# submission_number = models.IntegerField(default=0) + +# def add_accepted_problem_number(self): +# self.accepted_number = models.F("accepted_number") + 1 +# self.save() + +# def add_submission_number(self): +# self.submission_number = models.F("submission_number") + 1 +# self.save() + +# # 计算总分时, 应先减掉上次该题所得分数, 然后再加上本次所得分数 +# def add_score(self, this_time_score, last_time_score=None): +# last_time_score = last_time_score or 0 +# self.total_score = models.F("total_score") - last_time_score + this_time_score +# self.save() + +# class Meta: +# db_table = "user_profile" diff --git a/xxm_oj/user/tests.py b/xxm_oj/user/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/xxm_oj/user/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/xxm_oj/user/urls.py b/xxm_oj/user/urls.py new file mode 100644 index 0000000..efb6c79 --- /dev/null +++ b/xxm_oj/user/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + path('login',views.login , name='login'), +] \ No newline at end of file diff --git a/xxm_oj/user/views.py b/xxm_oj/user/views.py new file mode 100644 index 0000000..81c7ad5 --- /dev/null +++ b/xxm_oj/user/views.py @@ -0,0 +1,22 @@ +from django.shortcuts import render +from django.http import HttpResponse +from .models import User + +# Create your views here. + + +def login(request): + if request.method == 'POST': + # 从前端数据中拿去表中字段 + user_name = request.POST.get('user_name') + user_password = request.POST.get('user_password') + user_password_confirm = request.POST.get('user_password_confirm') + + # 根据用户名查询数据库,并获得用户 + user_obj = User.objects.filter(user_name=user_name).first() + if user_obj.user_name == user_name and user_obj.user_password == user_password and user_obj.user_password_confirm == user_password_confirm: + return HttpResponse("登录成功") + else: + return HttpResponse("登录失败") + else: + return HttpResponse("登录失败") diff --git a/xxm_oj/xxm_oj/__init__.py b/xxm_oj/xxm_oj/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xxm_oj/xxm_oj/__pycache__/__init__.cpython-311.pyc b/xxm_oj/xxm_oj/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c79bcacd97639d0176438807036a25d57cdfa0c6 GIT binary patch literal 167 zcmZ3^%ge<81T~MCQb6=$5CH>>P{wCAAY(d13PUi1CZpdm0R%%1d=`Qcx{{0U*CBFy2K!I?2N#-SJ@F|zaxhtPNMH+lXX zpKGcYD#T){~-i$Q|pIFx0+<|v0( zzKZubHHWim9_Mf#7jO}Nmv9MR#^tY)lv4|M6<-0(RlF9_^@v`jTtBWB@ip}lzOI%a z=4E_CE#sT&D*lOj1^-k=o4kG-wv?%#=vLq68F5`|^%>u@9sb1&Q?pO_p<|zrt}A3R zd&DA+?h?!&pYiYG$fTlUlUh7;b;q4*zR!;sIN_&0?+IJNHdyb1OVf4;Pc86n>Mpe{ z9$t4qAs#izM-ZN52Ch3~_p4QGcbPDWG0UK9n^j^}!C}?4hqTM8vwW))_wIo3y^&$? z24ya9_b&FMTNnZn>hRBXV?@~h6U!mJxj_F6k93ps;|IDs@OGvsP>Yf7$RQQl!^}N> zcxG*z75CZCx2@lN_I!gr$M(kHS>@!#fPRcmoX>FA`PswD2i7gGx1nq%z4FA3(6ues zp~pf5s&{#Dbp#QwFD!;8#B$xUAz|Lyf{+o$0OmIZCJ6LCSX^7QaN%IO;c+mpJYvKV z^x=>Rhrrcrt4I5gZDnd>Qj869syjr8c2C_iK@MR6X8*O!ySEr(nv^hSFHhFytTx{a z0_ShqmQag^|Dnp9o=^kwn3B^u)$N5`bbxd|4-w{oChbP$IcK=Ii5YU$r)gQi2CK^wW=?Wu0)EUMfP(6@LF zf%fh$D8B~rEe12$X53Hih_%n9R^5-+8y(qCi3bN-#3kDYN~7J9y|pP`r>sxIf(4AD z1N4)a^z@P8dh65B`1k@o^Nc++{KUl8k2|*Qdg-l?w}m_K+w$Xg@80>ukB{8mr<+MX zA+`1zEy<6!#C@QLvefZY2cj%LX?GyAM{QYwJE7fCyw$q2D;_qLO6`%@5o?OnsmPMz z6yVDT^pUD`R^^K)Xe*?uC`weUP;Ki_D{3M|0_ z6rJp6_8awjQ+gtHBtP3}w-xQM)2y{yyM9`c_79q(BFTR7iM-bc^_z{F7}lqsu8WEo zhL!zw@lbiB&FV&bEH)b;Y(rV+nqq73P~4NWTDvZR!^Xa(sck5^6cn4**!r~PCqhn9 zA#(*h*TU$2XK!|zwN#;G8W@*QrR0mXD~y!@(I8s~ycsuT;* zjEwU^Ih79=rUbOhsCaXn4N|Bqap%R-d3pU+mJiVKd-*xClq_e0bapurppY!(bFpzc z;8D5q5*33RXgPmg`slo{c3xOLzkKz)a4lr`ji8V!f=Ni0GLgw0lrFq1s=-nW+@zw( z!TjWl`AKIoSQrm5yCbU!!i$9R9#e#ZJ3uRf@rkUB@ESXH0Nwh5< zdi2;sLH~k^_|LS^L&?>Xw}svcg5P8lSVf_e%w+QAoA#zN56e(7Yjg3u53 zQnp$#x%>!|&xoKlA{x;{jp=P&Q}aq#VMg0vX4}+|j;KKlst>Crz_3I>Cptpkp^sah zX~Jld>WKzlppV<1d40WIC$+c8u6rC7@9nWJAL6YyFL8@Uy`Y~8F9~>LS?>lE@1!D( zy(FO`k~=sIWP$}x6DrjLi4%_B2lRt<@CFx{aY1nq^|)X;1dc=MNs1+?)8Y`!7bDksqcci27hc zUQbE$VKYmAHgjVzP=W1Hxpc|Ky~4`o*sk$*ILh#nWRbg^n{sWoyCLtpU|?CPp#nK> z!?vxT>X)>&%=8EgB3sW4<#<*rvJa|x+&wT;Nrihbr5^d>*Y;Fa>vrMS>2|Z(f-Q(l zM6fI1kfCgPLV_?LB1{!FWRTFzP{Ok5iOv3oF5xq}de~}qwxEja_yZbs*14ZD8YQyR z;)Hg#w_kO}N2GixASd3xsy||!q#=DGZUBrrY%+miRM9kTq|a)`2&v%?((axjJb7QB zd#C@pM^$7_9j<@6b@br4dHnRum_Ik>FN`{bZXUt)<@VX!!uj07nX!0oERM{|4gGLh JU1A0b{|1>ERY3p% literal 0 HcmV?d00001 diff --git a/xxm_oj/xxm_oj/__pycache__/wsgi.cpython-311.pyc b/xxm_oj/xxm_oj/__pycache__/wsgi.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f7319d2cf461193c090d66bbbfbc9afd428d276 GIT binary patch literal 687 zcmY*XL2KJE6n?VPW^>nUjJ0P`dI@ay3T1~f22In2j5R%^Wg!?G&w5E5Y|B_mnwA}U z*k2gC?$j~*XVOtN@F{Gk-2%P!G`U_Ndy?Lho}Rw%lhD`IRRffL_@%K=1mJhJm|NlB zhatCvxoWRO@UJSQBRbMY0+_%0>?=; zF49N24%1We%?vfs6;E2kXyhk6N)2_8Vb>i7GF@39{029fpxYOFJNB`_MA%**BfHAI zVJ2GGdz_)&Y8}|QfO*I$%=q;7-pl-nUnM04qy7$vmU1(l5Hiz>q%ecbJqBW&-_P0< wwkH4gDQF*!pRo2F)+X!b