From 80c2c5c269aa3da1d27af119acd0a94c00e9b550 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Mon, 23 Sep 2024 21:31:17 +0700
Subject: [PATCH 01/12] update
---
frontend/templates/firebase-messaging-sw.js | 29 +-
frontend/templates/layout.html | 26 +-
frontend/templates/profil/profile.html | 22 +-
frontend/templates/{ => splash}/splash.html | 0
frontend/templates/toko/listtransaksi.html | 12 +-
frontend/templatetags/translater.py | 6 +
frontend/urls.py | 32 +-
.../{ => cart}/add_to_cart_append_view.py | 3 +-
frontend/views/{ => cart}/add_to_cart_view.py | 3 +-
frontend/views/{ => cart}/approve_view.py | 13 +
frontend/views/{ => cart}/cart_json_view.py | 0
.../views/{ => cart}/toko_transaksi_view.py | 33 +-
frontend/views/profile/profile_view.py | 9 +-
frontend/views/splash.py | 10 -
frontend/views/splash/splash.py | 12 +
.../{ => toko}/alamat_toko_delete_view.py | 3 +-
frontend/views/{ => toko}/alamat_toko_view.py | 3 +-
.../{ => toko}/alamt_toko_tambah_view.py | 3 +-
.../views/{ => toko}/archive_barang_view.py | 10 +
frontend/views/{ => toko}/jual_view.py | 13 +-
frontend/views/withdrawltokojson_view.py | 21 +-
jsvite/js/main.js | 3 +
jsvite/js/tawkto.js | 11 +
package-lock.json | 9535 +++++++++++++++++
package.json | 18 +-
pnpm-lock.yaml | 1530 +++
profiles/admin.py | 25 +
pyproject.toml | 8 +-
requirements.txt | 51 +-
static/buildvite/.vite/manifest.json | 8 +
static/buildvite/assets/main-CKgfggAW.js | 1 +
static/htmx.min.js | 1 +
templates/admin/actions.html | 29 +
templates/admin/app_index.html | 15 +
templates/admin/auth/user/add_form.html | 10 +
.../admin/auth/user/change_password.html | 112 +
templates/admin/base.html | 386 +
templates/admin/base_site.html | 1 +
templates/admin/change_form.html | 128 +
templates/admin/change_form_object_tools.html | 10 +
templates/admin/change_list.html | 122 +
templates/admin/change_list_object_tools.html | 11 +
templates/admin/change_list_results.html | 48 +
templates/admin/date_hierarchy.html | 23 +
templates/admin/delete_confirmation.html | 79 +
.../admin/delete_selected_confirmation.html | 83 +
templates/admin/edit_inline/stacked.html | 58 +
templates/admin/edit_inline/tabular.html | 94 +
templates/admin/filer/breadcrumbs.html | 30 +
templates/admin/filer/change_form.html | 33 +
.../delete_selected_files_confirmation.html | 75 +
templates/admin/filer/file/change_form.html | 36 +
templates/admin/filer/folder/change_form.html | 33 +
.../admin/filer/folder/directory_listing.html | 258 +
templates/admin/filer/image/change_form.html | 36 +
templates/admin/filer/tools/detail_info.html | 55 +
templates/admin/filter.html | 15 +
templates/admin/import_export/base.html | 19 +
.../admin/import_export/change_list.html | 13 +
.../import_export/change_list_export.html | 6 +
.../change_list_export_item.html | 8 +
.../import_export/change_list_import.html | 6 +
.../change_list_import_export.html | 9 +
.../change_list_import_item.html | 8 +
templates/admin/import_export/export.html | 74 +
templates/admin/import_export/import.html | 272 +
templates/admin/includes/fieldset.html | 59 +
.../admin/includes/object_delete_summary.html | 12 +
templates/admin/index.html | 133 +
templates/admin/login.html | 76 +
templates/admin/mptt_filter.html | 16 +
templates/admin/object_history.html | 72 +
templates/admin/pagination.html | 30 +
templates/admin/popup_response.html | 17 +
templates/admin/search_form.html | 42 +
templates/admin/solo/change_form.html | 18 +
templates/admin/solo/object_history.html | 11 +
templates/admin/submit_line.html | 42 +
uv.lock | 243 +-
vite.config.js | 12 +
webpack-stats.json | 34 -
webpack.config.js | 47 -
82 files changed, 14339 insertions(+), 174 deletions(-)
rename frontend/templates/{ => splash}/splash.html (100%)
rename frontend/views/{ => cart}/add_to_cart_append_view.py (94%)
rename frontend/views/{ => cart}/add_to_cart_view.py (98%)
rename frontend/views/{ => cart}/approve_view.py (58%)
rename frontend/views/{ => cart}/cart_json_view.py (100%)
rename frontend/views/{ => cart}/toko_transaksi_view.py (89%)
delete mode 100644 frontend/views/splash.py
create mode 100644 frontend/views/splash/splash.py
rename frontend/views/{ => toko}/alamat_toko_delete_view.py (91%)
rename frontend/views/{ => toko}/alamat_toko_view.py (97%)
rename frontend/views/{ => toko}/alamt_toko_tambah_view.py (96%)
rename frontend/views/{ => toko}/archive_barang_view.py (64%)
rename frontend/views/{ => toko}/jual_view.py (90%)
create mode 100644 jsvite/js/main.js
create mode 100644 jsvite/js/tawkto.js
create mode 100644 package-lock.json
create mode 100644 pnpm-lock.yaml
create mode 100644 static/buildvite/.vite/manifest.json
create mode 100644 static/buildvite/assets/main-CKgfggAW.js
create mode 100644 static/htmx.min.js
create mode 100644 templates/admin/actions.html
create mode 100644 templates/admin/app_index.html
create mode 100644 templates/admin/auth/user/add_form.html
create mode 100644 templates/admin/auth/user/change_password.html
create mode 100644 templates/admin/base.html
create mode 100644 templates/admin/base_site.html
create mode 100644 templates/admin/change_form.html
create mode 100644 templates/admin/change_form_object_tools.html
create mode 100644 templates/admin/change_list.html
create mode 100644 templates/admin/change_list_object_tools.html
create mode 100644 templates/admin/change_list_results.html
create mode 100644 templates/admin/date_hierarchy.html
create mode 100644 templates/admin/delete_confirmation.html
create mode 100644 templates/admin/delete_selected_confirmation.html
create mode 100644 templates/admin/edit_inline/stacked.html
create mode 100644 templates/admin/edit_inline/tabular.html
create mode 100644 templates/admin/filer/breadcrumbs.html
create mode 100644 templates/admin/filer/change_form.html
create mode 100644 templates/admin/filer/delete_selected_files_confirmation.html
create mode 100644 templates/admin/filer/file/change_form.html
create mode 100644 templates/admin/filer/folder/change_form.html
create mode 100644 templates/admin/filer/folder/directory_listing.html
create mode 100644 templates/admin/filer/image/change_form.html
create mode 100644 templates/admin/filer/tools/detail_info.html
create mode 100644 templates/admin/filter.html
create mode 100644 templates/admin/import_export/base.html
create mode 100644 templates/admin/import_export/change_list.html
create mode 100644 templates/admin/import_export/change_list_export.html
create mode 100644 templates/admin/import_export/change_list_export_item.html
create mode 100644 templates/admin/import_export/change_list_import.html
create mode 100644 templates/admin/import_export/change_list_import_export.html
create mode 100644 templates/admin/import_export/change_list_import_item.html
create mode 100644 templates/admin/import_export/export.html
create mode 100644 templates/admin/import_export/import.html
create mode 100644 templates/admin/includes/fieldset.html
create mode 100644 templates/admin/includes/object_delete_summary.html
create mode 100644 templates/admin/index.html
create mode 100644 templates/admin/login.html
create mode 100644 templates/admin/mptt_filter.html
create mode 100644 templates/admin/object_history.html
create mode 100644 templates/admin/pagination.html
create mode 100644 templates/admin/popup_response.html
create mode 100644 templates/admin/search_form.html
create mode 100644 templates/admin/solo/change_form.html
create mode 100644 templates/admin/solo/object_history.html
create mode 100644 templates/admin/submit_line.html
create mode 100644 vite.config.js
delete mode 100644 webpack-stats.json
delete mode 100644 webpack.config.js
diff --git a/frontend/templates/firebase-messaging-sw.js b/frontend/templates/firebase-messaging-sw.js
index c08fdee..a2fd522 100644
--- a/frontend/templates/firebase-messaging-sw.js
+++ b/frontend/templates/firebase-messaging-sw.js
@@ -1,2 +1,27 @@
-/*! For license information please see other.js.LICENSE.txt */
-(()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();const t=function(e){const t=[];let n=0;for(let i=0;i>6|192,t[n++]=63&r|128):55296==(64512&r)&&i+1>18|240,t[n++]=r>>12&63|128,t[n++]=r>>6&63|128,t[n++]=63&r|128):(t[n++]=r>>12|224,t[n++]=r>>6&63|128,t[n++]=63&r|128)}return t},n={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();const n=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,i=[];for(let t=0;t>2,u=(3&r)<<4|o>>4;let d=(15&o)<<2|c>>6,p=63&c;s||(p=64,a||(d=64)),i.push(n[l],n[u],n[d],n[p])}return i.join("")},encodeString(e,n){return this.HAS_NATIVE_SUPPORT&&!n?btoa(e):this.encodeByteArray(t(e),n)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let n=0,i=0;for(;n191&&r<224){const a=e[n++];t[i++]=String.fromCharCode((31&r)<<6|63&a)}else if(r>239&&r<365){const a=((7&r)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536;t[i++]=String.fromCharCode(55296+(a>>10)),t[i++]=String.fromCharCode(56320+(1023&a))}else{const a=e[n++],o=e[n++];t[i++]=String.fromCharCode((15&r)<<12|(63&a)<<6|63&o)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();const n=t?this.charToByteMapWebSafe_:this.charToByteMap_,r=[];for(let t=0;t>4;if(r.push(l),64!==s){const e=o<<4&240|s>>2;if(r.push(e),64!==c){const e=s<<6&192|c;r.push(e)}}}return r},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};class i extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}const r=function(e){return function(e){const i=t(e);return n.encodeByteArray(i,!0)}(e).replace(/\./g,"")},a=()=>{try{return function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==e.g)return e.g;throw new Error("Unable to locate global object.")}().__FIREBASE_DEFAULTS__||(()=>{if("undefined"==typeof process||void 0===process.env)return;const e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0})()||(()=>{if("undefined"==typeof document)return;let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}const t=e&&function(e){try{return n.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null}(e[1]);return t&&JSON.parse(t)})()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}},o=()=>{var e;return null===(e=a())||void 0===e?void 0:e.config};class s{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}wrapCallback(e){return(t,n)=>{t?this.reject(t):this.resolve(n),"function"==typeof e&&(this.promise.catch((()=>{})),1===e.length?e(t):e(t,n))}}}function c(){try{return"object"==typeof indexedDB}catch(e){return!1}}function l(){return new Promise(((e,t)=>{try{let n=!0;const i="validate-browser-context-for-indexeddb-analytics-module",r=self.indexedDB.open(i);r.onsuccess=()=>{r.result.close(),n||self.indexedDB.deleteDatabase(i),e(!0)},r.onupgradeneeded=()=>{n=!1},r.onerror=()=>{var e;t((null===(e=r.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}}))}class u extends Error{constructor(e,t,n){super(t),this.code=e,this.customData=n,this.name="FirebaseError",Object.setPrototypeOf(this,u.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,d.prototype.create)}}class d{constructor(e,t,n){this.service=e,this.serviceName=t,this.errors=n}create(e,...t){const n=t[0]||{},i=`${this.service}/${e}`,r=this.errors[e],a=r?function(e,t){return e.replace(p,((e,n)=>{const i=t[n];return null!=i?String(i):`<${n}?>`}))}(r,n):"Error",o=`${this.serviceName}: ${a} (${i}).`;return new u(i,o,n)}}const p=/\{\$([^}]+)}/g;function f(e,t){if(e===t)return!0;const n=Object.keys(e),i=Object.keys(t);for(const r of n){if(!i.includes(r))return!1;const n=e[r],a=t[r];if(h(n)&&h(a)){if(!f(n,a))return!1}else if(n!==a)return!1}for(const e of i)if(!n.includes(e))return!1;return!0}function h(e){return null!==e&&"object"==typeof e}function g(e){return e&&e._delegate?e._delegate:e}class m{constructor(e,t,n){this.name=e,this.instanceFactory=t,this.type=n,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}const b="[DEFAULT]";class w{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const e=new s;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{const n=this.getOrInitializeService({instanceIdentifier:t});n&&e.resolve(n)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;const n=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),i=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(!this.isInitialized(n)&&!this.shouldAutoInitialize()){if(i)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:n})}catch(e){if(i)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if(function(e){return"EAGER"===e.instantiationMode}(e))try{this.getOrInitializeService({instanceIdentifier:b})}catch(e){}for(const[e,t]of this.instancesDeferred.entries()){const n=this.normalizeInstanceIdentifier(e);try{const e=this.getOrInitializeService({instanceIdentifier:n});t.resolve(e)}catch(e){}}}}clearInstance(e=b){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter((e=>"INTERNAL"in e)).map((e=>e.INTERNAL.delete())),...e.filter((e=>"_delete"in e)).map((e=>e._delete()))])}isComponentSet(){return null!=this.component}isInitialized(e=b){return this.instances.has(e)}getOptions(e=b){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:t={}}=e,n=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(n))throw Error(`${this.name}(${n}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const i=this.getOrInitializeService({instanceIdentifier:n,options:t});for(const[e,t]of this.instancesDeferred.entries())n===this.normalizeInstanceIdentifier(e)&&t.resolve(i);return i}onInit(e,t){var n;const i=this.normalizeInstanceIdentifier(t),r=null!==(n=this.onInitCallbacks.get(i))&&void 0!==n?n:new Set;r.add(e),this.onInitCallbacks.set(i,r);const a=this.instances.get(i);return a&&e(a,i),()=>{r.delete(e)}}invokeOnInitCallbacks(e,t){const n=this.onInitCallbacks.get(t);if(n)for(const i of n)try{i(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let n=this.instances.get(e);if(!n&&this.component&&(n=this.component.instanceFactory(this.container,{instanceIdentifier:(i=e,i===b?void 0:i),options:t}),this.instances.set(e,n),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(n,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,n)}catch(e){}var i;return n||null}normalizeInstanceIdentifier(e=b){return this.component?this.component.multipleInstances?e:b:e}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class y{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const t=new w(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}const v=[];var I;!function(e){e[e.DEBUG=0]="DEBUG",e[e.VERBOSE=1]="VERBOSE",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.SILENT=5]="SILENT"}(I||(I={}));const S={debug:I.DEBUG,verbose:I.VERBOSE,info:I.INFO,warn:I.WARN,error:I.ERROR,silent:I.SILENT},_=I.INFO,E={[I.DEBUG]:"log",[I.VERBOSE]:"log",[I.INFO]:"info",[I.WARN]:"warn",[I.ERROR]:"error"},C=(e,t,...n)=>{if(tt.some((t=>e instanceof t));let k,T;const A=new WeakMap,O=new WeakMap,M=new WeakMap,N=new WeakMap,B=new WeakMap;let j={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return O.get(e);if("objectStoreNames"===t)return e.objectStoreNames||M.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return L(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function P(e){return"function"==typeof e?(t=e)!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(T||(T=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply($(this),e),L(A.get(this))}:function(...e){return L(t.apply($(this),e))}:function(e,...n){const i=t.call($(this),e,...n);return M.set(i,e.sort?e.sort():[e]),L(i)}:(e instanceof IDBTransaction&&function(e){if(O.has(e))return;const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("complete",r),e.removeEventListener("error",a),e.removeEventListener("abort",a)},r=()=>{t(),i()},a=()=>{n(e.error||new DOMException("AbortError","AbortError")),i()};e.addEventListener("complete",r),e.addEventListener("error",a),e.addEventListener("abort",a)}));O.set(e,t)}(e),D(e,k||(k=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(e,j):e);var t}function L(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("success",r),e.removeEventListener("error",a)},r=()=>{t(L(e.result)),i()},a=()=>{n(e.error),i()};e.addEventListener("success",r),e.addEventListener("error",a)}));return t.then((t=>{t instanceof IDBCursor&&A.set(t,e)})).catch((()=>{})),B.set(t,e),t}(e);if(N.has(e))return N.get(e);const t=P(e);return t!==e&&(N.set(e,t),B.set(t,e)),t}const $=e=>B.get(e);function H(e,t,{blocked:n,upgrade:i,blocking:r,terminated:a}={}){const o=indexedDB.open(e,t),s=L(o);return i&&o.addEventListener("upgradeneeded",(e=>{i(L(o.result),e.oldVersion,e.newVersion,L(o.transaction),e)})),n&&o.addEventListener("blocked",(e=>n(e.oldVersion,e.newVersion,e))),s.then((e=>{a&&e.addEventListener("close",(()=>a())),r&&e.addEventListener("versionchange",(e=>r(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),s}function R(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",(e=>t(e.oldVersion,e))),L(n).then((()=>{}))}const F=["get","getKey","getAll","getAllKeys","count"],x=["put","add","delete","clear"],V=new Map;function K(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(V.get(t))return V.get(t);const n=t.replace(/FromIndex$/,""),i=t!==n,r=x.includes(n);if(!(n in(i?IDBIndex:IDBObjectStore).prototype)||!r&&!F.includes(n))return;const a=async function(e,...t){const a=this.transaction(e,r?"readwrite":"readonly");let o=a.store;return i&&(o=o.index(t.shift())),(await Promise.all([o[n](...t),r&&a.done]))[0]};return V.set(t,a),a}var U;U=j,j={...U,get:(e,t,n)=>K(e,t)||U.get(e,t,n),has:(e,t)=>!!K(e,t)||U.has(e,t)};class W{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map((e=>{if(function(e){const t=e.getComponent();return"VERSION"===(null==t?void 0:t.type)}(e)){const t=e.getImmediate();return`${t.library}/${t.version}`}return null})).filter((e=>e)).join(" ")}}const z="@firebase/app",q="0.10.10",G=new class{constructor(e){this.name=e,this._logLevel=_,this._logHandler=C,this._userLogHandler=null,v.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in I))throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel="string"==typeof e?S[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if("function"!=typeof e)throw new TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,I.DEBUG,...e),this._logHandler(this,I.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,I.VERBOSE,...e),this._logHandler(this,I.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,I.INFO,...e),this._logHandler(this,I.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,I.WARN,...e),this._logHandler(this,I.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,I.ERROR,...e),this._logHandler(this,I.ERROR,...e)}}("@firebase/app"),J="@firebase/app-compat",Y="@firebase/analytics-compat",Z="@firebase/analytics",Q="@firebase/app-check-compat",X="@firebase/app-check",ee="@firebase/auth",te="@firebase/auth-compat",ne="@firebase/database",ie="@firebase/database-compat",re="@firebase/functions",ae="@firebase/functions-compat",oe="@firebase/installations",se="@firebase/installations-compat",ce="@firebase/messaging",le="@firebase/messaging-compat",ue="@firebase/performance",de="@firebase/performance-compat",pe="@firebase/remote-config",fe="@firebase/remote-config-compat",he="@firebase/storage",ge="@firebase/storage-compat",me="@firebase/firestore",be="@firebase/vertexai-preview",we="@firebase/firestore-compat",ye="firebase",ve="[DEFAULT]",Ie={[z]:"fire-core",[J]:"fire-core-compat",[Z]:"fire-analytics",[Y]:"fire-analytics-compat",[X]:"fire-app-check",[Q]:"fire-app-check-compat",[ee]:"fire-auth",[te]:"fire-auth-compat",[ne]:"fire-rtdb",[ie]:"fire-rtdb-compat",[re]:"fire-fn",[ae]:"fire-fn-compat",[oe]:"fire-iid",[se]:"fire-iid-compat",[ce]:"fire-fcm",[le]:"fire-fcm-compat",[ue]:"fire-perf",[de]:"fire-perf-compat",[pe]:"fire-rc",[fe]:"fire-rc-compat",[he]:"fire-gcs",[ge]:"fire-gcs-compat",[me]:"fire-fst",[we]:"fire-fst-compat",[be]:"fire-vertex","fire-js":"fire-js",[ye]:"fire-js-all"},Se=new Map,_e=new Map,Ee=new Map;function Ce(e,t){try{e.container.addComponent(t)}catch(n){G.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,n)}}function De(e){const t=e.name;if(Ee.has(t))return G.debug(`There were multiple attempts to register component ${t}.`),!1;Ee.set(t,e);for(const t of Se.values())Ce(t,e);for(const t of _e.values())Ce(t,e);return!0}function ke(e,t){const n=e.container.getProvider("heartbeat").getImmediate({optional:!0});return n&&n.triggerHeartbeat(),e.container.getProvider(t)}const Te=new d("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."});class Ae{constructor(e,t,n){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=n,this.container.addComponent(new m("app",(()=>this),"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw Te.create("app-deleted",{appName:this._name})}}function Oe(e,t={}){let n=e;"object"!=typeof t&&(t={name:t});const i=Object.assign({name:ve,automaticDataCollectionEnabled:!1},t),r=i.name;if("string"!=typeof r||!r)throw Te.create("bad-app-name",{appName:String(r)});if(n||(n=o()),!n)throw Te.create("no-options");const a=Se.get(r);if(a){if(f(n,a.options)&&f(i,a.config))return a;throw Te.create("duplicate-app",{appName:r})}const s=new y(r);for(const e of Ee.values())s.addComponent(e);const c=new Ae(n,i,s);return Se.set(r,c),c}function Me(e,t,n){var i;let r=null!==(i=Ie[e])&&void 0!==i?i:e;n&&(r+=`-${n}`);const a=r.match(/\s|\//),o=t.match(/\s|\//);if(a||o){const e=[`Unable to register library "${r}" with version "${t}":`];return a&&e.push(`library name "${r}" contains illegal characters (whitespace or "/")`),a&&o&&e.push("and"),o&&e.push(`version name "${t}" contains illegal characters (whitespace or "/")`),void G.warn(e.join(" "))}De(new m(`${r}-version`,(()=>({library:r,version:t})),"VERSION"))}const Ne="firebase-heartbeat-database",Be=1,je="firebase-heartbeat-store";let Pe=null;function Le(){return Pe||(Pe=H(Ne,Be,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(je)}catch(e){console.warn(e)}}}).catch((e=>{throw Te.create("idb-open",{originalErrorMessage:e.message})}))),Pe}async function $e(e,t){try{const n=(await Le()).transaction(je,"readwrite"),i=n.objectStore(je);await i.put(t,He(e)),await n.done}catch(e){if(e instanceof u)G.warn(e.message);else{const t=Te.create("idb-set",{originalErrorMessage:null==e?void 0:e.message});G.warn(t.message)}}}function He(e){return`${e.name}!${e.options.appId}`}class Re{constructor(e){this.container=e,this._heartbeatsCache=null;const t=this.container.getProvider("app").getImmediate();this._storage=new xe(t),this._heartbeatsCachePromise=this._storage.read().then((e=>(this._heartbeatsCache=e,e)))}async triggerHeartbeat(){var e,t;try{const n=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),i=Fe();if(null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)&&(this._heartbeatsCache=await this._heartbeatsCachePromise,null==(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats)))return;if(this._heartbeatsCache.lastSentHeartbeatDate===i||this._heartbeatsCache.heartbeats.some((e=>e.date===i)))return;return this._heartbeatsCache.heartbeats.push({date:i,agent:n}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter((e=>{const t=new Date(e.date).valueOf();return Date.now()-t<=2592e6})),this._storage.overwrite(this._heartbeatsCache)}catch(e){G.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)||0===this._heartbeatsCache.heartbeats.length)return"";const t=Fe(),{heartbeatsToSend:n,unsentEntries:i}=function(e,t=1024){const n=[];let i=e.slice();for(const r of e){const e=n.find((e=>e.agent===r.agent));if(e){if(e.dates.push(r.date),Ve(n)>t){e.dates.pop();break}}else if(n.push({agent:r.agent,dates:[r.date]}),Ve(n)>t){n.pop();break}i=i.slice(1)}return{heartbeatsToSend:n,unsentEntries:i}}(this._heartbeatsCache.heartbeats),a=r(JSON.stringify({version:2,heartbeats:n}));return this._heartbeatsCache.lastSentHeartbeatDate=t,i.length>0?(this._heartbeatsCache.heartbeats=i,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),a}catch(e){return G.warn(e),""}}}function Fe(){return(new Date).toISOString().substring(0,10)}class xe{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!c()&&l().then((()=>!0)).catch((()=>!1))}async read(){if(await this._canUseIndexedDBPromise){const e=await async function(e){try{const t=(await Le()).transaction(je),n=await t.objectStore(je).get(He(e));return await t.done,n}catch(e){if(e instanceof u)G.warn(e.message);else{const t=Te.create("idb-get",{originalErrorMessage:null==e?void 0:e.message});G.warn(t.message)}}}(this.app);return(null==e?void 0:e.heartbeats)?e:{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return $e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return $e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:[...n.heartbeats,...e.heartbeats]})}}}function Ve(e){return r(JSON.stringify({version:2,heartbeats:e})).length}De(new m("platform-logger",(e=>new W(e)),"PRIVATE")),De(new m("heartbeat",(e=>new Re(e)),"PRIVATE")),Me(z,q,""),Me(z,q,"esm2017"),Me("fire-js",""),Me("firebase","10.13.1","app");const Ke="@firebase/installations",Ue="0.6.8",We=1e4,ze=`w:${Ue}`,qe="FIS_v2",Ge="https://firebaseinstallations.googleapis.com/v1",Je=36e5,Ye=new d("installations","Installations",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"not-registered":"Firebase Installation is not registered.","installation-not-found":"Firebase Installation not found.","request-failed":'{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',"app-offline":"Could not process request. Application offline.","delete-pending-registration":"Can't delete installation while there is a pending registration request."});function Ze(e){return e instanceof u&&e.code.includes("request-failed")}function Qe({projectId:e}){return`${Ge}/projects/${e}/installations`}function Xe(e){return{token:e.token,requestStatus:2,expiresIn:(t=e.expiresIn,Number(t.replace("s","000"))),creationTime:Date.now()};var t}async function et(e,t){const n=(await t.json()).error;return Ye.create("request-failed",{requestName:e,serverCode:n.code,serverMessage:n.message,serverStatus:n.status})}function tt({apiKey:e}){return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e})}async function nt(e){const t=await e();return t.status>=500&&t.status<600?e():t}function it(e){return new Promise((t=>{setTimeout(t,e)}))}const rt=/^[cdef][\w-]{21}$/,at="";function ot(){try{const e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;const t=function(e){var t;return(t=e,btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_")).substr(0,22)}(e);return rt.test(t)?t:at}catch(e){return at}}function st(e){return`${e.appName}!${e.appId}`}const ct=new Map;function lt(e,t){const n=st(e);ut(n,t),function(e,t){const n=(!dt&&"BroadcastChannel"in self&&(dt=new BroadcastChannel("[Firebase] FID Change"),dt.onmessage=e=>{ut(e.data.key,e.data.fid)}),dt);n&&n.postMessage({key:e,fid:t}),0===ct.size&&dt&&(dt.close(),dt=null)}(n,t)}function ut(e,t){const n=ct.get(e);if(n)for(const e of n)e(t)}let dt=null;const pt="firebase-installations-database",ft=1,ht="firebase-installations-store";let gt=null;function mt(){return gt||(gt=H(pt,ft,{upgrade:(e,t)=>{0===t&&e.createObjectStore(ht)}})),gt}async function bt(e,t){const n=st(e),i=(await mt()).transaction(ht,"readwrite"),r=i.objectStore(ht),a=await r.get(n);return await r.put(t,n),await i.done,a&&a.fid===t.fid||lt(e,t.fid),t}async function wt(e){const t=st(e),n=(await mt()).transaction(ht,"readwrite");await n.objectStore(ht).delete(t),await n.done}async function yt(e,t){const n=st(e),i=(await mt()).transaction(ht,"readwrite"),r=i.objectStore(ht),a=await r.get(n),o=t(a);return void 0===o?await r.delete(n):await r.put(o,n),await i.done,!o||a&&a.fid===o.fid||lt(e,o.fid),o}async function vt(e){let t;const n=await yt(e.appConfig,(n=>{const i=function(e){return _t(e||{fid:ot(),registrationStatus:0})}(n),r=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine)return{installationEntry:t,registrationPromise:Promise.reject(Ye.create("app-offline"))};const n={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},i=async function(e,t){try{const n=await async function({appConfig:e,heartbeatServiceProvider:t},{fid:n}){const i=Qe(e),r=tt(e),a=t.getImmediate({optional:!0});if(a){const e=await a.getHeartbeatsHeader();e&&r.append("x-firebase-client",e)}const o={fid:n,authVersion:qe,appId:e.appId,sdkVersion:ze},s={method:"POST",headers:r,body:JSON.stringify(o)},c=await nt((()=>fetch(i,s)));if(c.ok){const e=await c.json();return{fid:e.fid||n,registrationStatus:2,refreshToken:e.refreshToken,authToken:Xe(e.authToken)}}throw await et("Create Installation",c)}(e,t);return bt(e.appConfig,n)}catch(n){throw Ze(n)&&409===n.customData.serverCode?await wt(e.appConfig):await bt(e.appConfig,{fid:t.fid,registrationStatus:0}),n}}(e,n);return{installationEntry:n,registrationPromise:i}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:It(e)}:{installationEntry:t}}(e,i);return t=r.registrationPromise,r.installationEntry}));return n.fid===at?{installationEntry:await t}:{installationEntry:n,registrationPromise:t}}async function It(e){let t=await St(e.appConfig);for(;1===t.registrationStatus;)await it(100),t=await St(e.appConfig);if(0===t.registrationStatus){const{installationEntry:t,registrationPromise:n}=await vt(e);return n||t}return t}function St(e){return yt(e,(e=>{if(!e)throw Ye.create("installation-not-found");return _t(e)}))}function _t(e){return 1===(t=e).registrationStatus&&t.registrationTime+Wefetch(i,s)));if(c.ok)return Xe(await c.json());throw await et("Generate Auth Token",c)}async function Ct(e,t=!1){let n;const i=await yt(e.appConfig,(i=>{if(!kt(i))throw Ye.create("not-registered");const r=i.authToken;if(!t&&(2===(a=r).requestStatus&&!function(e){const t=Date.now();return t{if(!kt(e))throw Ye.create("not-registered");return 1===(t=e.authToken).requestStatus&&t.requestTime+We{const t=e.getProvider("app").getImmediate(),n=function(e){if(!e||!e.options)throw Tt("App Configuration");if(!e.name)throw Tt("App Name");const t=["projectId","apiKey","appId"];for(const n of t)if(!e.options[n])throw Tt(n);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t);return{app:t,appConfig:n,heartbeatServiceProvider:ke(t,"heartbeat"),_delete:()=>Promise.resolve()}}),"PUBLIC")),De(new m("installations-internal",(e=>{const t=ke(e.getProvider("app").getImmediate(),At).getImmediate();return{getId:()=>async function(e){const t=e,{installationEntry:n,registrationPromise:i}=await vt(t);return i?i.catch(console.error):Ct(t).catch(console.error),n.fid}(t),getToken:e=>async function(e,t=!1){const n=e;return await async function(e){const{registrationPromise:t}=await vt(e);t&&await t}(n),(await Ct(n,t)).token}(t,e)}}),"PRIVATE")),Me(Ke,Ue),Me(Ke,Ue,"esm2017");const Ot="BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4",Mt="https://fcmregistrations.googleapis.com/v1",Nt="FCM_MSG",Bt=3,jt=1;var Pt,Lt;function $t(e){const t=new Uint8Array(e);return btoa(String.fromCharCode(...t)).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function Ht(e){const t=(e+"=".repeat((4-e.length%4)%4)).replace(/\-/g,"+").replace(/_/g,"/"),n=atob(t),i=new Uint8Array(n.length);for(let e=0;e{0===t&&e.createObjectStore(Ut)}})),Wt}async function qt(e){const t=Jt(e),n=await zt(),i=await n.transaction(Ut).objectStore(Ut).get(t);if(i)return i;{const t=await async function(e){if("databases"in indexedDB){const e=(await indexedDB.databases()).map((e=>e.name));if(!e.includes(Rt))return null}let t=null;return(await H(Rt,Ft,{upgrade:async(n,i,r,a)=>{var o;if(i<2)return;if(!n.objectStoreNames.contains(xt))return;const s=a.objectStore(xt),c=await s.index("fcmSenderId").get(e);if(await s.clear(),c)if(2===i){const e=c;if(!e.auth||!e.p256dh||!e.endpoint)return;t={token:e.fcmToken,createTime:null!==(o=e.createTime)&&void 0!==o?o:Date.now(),subscriptionOptions:{auth:e.auth,p256dh:e.p256dh,endpoint:e.endpoint,swScope:e.swScope,vapidKey:"string"==typeof e.vapidKey?e.vapidKey:$t(e.vapidKey)}}}else if(3===i){const e=c;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:$t(e.auth),p256dh:$t(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:$t(e.vapidKey)}}}else if(4===i){const e=c;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:$t(e.auth),p256dh:$t(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:$t(e.vapidKey)}}}}})).close(),await R(Rt),await R("fcm_vapid_details_db"),await R("undefined"),function(e){if(!e||!e.subscriptionOptions)return!1;const{subscriptionOptions:t}=e;return"number"==typeof e.createTime&&e.createTime>0&&"string"==typeof e.token&&e.token.length>0&&"string"==typeof t.auth&&t.auth.length>0&&"string"==typeof t.p256dh&&t.p256dh.length>0&&"string"==typeof t.endpoint&&t.endpoint.length>0&&"string"==typeof t.swScope&&t.swScope.length>0&&"string"==typeof t.vapidKey&&t.vapidKey.length>0}(t)?t:null}(e.appConfig.senderId);if(t)return await Gt(e,t),t}}async function Gt(e,t){const n=Jt(e),i=(await zt()).transaction(Ut,"readwrite");return await i.objectStore(Ut).put(t,n),await i.done,t}function Jt({appConfig:e}){return e.appId}const Yt=new d("messaging","Messaging",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"only-available-in-window":"This method is available in a Window context.","only-available-in-sw":"This method is available in a service worker context.","permission-default":"The notification permission was not granted and dismissed instead.","permission-blocked":"The notification permission was not granted and blocked instead.","unsupported-browser":"This browser doesn't support the API's required to use the Firebase SDK.","indexed-db-unsupported":"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)","failed-service-worker-registration":"We are unable to register the default service worker. {$browserErrorMessage}","token-subscribe-failed":"A problem occurred while subscribing the user to FCM: {$errorInfo}","token-subscribe-no-token":"FCM returned no token when subscribing the user to push.","token-unsubscribe-failed":"A problem occurred while unsubscribing the user from FCM: {$errorInfo}","token-update-failed":"A problem occurred while updating the user from FCM: {$errorInfo}","token-update-no-token":"FCM returned no token when updating the user to push.","use-sw-after-get-token":"The useServiceWorker() method may only be called once and must be called before calling getToken() to ensure your service worker is used.","invalid-sw-registration":"The input to useServiceWorker() must be a ServiceWorkerRegistration.","invalid-bg-handler":"The input to setBackgroundMessageHandler() must be a function.","invalid-vapid-key":"The public VAPID key must be a string.","use-vapid-key-after-get-token":"The usePublicVapidKey() method may only be called once and must be called before calling getToken() to ensure your VAPID key is used."});async function Zt(e,t){const n={method:"DELETE",headers:await Xt(e)};try{const i=await fetch(`${Qt(e.appConfig)}/${t}`,n),r=await i.json();if(r.error){const e=r.error.message;throw Yt.create("token-unsubscribe-failed",{errorInfo:e})}}catch(e){throw Yt.create("token-unsubscribe-failed",{errorInfo:null==e?void 0:e.toString()})}}function Qt({projectId:e}){return`${Mt}/projects/${e}/registrations`}async function Xt({appConfig:e,installations:t}){const n=await t.getToken();return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e.apiKey,"x-goog-firebase-installations-auth":`FIS ${n}`})}function en({p256dh:e,auth:t,endpoint:n,vapidKey:i}){const r={web:{endpoint:n,auth:t,p256dh:e}};return i!==Ot&&(r.web.applicationPubKey=i),r}async function tn(e){const t=await qt(e.firebaseDependencies);t&&(await Zt(e.firebaseDependencies,t.token),await async function(e){const t=Jt(e),n=(await zt()).transaction(Ut,"readwrite");await n.objectStore(Ut).delete(t),await n.done}(e.firebaseDependencies));const n=await e.swRegistration.pushManager.getSubscription();return!n||n.unsubscribe()}async function nn(e,t){const n=await async function(e,t){const n=await Xt(e),i=en(t),r={method:"POST",headers:n,body:JSON.stringify(i)};let a;try{const t=await fetch(Qt(e.appConfig),r);a=await t.json()}catch(e){throw Yt.create("token-subscribe-failed",{errorInfo:null==e?void 0:e.toString()})}if(a.error){const e=a.error.message;throw Yt.create("token-subscribe-failed",{errorInfo:e})}if(!a.token)throw Yt.create("token-subscribe-no-token");return a.token}(e,t),i={token:n,createTime:Date.now(),subscriptionOptions:t};return await Gt(e,i),i.token}function rn(e,t){const n=[];for(let i=0;i"visible"===e.visibilityState&&!e.url.startsWith("chrome-extension://")))}(i))return function(e,t){t.isFirebaseMessaging=!0,t.messageType=Lt.PUSH_RECEIVED;for(const n of e)n.postMessage(t)}(i,n);if(n.notification&&await function(e){var t;const{actions:n}=e,{maxActions:i}=Notification;return n&&i&&n.length>i&&console.warn(`This browser only supports ${i} actions. The remaining actions will not be displayed.`),self.registration.showNotification(null!==(t=e.title)&&void 0!==t?t:"",e)}(function(e){const t=Object.assign({},e.notification);return t.data={[Nt]:e},t}(n)),t&&t.onBackgroundMessageHandler){const e=function(e){const t={from:e.from,collapseKey:e.collapse_key,messageId:e.fcmMessageId};return function(e,t){if(!t.notification)return;e.notification={};const n=t.notification.title;n&&(e.notification.title=n);const i=t.notification.body;i&&(e.notification.body=i);const r=t.notification.image;r&&(e.notification.image=r);const a=t.notification.icon;a&&(e.notification.icon=a)}(t,e),function(e,t){t.data&&(e.data=t.data)}(t,e),function(e,t){var n,i,r,a,o;if(!t.fcmOptions&&!(null===(n=t.notification)||void 0===n?void 0:n.click_action))return;e.fcmOptions={};const s=null!==(r=null===(i=t.fcmOptions)||void 0===i?void 0:i.link)&&void 0!==r?r:null===(a=t.notification)||void 0===a?void 0:a.click_action;s&&(e.fcmOptions.link=s);const c=null===(o=t.fcmOptions)||void 0===o?void 0:o.analytics_label;c&&(e.fcmOptions.analyticsLabel=c)}(t,e),t}(n);"function"==typeof t.onBackgroundMessageHandler?await t.onBackgroundMessageHandler(e):t.onBackgroundMessageHandler.next(e)}}function on(){return self.clients.matchAll({type:"window",includeUncontrolled:!0})}function sn(e){return Yt.create("missing-app-config-values",{valueName:e})}rn("hts/frbslgigp.ogepscmv/ieo/eaylg","tp:/ieaeogn-agolai.o/1frlglgc/o"),rn("AzSCbw63g1R0nCw85jG8","Iaya3yLKwmgvh7cF0q4");class cn{constructor(e,t,n){this.deliveryMetricsExportedToBigQueryEnabled=!1,this.onBackgroundMessageHandler=null,this.onMessageHandler=null,this.logEvents=[],this.isLogServiceStarted=!1;const i=function(e){if(!e||!e.options)throw sn("App Configuration Object");if(!e.name)throw sn("App Name");const t=["projectId","apiKey","appId","messagingSenderId"],{options:n}=e;for(const e of t)if(!n[e])throw sn(e);return{appName:e.name,projectId:n.projectId,apiKey:n.apiKey,appId:n.appId,senderId:n.messagingSenderId}}(e);this.firebaseDependencies={app:e,appConfig:i,installations:t,analyticsProvider:n}}_delete(){return Promise.resolve()}}De(new m("messaging-sw",(e=>{const t=new cn(e.getProvider("app").getImmediate(),e.getProvider("installations-internal").getImmediate(),e.getProvider("analytics-internal"));return self.addEventListener("push",(e=>{e.waitUntil(an(e,t))})),self.addEventListener("pushsubscriptionchange",(e=>{e.waitUntil(async function(e,t){var n,i;const{newSubscription:r}=e;if(!r)return void await tn(t);const a=await qt(t.firebaseDependencies);await tn(t),t.vapidKey=null!==(i=null===(n=null==a?void 0:a.subscriptionOptions)||void 0===n?void 0:n.vapidKey)&&void 0!==i?i:Ot,await async function(e){const t=await async function(e,t){return await e.pushManager.getSubscription()||e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:Ht(t)})}(e.swRegistration,e.vapidKey),n={vapidKey:e.vapidKey,swScope:e.swRegistration.scope,endpoint:t.endpoint,auth:$t(t.getKey("auth")),p256dh:$t(t.getKey("p256dh"))},i=await qt(e.firebaseDependencies);if(i){if(function(e,t){const n=t.vapidKey===e.vapidKey,i=t.endpoint===e.endpoint,r=t.auth===e.auth,a=t.p256dh===e.p256dh;return n&&i&&r&&a}(i.subscriptionOptions,n))return Date.now()>=i.createTime+6048e5?async function(e,t){try{const n=await async function(e,t){const n=await Xt(e),i=en(t.subscriptionOptions),r={method:"PATCH",headers:n,body:JSON.stringify(i)};let a;try{const n=await fetch(`${Qt(e.appConfig)}/${t.token}`,r);a=await n.json()}catch(e){throw Yt.create("token-update-failed",{errorInfo:null==e?void 0:e.toString()})}if(a.error){const e=a.error.message;throw Yt.create("token-update-failed",{errorInfo:e})}if(!a.token)throw Yt.create("token-update-no-token");return a.token}(e.firebaseDependencies,t),i=Object.assign(Object.assign({},t),{token:n,createTime:Date.now()});return await Gt(e.firebaseDependencies,i),n}catch(e){throw e}}(e,{token:i.token,createTime:Date.now(),subscriptionOptions:n}):i.token;try{await Zt(e.firebaseDependencies,i.token)}catch(e){console.warn(e)}return nn(e.firebaseDependencies,n)}return nn(e.firebaseDependencies,n)}(t)}(e,t))})),self.addEventListener("notificationclick",(e=>{e.waitUntil(async function(e){var t,n;const i=null===(n=null===(t=e.notification)||void 0===t?void 0:t.data)||void 0===n?void 0:n[Nt];if(!i)return;if(e.action)return;e.stopImmediatePropagation(),e.notification.close();const r=function(e){var t,n,i;return(null!==(n=null===(t=e.fcmOptions)||void 0===t?void 0:t.link)&&void 0!==n?n:null===(i=e.notification)||void 0===i?void 0:i.click_action)||("object"==typeof(r=e.data)&&r&&"google.c.a.c_id"in r?self.location.origin:null);var r}(i);if(!r)return;const a=new URL(r,self.location.href),o=new URL(self.location.origin);if(a.host!==o.host)return;let s=await async function(e){const t=await on();for(const n of t){const t=new URL(n.url,self.location.href);if(e.host===t.host)return n}return null}(a);return s?s=await s.focus():(s=await self.clients.openWindow(r),await new Promise((e=>{setTimeout(e,3e3)}))),s?(i.messageType=Lt.NOTIFICATION_CLICKED,i.isFirebaseMessaging=!0,s.postMessage(i)):void 0}(e))})),t}),"PUBLIC"));!function(e){!function(e,t){if(void 0!==self.document)throw Yt.create("only-available-in-sw");e.onBackgroundMessageHandler=t}(e=g(e),(e=>{console.log("[firebase-messaging-sw.js] Received background message ",e),self.registration.showNotification("Background Message Title",{body:"Background Message body.",icon:"/firebase-logo.png"})}))}(function(e=function(e=ve){const t=Se.get(e);if(!t&&e===ve&&o())return Oe();if(!t)throw Te.create("no-app",{appName:e});return t}()){return async function(){return c()&&await l()&&"PushManager"in self&&"Notification"in self&&ServiceWorkerRegistration.prototype.hasOwnProperty("showNotification")&&PushSubscription.prototype.hasOwnProperty("getKey")}().then((e=>{if(!e)throw Yt.create("unsupported-browser")}),(e=>{throw Yt.create("indexed-db-unsupported")})),ke(g(e),"messaging-sw").getImmediate()}(Oe({apiKey:"AIzaSyCsEEl7bhST8VHrK3ovbEfMxCUcHZngKg0",authDomain:"geraipi.firebaseapp.com",projectId:"geraipi",storageBucket:"geraipi.appspot.com",messagingSenderId:"1071852496864",appId:"1:1071852496864:web:c5e8338dc67fa12d9bad85",measurementId:"G-SW3CZ09N71"})))})();
\ No newline at end of file
+importScripts('https://www.gstatic.com/firebasejs/8.1.1/firebase-app.js');
+importScripts('https://www.gstatic.com/firebasejs/8.1.1/firebase-messaging.js');
+self.addEventListener('notificationclick', event => {
+ console.log(event)
+});
+const firebaseConfig = {
+ apiKey: "AIzaSyC0lUXHwQdTFXz8KkC5D7zy-t47RrkIvsY",
+ authDomain: "geraipi-indonesia.firebaseapp.com",
+ projectId: "geraipi-indonesia",
+ storageBucket: "geraipi-indonesia.appspot.com",
+ messagingSenderId: "981139646267",
+ appId: "1:981139646267:web:53cc230affb50210a5391e",
+ measurementId: "G-F368X3MB4J"
+};
+firebase.initializeApp(firebaseConfig);
+const messaging = firebase.messaging();
+messaging.onBackgroundMessage((payload) => {
+ console.log('[firebase-messaging-sw.js] Received background message ', payload);
+ const notificationTitle = payload.notification.title;
+ const notificationOptions = {
+ body: payload.notification.body,
+ };
+ return self.registration.showNotification(notificationTitle,
+ notificationOptions);
+});
+
+
diff --git a/frontend/templates/layout.html b/frontend/templates/layout.html
index 4990dc3..f193d14 100644
--- a/frontend/templates/layout.html
+++ b/frontend/templates/layout.html
@@ -1,6 +1,5 @@
-{% load static tailwind_tags %}
-{% load i18n translater %}
+{% load static tailwind_tags i18n translater %}
@@ -221,31 +220,31 @@
-->
-
+{% endblock %}
+
+{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %}
+{% if not is_popup %}
+ {% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ opts.verbose_name_plural|capfirst }}
+ {{ original|truncatewords:"18" }}
+ {% trans 'Change password' %}
+
+ {% endblock %}
+{% endif %}
+
+{% block content_title %} {% trans 'Change password' %} {% endblock %}
+
+{% block content %}
+
+
+ {% if form.errors %}
+
+ {% if errors|length == 1 %}
+ {% trans "Please correct the error below." %}
+ {% else %}
+ {% trans "Please correct the errors below." %}
+ {% endif %}
+
+ {% endif %}
+
+
+
+
+{% endblock %}
+
+{% block extrajs %}
+
+{% endblock %}
diff --git a/templates/admin/base.html b/templates/admin/base.html
new file mode 100644
index 0000000..85ff041
--- /dev/null
+++ b/templates/admin/base.html
@@ -0,0 +1,386 @@
+{% load i18n static jazzmin admin_urls %}
+{% get_current_language as LANGUAGE_CODE %}
+{% get_current_language_bidi as LANGUAGE_BIDI %}
+{% get_jazzmin_settings request as jazzmin_settings %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+
+
+
+
+
+
+
+
+
+ {% block title %}{{ title }} | {{ jazzmin_settings.site_title }}{% endblock %}
+
+
+
+
+
+
+
+
+ {% if jazzmin_ui.theme.name != 'default' %}
+
+ {% endif %}
+
+ {% if jazzmin_ui.dark_mode_theme %}
+
+ {% endif %}
+
+
+
+
+ {% if jazzmin_settings.custom_css %}
+
+
+ {% endif %}
+
+
+
+
+
+ {% if jazzmin_settings.use_google_fonts_cdn %}
+
+
+ {% endif %}
+
+ {% block extrastyle %} {% endblock %}
+ {% block extrahead %} {% endblock %}
+
+
+
+
+
+ {% if not is_popup %}
+
+
+
+ {% if jazzmin_settings.show_sidebar %}
+
+
+
+ {% else %}
+
+
+
+
+
+ {% endif %}
+
+ {% get_top_menu user request.current_app|default:"admin" as top_menu %}
+ {% for link in top_menu %}
+
+ {% if link.children %}
+
+ {{ link.name }}
+
+
+ {% else %}
+ {{ link.name }}
+ {% endif %}
+
+ {% endfor %}
+
+
+ {% if jazzmin_settings.search_model %}
+ {% for search_model in jazzmin_settings.search_models_parsed %}
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% if jazzmin_settings.show_ui_builder %}
+
+
+
+
+
+ {% endif %}
+ {% if 'django.contrib.admindocs'|app_is_installed %}
+
+
+
+
+
+ {% endif %}
+
+ {% if jazzmin_settings.language_chooser %}
+ {% get_available_languages as LANGUAGES %}
+ {% get_language_info_list for LANGUAGES as languages %}
+
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% block sidebar %}
+ {% if jazzmin_settings.show_sidebar %}
+ {% get_side_menu as side_menu_list %}
+
+
+ {% endif %}
+ {% endblock %}
+ {% endif %}
+
+
+ {% block page_content %}
+ {% if not is_popup %}
+
+
+
+
+
{% block content_title %}{% endblock %}
+ {% block breadcrumbs %}{% endblock %}
+
+ {% block page_actions %}{% endblock %}
+
+
+
+ {% endif %}
+
+
+
+
+ {% block messages %}
+ {% for message in messages %}
+ {% if message.tags == 'success' %}
+
+ ×
+
+ {{ message|capfirst }}
+
+ {% elif message.tags == 'error' %}
+
+ ×
+
+ {{ message|capfirst }}
+
+ {% elif message.tags == 'warning' %}
+
+ ×
+
+ {{ message|capfirst }}
+
+ {% elif message.tags == 'info' %}
+
+ ×
+
+ {{ message|capfirst }}
+
+ {% endif %}
+ {% endfor %}
+ {% endblock messages %}
+
+ {% block content %} {% endblock %}
+
+
+
+
+
+
+ {% endblock %}
+
+
+{% block footer %}
+ {% if not is_popup %}
+
+ {% if jazzmin_settings.show_ui_builder %}
+ {% include 'jazzmin/includes/ui_builder_panel.html' %}
+ {% endif %}
+ {% endif %}
+{% endblock %}
+
+
+
+{% if jazzmin_settings.show_ui_builder %}
+
+
+
+
+
+
{% trans 'Copy this info your settings file to persist these UI changes' %}
+
+
+
+
+
+
+
+{% endif %}
+
+
+
+
+
+
+
+
+
+
+{% if jazzmin_settings.custom_js %}
+
+{% endif %}
+
+{% if jazzmin_settings.show_ui_builder %}
+
+
+{% endif %}
+
+{% block extrajs %}{% endblock %}
+
+
+
diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html
new file mode 100644
index 0000000..02f53be
--- /dev/null
+++ b/templates/admin/base_site.html
@@ -0,0 +1 @@
+{% extends 'admin/base.html' %}
\ No newline at end of file
diff --git a/templates/admin/change_form.html b/templates/admin/change_form.html
new file mode 100644
index 0000000..5be7d3b
--- /dev/null
+++ b/templates/admin/change_form.html
@@ -0,0 +1,128 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls static admin_modify jazzmin %}
+{% get_jazzmin_settings request as jazzmin_settings %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+ {{ media }}
+{% endblock %}
+
+{% block coltype %}colM{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
+
+{% if not is_popup %}
+ {% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+
+ {% if has_view_permission %}
+ {{ opts.verbose_name_plural|capfirst }}
+ {% else %}
+ {{ opts.verbose_name_plural|capfirst }}
+ {% endif %}
+
+
+ {% if add %}
+ {% blocktrans with name=opts.verbose_name %}Add {{ name }}{% endblocktrans %}
+ {% else %}
+ {{ original|truncatewords:"18" }}
+ {% endif %}
+
+
+ {% endblock %}
+{% endif %}
+
+{% block content_title %} {{ opts.verbose_name_plural|capfirst }} {% endblock %}
+
+{% block content %}
+
+
+
+{% endblock %}
+
+{% block extrajs %}
+ {{ block.super }}
+
+
+ {% if jazzmin_settings.related_modal_active %}
+
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/admin/change_form_object_tools.html b/templates/admin/change_form_object_tools.html
new file mode 100644
index 0000000..9786a99
--- /dev/null
+++ b/templates/admin/change_form_object_tools.html
@@ -0,0 +1,10 @@
+{% load i18n admin_urls jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block object-tools-items %}
+ {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
+ {% trans 'History' %}
+ {% if has_absolute_url %}
+ {% trans "View on site" %}
+ {% endif %}
+{% endblock %}
diff --git a/templates/admin/change_list.html b/templates/admin/change_list.html
new file mode 100644
index 0000000..d7d35a1
--- /dev/null
+++ b/templates/admin/change_list.html
@@ -0,0 +1,122 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls static admin_list jazzmin %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+
+ {% if cl.formset or action_form %}
+
+ {% endif %}
+ {{ media.css }}
+ {% if not actions_on_top and not actions_on_bottom %}
+
+ {% endif %}
+{% endblock %}
+
+{% block extrahead %}
+ {{ block.super }}
+ {{ media.js }}
+{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ cl.opts.verbose_name_plural|capfirst }}
+
+{% endblock %}
+
+{% block content_title %} {{ cl.opts.verbose_name_plural|capfirst }} {% endblock %}
+
+{% block coltype %}flex{% endblock %}
+
+ {% block page_actions %}
+
+ {% block object-tools %}
+ {% block object-tools-items %}
+ {% change_list_object_tools %}
+ {% endblock %}
+ {% endblock %}
+
+ {% endblock %}
+
+
+{% block content %}
+
+ {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %}
+
+ {% block search %}
+ {% search_form cl %}
+ {% endblock %}
+
+
+{% endblock %}
+
+{% block extrajs %}
+ {{ block.super }}
+
+
+
+{% endblock %}
diff --git a/templates/admin/change_list_object_tools.html b/templates/admin/change_list_object_tools.html
new file mode 100644
index 0000000..18b3c4e
--- /dev/null
+++ b/templates/admin/change_list_object_tools.html
@@ -0,0 +1,11 @@
+{% load i18n admin_urls jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block object-tools-items %}
+ {% if has_add_permission %}
+ {% url cl.opts|admin_urlname:'add' as add_url %}
+
+ {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %}
+
+ {% endif %}
+{% endblock %}
diff --git a/templates/admin/change_list_results.html b/templates/admin/change_list_results.html
new file mode 100644
index 0000000..f928548
--- /dev/null
+++ b/templates/admin/change_list_results.html
@@ -0,0 +1,48 @@
+{% load i18n static jazzmin %}
+
+{% if result_hidden_fields %}
+
+ {% for item in result_hidden_fields %}{{ item }}{% endfor %}
+
+{% endif %}
+
+{% if results %}
+
+
+
+
+
+ {% for header in result_headers %}
+
+ {% endfor %}
+
+
+
+ {% for result in results %}
+
+ {% for item in result %}{{ item }}{% endfor %}
+
+ {% endfor %}
+
+
+
+
+{% endif %}
diff --git a/templates/admin/date_hierarchy.html b/templates/admin/date_hierarchy.html
new file mode 100644
index 0000000..6e5d5b1
--- /dev/null
+++ b/templates/admin/date_hierarchy.html
@@ -0,0 +1,23 @@
+{% load jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% if show %}
+
+
+ {% block date-hierarchy-toplinks %}
+ {% block date-hierarchy-back %}
+ {% if back %}
+
‹ {{ back.title }}
+ {% endif %}
+ {% endblock %}
+ {% block date-hierarchy-choices %}
+ {% for choice in choices %}
+
+ {{ choice.title }}
+
+ {% endfor %}
+ {% endblock %}
+ {% endblock %}
+
+
+{% endif %}
diff --git a/templates/admin/delete_confirmation.html b/templates/admin/delete_confirmation.html
new file mode 100644
index 0000000..3a54bdc
--- /dev/null
+++ b/templates/admin/delete_confirmation.html
@@ -0,0 +1,79 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls static jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block extrahead %}
+{{ block.super }}
+{{ media }}
+
+{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ opts.verbose_name_plural|capfirst }}
+ {{ object|truncatewords:"18" }}
+ {% trans 'Delete' %}
+
+{% endblock %}
+
+{% block content_title %} {% trans 'Delete' %} {% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
+ {% if perms_lacking %}
+
{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
+
+ {% for obj in perms_lacking %}
+ {{ obj }}
+ {% endfor %}
+
+ {% elif protected %}
+
{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}
+
+ {% for obj in protected %}
+ {{ obj }}
+ {% endfor %}
+
+ {% else %}
+
{% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}
+
+
+
{% trans "Objects" %}
+
{{ deleted_objects|unordered_list }}
+
+
+ {% include "admin/includes/object_delete_summary.html" %}
+
+
+
+ {% endif %}
+
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/delete_selected_confirmation.html b/templates/admin/delete_selected_confirmation.html
new file mode 100644
index 0000000..2061184
--- /dev/null
+++ b/templates/admin/delete_selected_confirmation.html
@@ -0,0 +1,83 @@
+{% extends "admin/base_site.html" %}
+{% load i18n l10n admin_urls static jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block extrahead %}
+ {{ block.super }}
+ {{ media }}
+
+{% endblock %}
+
+{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ opts.verbose_name_plural|capfirst }}
+ {% trans 'Delete multiple objects' %}
+
+{% endblock %}
+
+{% block content_title %} {% trans 'Delete multiple objects' %} {% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
+ {% if perms_lacking %}
+
{% blocktrans %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
+
+ {% for obj in perms_lacking %}
+ {{ obj }}
+ {% endfor %}
+
+ {% elif protected %}
+
{% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}
+
+ {% for obj in protected %}
+ {{ obj }}
+ {% endfor %}
+
+ {% else %}
+
{% blocktrans %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktrans %}
+
+
+
{% trans "Objects" %}
+ {% for deletable_object in deletable_objects %}
+
{{ deletable_object|unordered_list }}
+ {% endfor %}
+
+
+ {% include "admin/includes/object_delete_summary.html" %}
+
+
+
+
+ {% endif %}
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/edit_inline/stacked.html b/templates/admin/edit_inline/stacked.html
new file mode 100644
index 0000000..97276f9
--- /dev/null
+++ b/templates/admin/edit_inline/stacked.html
@@ -0,0 +1,58 @@
+{% load i18n admin_urls static %}
+
diff --git a/templates/admin/edit_inline/tabular.html b/templates/admin/edit_inline/tabular.html
new file mode 100644
index 0000000..66ae83b
--- /dev/null
+++ b/templates/admin/edit_inline/tabular.html
@@ -0,0 +1,94 @@
+{% load i18n admin_urls static admin_modify %}
+
diff --git a/templates/admin/filer/breadcrumbs.html b/templates/admin/filer/breadcrumbs.html
new file mode 100644
index 0000000..695041f
--- /dev/null
+++ b/templates/admin/filer/breadcrumbs.html
@@ -0,0 +1,30 @@
+{% load i18n %}
+
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {% if not instance.is_root and instance.is_smart_folder %}
+
+ {% trans "root" %}
+
+ {% endif %}
+ {% for ancestor_folder in instance.logical_path %}
+
+
+ {% if ancestor_folder.label %}
+ {{ ancestor_folder.label }}
+ {% else %}
+ {{ ancestor_folder.name }}
+ {% endif %}
+
+
+ {% endfor %}
+ {% if breadcrumbs_action %}
+ {% if instance.label or instance.name %}
+ {% if instance.label %}{{ instance.label }}{% else %}{{ instance.name }}{% endif %}
+ {% endif %}
+ {{ breadcrumbs_action }}
+ {% else %}
+ {% if instance.label %}{{ instance.label }}{% else %}{{ instance.name }}{% endif %}
+ {% endif %}
+
diff --git a/templates/admin/filer/change_form.html b/templates/admin/filer/change_form.html
new file mode 100644
index 0000000..c6f46e8
--- /dev/null
+++ b/templates/admin/filer/change_form.html
@@ -0,0 +1,33 @@
+{% extends "admin/change_form.html" %}
+{% load i18n admin_modify static filer_admin_tags %}
+
+{% block breadcrumbs %}
+ {% with original as instance %}
+ {% include "admin/filer/breadcrumbs.html" %}
+ {% endwith %}
+{% endblock %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+{% endblock %}
+
+
+{% block after_field_sets %}
+ {% filer_admin_context_hidden_formfields %}
+{% endblock %}
+
+{% block file_sidebar %}
+ {% with original.duplicates as duplicates %}
+ {% if duplicates %}
+
+
{% trans "Duplicates" %}
+
+
+ {% endif %}
+ {% endwith %}
+{% endblock %}
diff --git a/templates/admin/filer/delete_selected_files_confirmation.html b/templates/admin/filer/delete_selected_files_confirmation.html
new file mode 100644
index 0000000..cca72ad
--- /dev/null
+++ b/templates/admin/filer/delete_selected_files_confirmation.html
@@ -0,0 +1,75 @@
+{% extends "admin/delete_selected_confirmation.html" %}
+{% load i18n static admin_urls static jazzmin %}
+
+{% block breadcrumbs %}
+ {% include "admin/filer/breadcrumbs.html" %}
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
+ {% if perms_lacking or protected %}
+ {% if perms_lacking %}
+
{% blocktrans %}Deleting the selected files and/or folders would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}
+
+ {% for obj in perms_lacking %}
+ {{ obj }}
+ {% endfor %}
+
+ {% endif %}
+ {% if protected %}
+
{% blocktrans %}Deleting the selected files and/or folders would require deleting the following protected related objects:{% endblocktrans %}
+
+ {% for obj in protected %}
+ {{ obj }}
+ {% endfor %}
+
+ {% endif %}
+ {% else %}
+
{% blocktrans %}Are you sure you want to delete the selected files and/or folders? All of the following objects and their related items will be deleted:{% endblocktrans %}
+
+
+
{% trans "Objects" %}
+ {% for deletable_object in deletable_objects %}
+
{{ deletable_object|unordered_list }}
+ {% endfor %}
+
+
+
+ {% endif %}
+
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/templates/admin/filer/file/change_form.html b/templates/admin/filer/file/change_form.html
new file mode 100644
index 0000000..b3c4fb3
--- /dev/null
+++ b/templates/admin/filer/file/change_form.html
@@ -0,0 +1,36 @@
+{% extends "admin/filer/change_form.html" %}
+{% load admin_modify static %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+ {# upload stuff #}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block submit_buttons_bottom %}
+ {% include "admin/filer/tools/detail_info.html" with file=True %}
+ {{ block.super }}
+{% endblock %}
diff --git a/templates/admin/filer/folder/change_form.html b/templates/admin/filer/folder/change_form.html
new file mode 100644
index 0000000..78582e7
--- /dev/null
+++ b/templates/admin/filer/folder/change_form.html
@@ -0,0 +1,33 @@
+{% extends "admin/change_form.html" %}
+{% load i18n admin_modify static filer_admin_tags %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+
+ {% trans "root"|title %}
+
+ {% for ancestor_folder in original.get_ancestors %}
+
+ {{ ancestor_folder.name }}
+
+ {% endfor %}
+ {{ original.name }}
+
+{% endblock %}
+
+{% block coltype %}{% if is_popup %}colM{% else %}colMS{% endif %}{% endblock %}
+
+{% block object-tools %}
+ {% if change and not is_popup %}
+ {% trans 'History' %}
+ {% if has_absolute_url %}
+ {% trans "View on site" %}
+ {% endif%}
+ {% endif %}
+{% endblock %}
+
+{% block after_field_sets %}
+ {% filer_admin_context_hidden_formfields %}
+{% endblock %}
diff --git a/templates/admin/filer/folder/directory_listing.html b/templates/admin/filer/folder/directory_listing.html
new file mode 100644
index 0000000..8bb6d3c
--- /dev/null
+++ b/templates/admin/filer/folder/directory_listing.html
@@ -0,0 +1,258 @@
+{% extends "admin/filer/base_site.html" %}
+{% load i18n static filer_admin_tags %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+ {% if action_form and actions_on_top or actions_on_bottom %}
+
+ {% endif %}
+{% endblock %}
+
+{% block coltype %}{% endblock %}
+{% block bodyclass %}change-list filebrowser{% endblock %}
+
+
+{% block extrastyle %}
+ {{ block.super }}
+
+ {{ media.css }}
+ {% if action_form %}
+ {% url 'admin:jsi18n' as jsi18nurl %}
+
+ {% endif %}
+ {% if query.pop %}
+
+ {% endif %}
+{% endblock %}
+
+{% block breadcrumbs %}
+ {% if not is_popup %}
+
+ {% trans 'Home' %}
+ Файлы
+ {% if not folder.is_root and folder.is_smart_folder %}
+ {% trans "root" %}
+ {% endif %}
+ {% for ancestor_folder in folder.logical_path %}
+
+
+ {% if ancestor_folder.label %}{{ ancestor_folder.label }}{% else %}{{ ancestor_folder.name }}{% endif %}
+
+
+ {% endfor %}
+ {% if breadcrumbs_action %}
+
+
+ {% if folder.label %}
+ {{ folder.label }}
+ {% else %}
+ {{ folder.name }}
+ {% endif %}
+
+
+ {{ breadcrumbs_action }}
+ {% else %}
+ {% if folder.label %}
+ {{ folder.label }}
+ {% else %}
+ {{ folder.name }}
+ {% endif %}
+ {% endif %}
+
+
+
+
+
+
+ {% endif %}
+{% endblock %}
+
+{% block content %}
+
+
+
+
+ {% for ancestor_folder in instance.logical_path %}
+ {{ ancestor_folder }}
+ {% endfor %}
+
+
+
+ {% if not folder.is_root or folder.is_smart_folder %}
+
+ {% endif %}
+
+
+ {% if not folder.is_root or folder.is_smart_folder %}
+
+
+
+
+ {{ folder.name }}
+
+
+
+
+
+ {% if not is_popup and folder.file_type == 'Folder' and permissions.has_edit_permission %}
+
+
+
+
+ {% endif %}
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+ {% include "admin/filer/tools/search_form.html" %}
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/filer/image/change_form.html b/templates/admin/filer/image/change_form.html
new file mode 100644
index 0000000..3951695
--- /dev/null
+++ b/templates/admin/filer/image/change_form.html
@@ -0,0 +1,36 @@
+{% extends "admin/filer/change_form.html" %}
+{% load admin_modify static %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+ {# upload stuff #}
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{% block submit_buttons_bottom %}
+ {% include "admin/filer/tools/detail_info.html" %}
+ {{ block.super }}
+{% endblock %}
\ No newline at end of file
diff --git a/templates/admin/filer/tools/detail_info.html b/templates/admin/filer/tools/detail_info.html
new file mode 100644
index 0000000..dea4d07
--- /dev/null
+++ b/templates/admin/filer/tools/detail_info.html
@@ -0,0 +1,55 @@
+{% load filer_admin_tags i18n static jazzmin %}
+
+
+
+
+
+ {% if file %}
+
+ {% else %}
+
+
+
+
+ {% endif %}
+
+ {% if original.file_type or original.modified_at or original.uploaded_at or original.width or original.height or original.size or original.owner %}
+
+ {% if original.file_type %}
+ {% trans "Type" %} : {{ original.extension|upper }} {{ original.file_type }}
+ {% endif %}
+ {% if original.width or original.height %}
+ {% trans "Size" %} : {{ original.width }}x{{ original.height }} px
+ {% endif %}
+ {% if original.size %}
+ {% trans "File-size" %} : {{ original.size|filesizeformat }}
+ {% endif %}
+ {% if original.modified_at %}
+ {% trans "Modified" %} : {{ original.modified_at }}
+ {% endif %}
+ {% if original.uploaded_at %}
+ {% trans "Created" %} : {{ original.uploaded_at }}
+ {% endif %}
+ {% if original.owner %}
+ {% trans "Owner" %} : {{ original.owner }}
+ {% endif %}
+
+ {% endif %}
+
+
+
diff --git a/templates/admin/filter.html b/templates/admin/filter.html
new file mode 100644
index 0000000..40750af
--- /dev/null
+++ b/templates/admin/filter.html
@@ -0,0 +1,15 @@
+{% load i18n %}
+
+
+
+ {{ title }}
+ ---------
+ {% for choice in choices %}
+ {% if choice.name %}
+
+ {{ choice.display }}
+
+ {% endif %}
+ {% endfor %}
+
+
diff --git a/templates/admin/import_export/base.html b/templates/admin/import_export/base.html
new file mode 100644
index 0000000..904b8e0
--- /dev/null
+++ b/templates/admin/import_export/base.html
@@ -0,0 +1,19 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_modify %}
+{% load admin_urls %}
+{% load static %}
+
+{% block extrastyle %}{{ block.super }} {% endblock %}
+{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
+{% if not is_popup %}
+{% block breadcrumbs %}
+
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ opts.verbose_name_plural|capfirst }}
+ {% block breadcrumbs_last %}{% endblock %}
+
+
+{% endblock %}
+{% endif %}
diff --git a/templates/admin/import_export/change_list.html b/templates/admin/import_export/change_list.html
new file mode 100644
index 0000000..0f23dc7
--- /dev/null
+++ b/templates/admin/import_export/change_list.html
@@ -0,0 +1,13 @@
+{% extends "admin/change_list.html" %}
+
+{# Original template renders object-tools only when has_add_permission is True. #}
+{# This hack allows sub templates to add to object-tools #}
+{% block object-tools %}
+
+{% endblock %}
diff --git a/templates/admin/import_export/change_list_export.html b/templates/admin/import_export/change_list_export.html
new file mode 100644
index 0000000..9af1f73
--- /dev/null
+++ b/templates/admin/import_export/change_list_export.html
@@ -0,0 +1,6 @@
+{% extends "admin/import_export/change_list.html" %}
+
+{% block object-tools-items %}
+ {% include "admin/import_export/change_list_export_item.html" %}
+ {{ block.super }}
+{% endblock %}
diff --git a/templates/admin/import_export/change_list_export_item.html b/templates/admin/import_export/change_list_export_item.html
new file mode 100644
index 0000000..a63791d
--- /dev/null
+++ b/templates/admin/import_export/change_list_export_item.html
@@ -0,0 +1,8 @@
+{% load i18n %}
+{% load admin_urls %}
+
+{% if has_export_permission %}
+
+ {% trans "Export" %}
+
+{% endif %}
diff --git a/templates/admin/import_export/change_list_import.html b/templates/admin/import_export/change_list_import.html
new file mode 100644
index 0000000..9aa1860
--- /dev/null
+++ b/templates/admin/import_export/change_list_import.html
@@ -0,0 +1,6 @@
+{% extends "admin/import_export/change_list.html" %}
+
+{% block object-tools-items %}
+ {% include "admin/import_export/change_list_import_item.html" %}
+ {{ block.super }}
+{% endblock %}
diff --git a/templates/admin/import_export/change_list_import_export.html b/templates/admin/import_export/change_list_import_export.html
new file mode 100644
index 0000000..6b30773
--- /dev/null
+++ b/templates/admin/import_export/change_list_import_export.html
@@ -0,0 +1,9 @@
+{% extends "admin/import_export/change_list.html" %}
+
+{% block object-tools-items %}
+
+ {% include "admin/import_export/change_list_import_item.html" %}
+ {% include "admin/import_export/change_list_export_item.html" %}
+ {{ block.super }}
+
+{% endblock %}
diff --git a/templates/admin/import_export/change_list_import_item.html b/templates/admin/import_export/change_list_import_item.html
new file mode 100644
index 0000000..561e105
--- /dev/null
+++ b/templates/admin/import_export/change_list_import_item.html
@@ -0,0 +1,8 @@
+{% load i18n admin_urls jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% if has_import_permission %}
+
+ {% trans "Import" %}
+
+{% endif %}
diff --git a/templates/admin/import_export/export.html b/templates/admin/import_export/export.html
new file mode 100644
index 0000000..c7a9d5e
--- /dev/null
+++ b/templates/admin/import_export/export.html
@@ -0,0 +1,74 @@
+{% extends "admin/import_export/base.html" %}
+{% load i18n admin_urls static import_export_tags jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+{% endblock %}
+
+{% block breadcrumbs_last %}
+ {% trans "Export" %}
+{% endblock %}
+
+{% block content %}
+
+{% endblock %}
+
+{% block extrajs %}
+ {{ block.super }}
+
+
+{% endblock %}
diff --git a/templates/admin/import_export/import.html b/templates/admin/import_export/import.html
new file mode 100644
index 0000000..5cb4b33
--- /dev/null
+++ b/templates/admin/import_export/import.html
@@ -0,0 +1,272 @@
+{% extends "admin/import_export/base.html" %}
+{% load i18n admin_urls import_export_tags static jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block extrastyle %}
+ {{ block.super }}
+
+
+{% endblock %}
+
+{% block breadcrumbs_last %}
+ {% trans "Import" %}
+{% endblock %}
+
+{% block content %}
+
+ {% if confirm_form %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% if result %}
+
+ {% if result.has_errors %}
+
+
+ {% elif result.has_validation_errors %}
+
+
{% trans "Some rows failed to validate" %}
+
+
{% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}
+
+
+
+
+ {% trans "Row" %}
+ {% trans "Errors" %}
+ {% for field in result.diff_headers %}
+ {{ field }}
+ {% endfor %}
+
+
+
+ {% for row in result.invalid_rows %}
+
+ {{ row.number }}
+
+ {{ row.error_count }}
+
+
+ {% for field_name, error_list in row.field_specific_errors.items %}
+
+ {{ field_name }}
+
+ {% for error in error_list %}
+ {{ error }}
+ {% endfor %}
+
+
+ {% endfor %}
+ {% if row.non_field_specific_errors %}
+
+ {% trans "Non field specific" %}
+
+ {% for error in row.non_field_specific_errors %}
+ {{ error }}
+ {% endfor %}
+
+
+ {% endif %}
+
+
+
+ {% for field in row.values %}
+ {{ field }}
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+ {% else %}
+
+
+
+
+
+
+
+
+
+
+ {% for field in result.diff_headers %}
+ {{ field }}
+ {% endfor %}
+
+
+ {% for row in result.valid_rows %}
+
+
+ {% if row.import_type == 'new' %}
+ {% trans "New" %}
+ {% elif row.import_type == 'skip' %}
+ {% trans "Skipped" %}
+ {% elif row.import_type == 'delete' %}
+ {% trans "Delete" %}
+ {% elif row.import_type == 'update' %}
+ {% trans "Update" %}
+ {% endif %}
+
+ {% for field in row.diff %}
+ {{ field }}
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+
+
+
+ {% endif %}
+ {% endif %}
+
+{% endblock %}
+
+{% block extrajs %}
+ {{ block.super }}
+
+
+{% endblock %}
diff --git a/templates/admin/includes/fieldset.html b/templates/admin/includes/fieldset.html
new file mode 100644
index 0000000..0189fc1
--- /dev/null
+++ b/templates/admin/includes/fieldset.html
@@ -0,0 +1,59 @@
+{% load jazzmin %}
+{% if card %}
+
+ {% if card_header and fieldset.name %}
+
+ {%elif fieldset.description %}
+
+ {%endif%}
+
+
+{% endif %}
+
+ {% for line in fieldset %}
+
+ {% endfor %}
+
+{% if card %}
+
+
+{% endif %}
\ No newline at end of file
diff --git a/templates/admin/includes/object_delete_summary.html b/templates/admin/includes/object_delete_summary.html
new file mode 100644
index 0000000..0057af8
--- /dev/null
+++ b/templates/admin/includes/object_delete_summary.html
@@ -0,0 +1,12 @@
+{% load i18n %}
+{% trans "Summary" %}
+
+
+ {% for model_name, object_count in model_count %}
+
+ {{ model_name|capfirst }}
+ {{ object_count }}
+
+ {% endfor %}
+
+
diff --git a/templates/admin/index.html b/templates/admin/index.html
new file mode 100644
index 0000000..abc77db
--- /dev/null
+++ b/templates/admin/index.html
@@ -0,0 +1,133 @@
+{% extends "admin/base_site.html" %}
+{% load i18n static jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
+
+{% block content_title %} {% trans 'Dashboard' %} {% endblock %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {% trans 'Dashboard' %}
+
+{% endblock %}
+
+
+{% block content %}
+ {% get_side_menu using="app_list" as dashboard_list %}
+ {% if dashboard_list %}
+ {% widthratio dashboard_list|length 2 1 as middle %}
+ {% endif %}
+
+
+
+
+ {% for app in dashboard_list %}
+
+
+
+
+
+ {% for model in app.models %}
+
+
+ {% if model.url %}{{ model.name }} {% else %}{{ model.name }}{% endif %}
+
+
+
+
+
+ {% endfor %}
+
+
+
+
+
+ {% if forloop.counter == middle|add:"0" %}
+
+
+ {% endif %}
+
+ {% endfor %}
+
+
+
+
+
+
+
+
{% trans 'Recent actions' %}
+ {% load log %}
+ {% get_admin_log 6 as admin_log for_user user %}
+ {% if not admin_log %}
+
{% trans 'None available' %}
+ {% else %}
+
+ {% for entry in admin_log %}
+
+ {% if entry.is_change %}
+
+ {% elif entry.is_deletion %}
+
+ {% elif entry.is_addition %}
+
+ {% endif %}
+
+
+
{% blocktrans with timesince=entry.action_time|timesince %}{{ timesince }} ago{% endblocktrans %}
+
+ {% if not entry.is_deletion %}
+
+ {% if entry.is_addition %}
+ {{ entry }}
+ {% else %}
+
+ {% action_message_to_list entry as action_message_list %}
+ {% for action_message in action_message_list %}
+ {{ action_message.msg|style_bold_first_word }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% endif %}
+
+
+ {% endfor %}
+
+
+
+
+ {% endif %}
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/login.html b/templates/admin/login.html
new file mode 100644
index 0000000..5c41ffc
--- /dev/null
+++ b/templates/admin/login.html
@@ -0,0 +1,76 @@
+{% extends "registration/base.html" %}
+
+{% load i18n jazzmin %}
+{% get_jazzmin_settings request as jazzmin_settings %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block content %}
+ {{ jazzmin_settings.welcome_sign }}
+
+ {% endif %}
+ {% if form.errors %}
+ {% if form.username.errors %}
+
+
{{ form.username.label }}: {{ form.username.errors|join:', ' }}
+
+ {% endif %}
+ {% if form.password.errors %}
+
+
{{ form.password.label }}: {{ form.password.errors|join:', ' }}
+
+ {% endif %}
+ {% if form.non_field_errors %}
+
+ {% for error in form.non_field_errors %}
+
{{ error }}
+ {% endfor %}
+
+ {% endif %}
+ {% endif %}
+
+
+ {% url 'admin_password_reset' as password_reset_url %}
+ {% if password_reset_url %}
+
+ {% endif %}
+
+
+
+ {% trans "Log in" %}
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/mptt_filter.html b/templates/admin/mptt_filter.html
new file mode 100644
index 0000000..ef78514
--- /dev/null
+++ b/templates/admin/mptt_filter.html
@@ -0,0 +1,16 @@
+{% load i18n %}
+{% load mptt_admin %}
+
+
+
+ {{ title }}
+ ---------
+ {% for choice in choices %}
+ {% if choice.name %}
+
+ {{ choice.display }}
+
+ {% endif %}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/templates/admin/object_history.html b/templates/admin/object_history.html
new file mode 100644
index 0000000..9ce281a
--- /dev/null
+++ b/templates/admin/object_history.html
@@ -0,0 +1,72 @@
+{% extends "admin/base_site.html" %}
+{% load i18n admin_urls static jazzmin %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ module_name }}
+ {{ object|truncatewords:"18" }}
+ {% trans 'History' %}
+
+{% endblock %}
+
+{% block content %}
+
+
+
+
+
+
+
+
+
+
+
+
+ {% for action in action_list reversed %}
+
+ {{ action.action_time|date:"DATETIME_FORMAT" }}
+
+
+ {% action_message_to_list action as action_message_list %}
+ {% for action_message in action_message_list %}
+
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+ {% if not action_list %}
+
+
+
+ {% endif %}
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/templates/admin/pagination.html b/templates/admin/pagination.html
new file mode 100644
index 0000000..a3f4d09
--- /dev/null
+++ b/templates/admin/pagination.html
@@ -0,0 +1,30 @@
+{% load admin_list jazzmin i18n %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+
+
+ {{ cl.result_count }}
+ {% if cl.result_count == 1 %}
+ {{ cl.opts.verbose_name }}
+ {% else %}
+ {{ cl.opts.verbose_name_plural }}
+ {% endif %}
+
+ {% if show_all_url %}
+
{% trans 'Show all' %}
+ {% endif %}
+ {% if cl.formset and cl.result_count %}
+
+ {% endif %}
+
+
+
+
+
+
diff --git a/templates/admin/popup_response.html b/templates/admin/popup_response.html
new file mode 100644
index 0000000..20fcbfc
--- /dev/null
+++ b/templates/admin/popup_response.html
@@ -0,0 +1,17 @@
+{% load i18n static %}
+
+
+
+ {% trans 'Popup closing...' %}
+
+
+
+
\ No newline at end of file
diff --git a/templates/admin/search_form.html b/templates/admin/search_form.html
new file mode 100644
index 0000000..db22136
--- /dev/null
+++ b/templates/admin/search_form.html
@@ -0,0 +1,42 @@
+{% load i18n static admin_list jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+
\ No newline at end of file
diff --git a/templates/admin/solo/change_form.html b/templates/admin/solo/change_form.html
new file mode 100644
index 0000000..ff667a6
--- /dev/null
+++ b/templates/admin/solo/change_form.html
@@ -0,0 +1,18 @@
+{% extends "admin/change_form.html" %}
+{% load admin_urls i18n jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ opts.verbose_name|capfirst }}
+
+{% endblock %}
+
+{% block object-tools-items %}
+ {% trans 'History' %}
+ {% if has_absolute_url %}
+ {% trans "View on site" %}
+ {% endif %}
+{% endblock %}
diff --git a/templates/admin/solo/object_history.html b/templates/admin/solo/object_history.html
new file mode 100644
index 0000000..ebb6c28
--- /dev/null
+++ b/templates/admin/solo/object_history.html
@@ -0,0 +1,11 @@
+{% extends "admin/object_history.html" %}
+{% load admin_urls i18n %}
+
+{% block breadcrumbs %}
+
+ {% trans 'Home' %}
+ {{ opts.app_config.verbose_name }}
+ {{ module_name }}
+ {% trans 'History' %}
+
+{% endblock %}
diff --git a/templates/admin/submit_line.html b/templates/admin/submit_line.html
new file mode 100644
index 0000000..c3a553e
--- /dev/null
+++ b/templates/admin/submit_line.html
@@ -0,0 +1,42 @@
+{% load i18n admin_urls jazzmin %}
+{% get_jazzmin_ui_tweaks as jazzmin_ui %}
+
+{% block submit-row %}
+
+{% endblock %}
+
diff --git a/uv.lock b/uv.lock
index 372a9c4..1ed04e6 100644
--- a/uv.lock
+++ b/uv.lock
@@ -41,6 +41,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", size = 23828 },
]
+[[package]]
+name = "asttokens"
+version = "2.4.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/45/1d/f03bcb60c4a3212e15f99a56085d93093a497718adf828d050b9d675da81/asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0", size = 62284 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", size = 27764 },
+]
+
+[[package]]
+name = "async-timeout"
+version = "4.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/87/d6/21b30a550dafea84b1b8eee21b5e23fa16d010ae006011221f33dcd8d7f8/async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", size = 8345 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028", size = 5721 },
+]
+
[[package]]
name = "beautifulsoup4"
version = "4.12.3"
@@ -345,6 +366,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a2/80/fb7d668f1be5e4443b7ac191f68390be24f7c2ebd36011741f62c7645eb2/cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84", size = 2989208 },
]
+[[package]]
+name = "decorator"
+version = "5.1.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
+]
+
[[package]]
name = "deep-translator"
version = "1.11.4"
@@ -369,16 +399,16 @@ wheels = [
[[package]]
name = "django"
-version = "5.0"
+version = "5.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "asgiref" },
{ name = "sqlparse" },
{ name = "tzdata", marker = "sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/be/a6/46e250737d46e955e048f6bbc2948fb22f0de3f3ab828d3803070dc1260e/Django-5.0.tar.gz", hash = "sha256:7d29e14dfbc19cb6a95a4bd669edbde11f5d4c6a71fdaa42c2d40b6846e807f7", size = 10585390 }
+sdist = { url = "https://files.pythonhosted.org/packages/1e/0c/d854d25bb74a8a3b41e642bbd27fe6af12fadd0edfd07d487809cf0ef719/Django-5.1.tar.gz", hash = "sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d", size = 10681050 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ba/c7/61b02c0ef9e129080a8c2bffefb3cb2b9ddddece4c44dc473c1c4f0647c1/Django-5.0-py3-none-any.whl", hash = "sha256:3a9fd52b8dbeae335ddf4a9dfa6c6a0853a1122f1fb071a8d5eca979f73a05c8", size = 8136382 },
+ { url = "https://files.pythonhosted.org/packages/28/b4/110532cebfea2244d76119904da98c6fa045ebb202aee9ec7cbf36ea3cad/Django-5.1-py3-none-any.whl", hash = "sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557", size = 8246099 },
]
[[package]]
@@ -431,6 +461,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/09/b1/92f1c30b47c1ebf510c35a2ccad9448f73437e5891bbd2b4febe357cc3de/django_filter-24.3-py3-none-any.whl", hash = "sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64", size = 95011 },
]
+[[package]]
+name = "django-htmx"
+version = "1.19.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asgiref" },
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c7/38/3b5b53b158f3e75da6b68f798514f1b533b0c88f87dd7bb59eb3e4836c32/django_htmx-1.19.0.tar.gz", hash = "sha256:e7e17304e78e07f96eca0affc3ce1806edfdf3538bb7cb1912452b101f3e627d", size = 9791 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/af/a8/831374e1b117c345ee63690186bfdc56ad0b578b0f5ad2361de65d82757e/django_htmx-1.19.0-py3-none-any.whl", hash = "sha256:875a642814e52278c1728842436beda2001847a493ab79fd82da3fb46ead140f", size = 6904 },
+]
+
[[package]]
name = "django-import-export"
version = "4.1.1"
@@ -487,6 +530,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/05/ef/a3ad9941f14a13a5dc9f2bdc8992bf21cc09c462c718711a0281acfab67c/django_resized-1.0.2-py3-none-any.whl", hash = "sha256:d55a8d4125838486a1e76ffb689f8364f7d579bc7562b04400065602ec2ba7cc", size = 5141 },
]
+[[package]]
+name = "django-sesame"
+version = "3.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/eb/88/584aa0c56b0788ef506ca178ba647fc4403b35f4660064dffd43014c3133/django_sesame-3.2.2.tar.gz", hash = "sha256:5d753a309166356b6a0d7fc047690943b9e80b4aa7952f1a6400fe6ce60d573c", size = 17615 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/dd/e7/951f35106972668b61e79635c93933c51c2d58f49a9c8ebf0a8ff7262331/django_sesame-3.2.2-py3-none-any.whl", hash = "sha256:523ebd4d04e28c897c262f25b78b6fd8f37e11cdca6e277fdc8bf496bd686cf5", size = 20289 },
+]
+
[[package]]
name = "django-solo"
version = "2.3.0"
@@ -512,6 +567,27 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/cf/14/20c40882d9ee91f7a2a20d3c0175cf813340c02ae31c975ce567de2c7c67/django_tailwind-3.8.0-py3-none-any.whl", hash = "sha256:fa969c5b95d314b173fe2b2ed2cb2c03f2e2c94fdc2c01ff73a993fa159085da", size = 12936 },
]
+[[package]]
+name = "django-unfold"
+version = "0.39.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/19/4c/808b551f5c75d24c0a6aabf3275c6f661e0b0ab24bd50236fb13b2b16feb/django_unfold-0.39.0.tar.gz", hash = "sha256:927218e8a14f951dd82212a980f3f02608a160f966da656d13ef51be887a610c", size = 811917 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4f/41/855b6d650bf11455e697948f194780d6704e89a2965b18985a5277172099/django_unfold-0.39.0-py3-none-any.whl", hash = "sha256:5393742d0755fc3983ee805ac27213cb7abbe06b563a0cdfd24103ff22480322", size = 877521 },
+]
+
+[[package]]
+name = "django-vite-plugin"
+version = "3.0.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/ec/24786da10b7d32906e99e22f6312333b51fb3d6322647d056ef090d99e64/django_vite_plugin-3.0.4.tar.gz", hash = "sha256:e5964597daa53ad5992f23e99e61dc4168c07ed51077851a3e3f02989697d41c", size = 5825 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5d/e0/4bc110d278d213d3dbccfac6d6f8ab229199d1876251eaa7e7f945de251a/django_vite_plugin-3.0.4-py3-none-any.whl", hash = "sha256:5cc0425cd9a56afc0d1d27d5016e61a6929ad93024307af4195e4b25db340574", size = 8569 },
+]
+
[[package]]
name = "django-webpack-loader"
version = "3.1.1"
@@ -533,6 +609,24 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7c/b6/fa99d8f05eff3a9310286ae84c4059b08c301ae4ab33ae32e46e8ef76491/djangorestframework-3.15.2-py3-none-any.whl", hash = "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20", size = 1071235 },
]
+[[package]]
+name = "exceptiongroup"
+version = "1.2.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 },
+]
+
+[[package]]
+name = "executing"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/7d45f492c2c4a0e8e0fad57d081a7c8a0286cdd86372b070cca1ec0caa1e/executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab", size = 977485 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 },
+]
+
[[package]]
name = "firebase-admin"
version = "6.5.0"
@@ -575,18 +669,24 @@ dependencies = [
{ name = "django-ckeditor" },
{ name = "django-cors-headers" },
{ name = "django-filter" },
+ { name = "django-htmx" },
{ name = "django-import-export" },
{ name = "django-jazzmin" },
{ name = "django-loginas" },
{ name = "django-resized" },
+ { name = "django-sesame" },
{ name = "django-solo" },
{ name = "django-tailwind" },
+ { name = "django-unfold" },
+ { name = "django-vite-plugin" },
{ name = "djangorestframework" },
{ name = "firebase-admin" },
+ { name = "ipython" },
{ name = "mysqlclient" },
{ name = "pillow" },
{ name = "pip" },
{ name = "python-dotenv" },
+ { name = "redis" },
{ name = "stellar-sdk" },
]
@@ -603,22 +703,28 @@ dev = [
requires-dist = [
{ name = "celery", specifier = ">=5.4.0" },
{ name = "deep-translator", specifier = ">=1.11.4" },
- { name = "django", specifier = "==5.0" },
+ { name = "django", specifier = "==5.1" },
{ name = "django-ckeditor", specifier = ">=6.7.1" },
{ name = "django-cors-headers", specifier = ">=4.4.0" },
{ name = "django-filter", specifier = ">=24.3" },
+ { name = "django-htmx", specifier = ">=1.19.0" },
{ name = "django-import-export", specifier = ">=4.1.1" },
{ name = "django-jazzmin", specifier = ">=3.0.0" },
{ name = "django-loginas", specifier = ">=0.3.11" },
{ name = "django-resized", specifier = ">=1.0.2" },
+ { name = "django-sesame", specifier = ">=3.2.2" },
{ name = "django-solo", specifier = ">=2.3.0" },
{ name = "django-tailwind", specifier = ">=3.8.0" },
+ { name = "django-unfold", specifier = ">=0.39.0" },
+ { name = "django-vite-plugin", specifier = ">=3.0.4" },
{ name = "djangorestframework", specifier = ">=3.15.2" },
{ name = "firebase-admin", specifier = ">=6.5.0" },
+ { name = "ipython", specifier = ">=8.27.0" },
{ name = "mysqlclient", specifier = ">=2.2.4" },
{ name = "pillow", specifier = ">=10.4.0" },
{ name = "pip", specifier = ">=24.2" },
{ name = "python-dotenv", specifier = ">=1.0.1" },
+ { name = "redis", specifier = ">=5.0.8" },
{ name = "stellar-sdk", specifier = ">=11.0.0" },
]
@@ -862,6 +968,28 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
]
+[[package]]
+name = "ipython"
+version = "8.27.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "decorator" },
+ { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
+ { name = "jedi" },
+ { name = "matplotlib-inline" },
+ { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
+ { name = "prompt-toolkit" },
+ { name = "pygments" },
+ { name = "stack-data" },
+ { name = "traitlets" },
+ { name = "typing-extensions", marker = "python_full_version < '3.12'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/57/24/d4fabaca03c8804bf0b8d994c8ae3a20e57e9330d277fb43d83e558dec5e/ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e", size = 5494984 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a8/a2/6c725958e6f135d8e5de081e69841bb2c1d84b3fc259d02eb092b8fc203a/ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c", size = 818986 },
+]
+
[[package]]
name = "isort"
version = "5.13.2"
@@ -871,6 +999,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310 },
]
+[[package]]
+name = "jedi"
+version = "0.19.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "parso" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d6/99/99b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a/jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", size = 1227821 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/20/9f/bc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb/jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0", size = 1569361 },
+]
+
[[package]]
name = "kombu"
version = "5.4.1"
@@ -884,6 +1024,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c1/78/c556bf2954bd36f166959ac33d23cde4a8967e61cdb74678585a66edbae0/kombu-5.4.1-py3-none-any.whl", hash = "sha256:621d365f234e4c089596f3a2510f1ade07026efc28caca426161d8f458786cab", size = 201338 },
]
+[[package]]
+name = "matplotlib-inline"
+version = "0.1.7"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "traitlets" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 },
+]
+
[[package]]
name = "mccabe"
version = "0.7.0"
@@ -984,6 +1136,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 },
]
+[[package]]
+name = "parso"
+version = "0.8.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 },
+]
+
[[package]]
name = "pathspec"
version = "0.12.1"
@@ -993,6 +1154,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 },
]
+[[package]]
+name = "pexpect"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ptyprocess" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 },
+]
+
[[package]]
name = "pillow"
version = "10.4.0"
@@ -1108,6 +1281,24 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/51/3d/71fae0078424ba8ea70b222b6fa56ef771a9918ab91cee806c2abc9d57fa/protobuf-5.28.1-py3-none-any.whl", hash = "sha256:c529535e5c0effcf417682563719e5d8ac8d2b93de07a56108b4c2d436d7a29a", size = 169572 },
]
+[[package]]
+name = "ptyprocess"
+version = "0.7.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 },
+]
+
+[[package]]
+name = "pure-eval"
+version = "0.2.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 },
+]
+
[[package]]
name = "pyasn1"
version = "0.6.1"
@@ -1237,6 +1428,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d4/d7/f1b7db88d8e4417c5d47adad627a93547f44bdc9028372dbd2313f34a855/pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a", size = 62725 },
]
+[[package]]
+name = "pygments"
+version = "2.18.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", size = 4891905 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 },
+]
+
[[package]]
name = "pyjwt"
version = "2.9.0"
@@ -1301,6 +1501,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 },
]
+[[package]]
+name = "redis"
+version = "5.0.8"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "async-timeout", marker = "python_full_version < '3.11.3'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/48/10/defc227d65ea9c2ff5244645870859865cba34da7373477c8376629746ec/redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870", size = 4595651 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c5/d1/19a9c76811757684a0f74adc25765c8a901d67f9f6472ac9d57c844a23c8/redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4", size = 255608 },
+]
+
[[package]]
name = "requests"
version = "2.32.3"
@@ -1367,6 +1579,20 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5d/a5/b2860373aa8de1e626b2bdfdd6df4355f0565b47e51f7d0c54fe70faf8fe/sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4", size = 44156 },
]
+[[package]]
+name = "stack-data"
+version = "0.6.3"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asttokens" },
+ { name = "executing" },
+ { name = "pure-eval" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 },
+]
+
[[package]]
name = "stellar-sdk"
version = "11.0.0"
@@ -1412,6 +1638,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757 },
]
+[[package]]
+name = "traitlets"
+version = "5.14.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 },
+]
+
[[package]]
name = "typing-extensions"
version = "4.12.2"
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..2be9e8a
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,12 @@
+//vite.config.js
+import { defineConfig } from 'vite'
+import { djangoVitePlugin } from 'django-vite-plugin'
+
+export default defineConfig({
+ plugins: [
+ djangoVitePlugin([
+ 'jsvite/js/main.js',
+ // 'templatevite/css/style.css',
+ ])
+ ],
+});
\ No newline at end of file
diff --git a/webpack-stats.json b/webpack-stats.json
deleted file mode 100644
index 7c64e2d..0000000
--- a/webpack-stats.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "status": "done",
- "assets": {
- "main.js": {
- "name": "main.js",
- "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\main.js",
- "publicPath": "auto"
- },
- "main.js.LICENSE.txt": {
- "name": "main.js.LICENSE.txt",
- "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\main.js.LICENSE.txt",
- "publicPath": "auto"
- },
- "other.js": {
- "name": "other.js",
- "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\other.js",
- "publicPath": "auto"
- },
- "other.js.LICENSE.txt": {
- "name": "other.js.LICENSE.txt",
- "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\other.js.LICENSE.txt",
- "publicPath": "auto"
- }
- },
- "chunks": {
- "main": [
- "main.js"
- ],
- "other": [
- "other.js"
- ]
- },
- "publicPath": "auto"
-}
\ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
deleted file mode 100644
index 1f7d44d..0000000
--- a/webpack.config.js
+++ /dev/null
@@ -1,47 +0,0 @@
-var path = require("path");
-var BundleTracker = require("webpack-bundle-tracker");
-const FileManagerPlugin = require('filemanager-webpack-plugin');
-
-module.exports = {
- context: __dirname,
- entry: {
- main: "./assets/js/index",
- other: "./assets/js/other",
- },
- output: {
- path: path.resolve(__dirname, "static/webpack_bundles/"),
- publicPath: "auto",
- filename: "[name].js",
- },
-
- plugins: [
- new BundleTracker({ path: __dirname, filename: "webpack-stats.json" }),
- new FileManagerPlugin({
- events: {
- onEnd: {
- copy: [{
- source: './static/webpack_bundles/other.js',
- destination: './frontend/templates/firebase-messaging-sw.js',
- }],
- },
- }
- }),
- ],
-
- module: {
- rules: [
- // we pass the output from babel loader to react-hot loader
- {
- test: /\.jsx?$/,
- exclude: /node_modules/,
- use: {
- loader: "babel-loader",
- },
- },
- ],
- },
-
- resolve: {
- extensions: [".js", ".jsx"],
- },
-};
\ No newline at end of file
From f567c82f2e735f8a8c68be9a93a664bc39bedc7f Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Mon, 23 Sep 2024 21:32:07 +0700
Subject: [PATCH 02/12] update setting
---
projekpi/settings.py | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
diff --git a/projekpi/settings.py b/projekpi/settings.py
index 9529027..c030965 100644
--- a/projekpi/settings.py
+++ b/projekpi/settings.py
@@ -44,6 +44,7 @@
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
+ "django_htmx",
"django.forms",
"corsheaders",
"django_filters",
@@ -62,7 +63,8 @@
"ckeditor",
"apidata",
"django_extensions",
- "webpack_loader",
+ "sesame",
+ "django_vite_plugin"
]
MIDDLEWARE = [
@@ -74,7 +76,7 @@
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
- # "django_htmx.middleware.HtmxMiddleware",
+ "django_htmx.middleware.HtmxMiddleware",
# "django_browser_reload.middleware.BrowserReloadMiddleware",
]
@@ -274,3 +276,19 @@ def CAN_LOGIN_AS(request, target_user):
'LOADER_CLASS': 'webpack_loader.loader.WebpackLoader',
}
}
+
+SESAME_ONE_TIME=True
+
+AUTHENTICATION_BACKENDS = [
+ "django.contrib.auth.backends.ModelBackend",
+ "sesame.backends.ModelBackend",
+]
+
+LOGIN_REDIRECT_URL = '/profile'
+DJANGO_VITE_DEV_MODE = True
+
+DJANGO_VITE_PLUGIN = {
+ "BUILD_DIR": "static/buildvite",
+ "BUILD_URL_PREFIX": "/" + STATIC_URL + "buildvite",
+ "DEV_MODE": False ,
+}
From 70726d11cc8d8506c443d76f284ad85a373d964b Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 06:49:36 +0700
Subject: [PATCH 03/12] update frontend
---
frontend/templates/profil/transaksi_user.html | 11 ++++++-
frontend/templates/toko/listtransaksi.html | 32 ++++++++++++++++---
2 files changed, 38 insertions(+), 5 deletions(-)
diff --git a/frontend/templates/profil/transaksi_user.html b/frontend/templates/profil/transaksi_user.html
index 699a9f0..5642085 100644
--- a/frontend/templates/profil/transaksi_user.html
+++ b/frontend/templates/profil/transaksi_user.html
@@ -59,7 +59,16 @@
{{ tr.produk.nama }}
-
Tanggal diambil: {{ tr.cart.tanggal }}
+ {% if tr.cart.status == 1 %}
+
+ Tanggal order: {{ tr.cart.tanggal }}
+
+ {% endif %}
+ {% if tr.cart.status >= 3 %}
+
+ Tanggal dikirim: {{ tr.cart.tanggal_dikirim }}
+
+ {% endif %}
{{ tr.produk.harga }} Pi
{% if tr.cart.catatan %} {{ tr.cart.catatan | truncatewords:5 }} {% else %} - {% endif %}
diff --git a/frontend/templates/toko/listtransaksi.html b/frontend/templates/toko/listtransaksi.html
index 060e5c6..1980f48 100644
--- a/frontend/templates/toko/listtransaksi.html
+++ b/frontend/templates/toko/listtransaksi.html
@@ -50,7 +50,21 @@
{{ tr.produk.nama }}
-
Tanggal diambil: {{ tr.cart.tanggal }}
+ {% if tr.cart.status == 1 %}
+
+ Tanggal order: {{ tr.cart.tanggal }}
+
+ {% endif %}
+ {% if tr.cart.status == 3 %}
+
+ Tanggal dikirim: {{ tr.cart.tanggal_dikirim }}
+
+ {% endif %}
+ {% if tr.cart.status > 3 %}
+
+ Tanggal dikirim: {{ tr.cart.tanggal_selesai }}
+
+ {% endif %}
{{ tr.produk.harga }} Pi
{% if tr.cart.catatan %} {{ tr.cart.catatan | truncatewords:5 }} {% else %} - {% endif %}
@@ -84,10 +98,20 @@ Detail Barang ({{ tr.cart.kode }}) {{ tr.produk.nama }}
- Tanggal diambil:
+ Tanggal order:
:
{{ tr.cart.tanggal | date:'d M Y' }}
+
+ Tanggal dikirim:
+ :
+ {{ tr.cart.tanggal_dikirim | date:'d M Y' }}
+
+
+ Tanggal selesai:
+ :
+ {{ tr.cart.tanggal_selesai | date:'d M Y' }}
+
{% for t in tr.user_chart.addressuserchartitem_set.all %}
Alamat Pembeli:
@@ -169,8 +193,8 @@ Detail Barang ({{ tr.cart.kode }})
{% if tr.cart.status_toko == 2 %}
Kirim
- {% elif transaksi.cart.status_toko >= 3 %}
- Laporkan
+ {% elif tr.cart.status_toko == 3 %}
+ Laporkan
{% endif %}
Close
From 909832ee407b9e64114dba540d339aa05dd24585 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 19:15:14 +0700
Subject: [PATCH 04/12] update gh action
---
.github/workflows/deploy_toserver_production.yml | 7 -------
.github/workflows/deploy_toserver_test.yml | 11 ++++-------
2 files changed, 4 insertions(+), 14 deletions(-)
diff --git a/.github/workflows/deploy_toserver_production.yml b/.github/workflows/deploy_toserver_production.yml
index 930f111..9a4b8b2 100644
--- a/.github/workflows/deploy_toserver_production.yml
+++ b/.github/workflows/deploy_toserver_production.yml
@@ -14,10 +14,3 @@ jobs:
port: ${{ secrets.PORT }}
script: |
cd /opt/GPMain
- git pull origin main
- export $(grep -v '^#' .env | xargs)
- /opt/geraienv/bin/python /opt/GPMain/manage.py makemigrations
- /opt/geraienv/bin/python /opt/GPMain/manage.py migrate
- echo yes | /opt/geraienv/bin/python /opt/GPMain/manage.py collectstatic
- service uwsgi restart
- service nginx restart
diff --git a/.github/workflows/deploy_toserver_test.yml b/.github/workflows/deploy_toserver_test.yml
index 1c31b53..91209d4 100644
--- a/.github/workflows/deploy_toserver_test.yml
+++ b/.github/workflows/deploy_toserver_test.yml
@@ -13,11 +13,8 @@ jobs:
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
- cd /opt/geraipi
- git pull origin2 main
+ cd $HOME/Projek/geraipi_test
+ source $HOME/virtualenv/Projek/geraipi_test/3.10/bin/activate
+ git pull origin main
export $(grep -v '^#' .env | xargs)
- /opt/geraienv/bin/python /opt/geraipi/manage.py makemigrations
- /opt/geraienv/bin/python /opt/geraipi/manage.py migrate
- echo yes | /opt/geraienv/bin/python /opt/geraipi/manage.py collectstatic
- service uwsgi restart
- service nginx restart
+ touch tmp/restart.txt
From ae53b1676ab2f021224f16af2dda71fd409f61a4 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 19:28:41 +0700
Subject: [PATCH 05/12] update gh action
---
.github/workflows/deploy_toserver_test.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/deploy_toserver_test.yml b/.github/workflows/deploy_toserver_test.yml
index 91209d4..af9ca75 100644
--- a/.github/workflows/deploy_toserver_test.yml
+++ b/.github/workflows/deploy_toserver_test.yml
@@ -16,5 +16,4 @@ jobs:
cd $HOME/Projek/geraipi_test
source $HOME/virtualenv/Projek/geraipi_test/3.10/bin/activate
git pull origin main
- export $(grep -v '^#' .env | xargs)
touch tmp/restart.txt
From 072c5e6ffb3b259b886a5660ea1353bf5803a37c Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 20:28:36 +0700
Subject: [PATCH 06/12] update gh action
---
.github/workflows/deploy_toserver_test.yml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/deploy_toserver_test.yml b/.github/workflows/deploy_toserver_test.yml
index af9ca75..9df0bfb 100644
--- a/.github/workflows/deploy_toserver_test.yml
+++ b/.github/workflows/deploy_toserver_test.yml
@@ -1,5 +1,9 @@
name: Deploy to server test
-on: [workflow_dispatch]
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
jobs:
build:
name: build-apps
From b3323461c59be0af2d9f88318569a249d1299bee Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 20:52:30 +0700
Subject: [PATCH 07/12] update gh action
---
.github/workflows/deploy_toserver_production.yml | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/deploy_toserver_production.yml b/.github/workflows/deploy_toserver_production.yml
index 9a4b8b2..514fb1b 100644
--- a/.github/workflows/deploy_toserver_production.yml
+++ b/.github/workflows/deploy_toserver_production.yml
@@ -1,5 +1,9 @@
name: Deploy to server production
-on: [workflow_dispatch]
+on:
+ push:
+ branches: [ "main" ]
+ pull_request:
+ branches: [ "main" ]
jobs:
build:
name: build-apps
@@ -13,4 +17,7 @@ jobs:
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
- cd /opt/GPMain
+ cd $HOME/Projek/geraipi_main
+ source $HOME/virtualenv/Projek/geraipi_main/3.10/bin/activate
+ git pull origin main
+ touch tmp/restart.txt
From b7598b26575169020ae4de691a9a2c43fe1803dc Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 21:00:33 +0700
Subject: [PATCH 08/12] update gh action
---
.github/workflows/license_scan.yml | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 .github/workflows/license_scan.yml
diff --git a/.github/workflows/license_scan.yml b/.github/workflows/license_scan.yml
new file mode 100644
index 0000000..6101fbe
--- /dev/null
+++ b/.github/workflows/license_scan.yml
@@ -0,0 +1,30 @@
+name: Python matrix CI
+
+on: [push]
+
+jobs:
+ build:
+ runs-on: ubuntu-22.04
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ python-version: [3.10.12]
+ steps:
+ - uses: actions/checkout@v1
+ - name: Set up Python
+ uses: actions/setup-python@v1
+ with:
+ python-version: ${{ matrix.python-version }}
+ - name: Install dependencies
+ run: |
+ python3 -m pip install --upgrade pip
+ pip install -r requirements-dev.txt
+ - name: Lint with flake8
+ run: |
+ # stop the build if there are Python syntax errors or undefined names
+ flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
+ # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
+ flake8 . --count --exit-zero --statistics
+ - name: Test with pytest
+ run: |
+ pytest --cov=. test
\ No newline at end of file
From 9b540fb62d1b677c897aa0b8ac5586fc2c619e35 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 21:01:51 +0700
Subject: [PATCH 09/12] update gh action
---
.github/workflows/license_scan.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/license_scan.yml b/.github/workflows/license_scan.yml
index 6101fbe..c80da69 100644
--- a/.github/workflows/license_scan.yml
+++ b/.github/workflows/license_scan.yml
@@ -8,7 +8,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
- python-version: [3.10.12]
+ python-version: [3.10.15]
steps:
- uses: actions/checkout@v1
- name: Set up Python
From 39687f1046ad931b0f81e245b012670806fa0f84 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 21:03:45 +0700
Subject: [PATCH 10/12] update gh action
---
requirements-dev.txt | 269 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 269 insertions(+)
create mode 100644 requirements-dev.txt
diff --git a/requirements-dev.txt b/requirements-dev.txt
new file mode 100644
index 0000000..322bfad
--- /dev/null
+++ b/requirements-dev.txt
@@ -0,0 +1,269 @@
+# This file was autogenerated by uv via the following command:
+# uv pip compile pyproject.toml -o requirements.txt
+amqp==5.1.1
+ # via kombu
+annotated-types==0.7.0
+ # via pydantic
+asgiref==3.8.1
+ # via
+ # django
+ # django-cors-headers
+ # django-htmx
+asttokens==2.4.1
+ # via stack-data
+async-timeout==4.0.3
+ # via redis
+beautifulsoup4==4.12.3
+ # via deep-translator
+billiard==4.2.0
+ # via celery
+cachecontrol==0.14.0
+ # via firebase-admin
+cachetools==5.3.2
+ # via google-auth
+celery==5.4.0
+ # via geraipi (pyproject.toml)
+certifi==2022.9.24
+ # via requests
+cffi==1.15.1
+ # via
+ # cryptography
+ # pynacl
+charset-normalizer==2.1.1
+ # via requests
+click==8.1.3
+ # via
+ # celery
+ # click-didyoumean
+ # click-plugins
+ # click-repl
+click-didyoumean==0.3.0
+ # via celery
+click-plugins==1.1.1
+ # via celery
+click-repl==0.2.0
+ # via celery
+cryptography==38.0.1
+ # via pyjwt
+decorator==5.1.1
+ # via ipython
+deep-translator==1.11.4
+ # via geraipi (pyproject.toml)
+diff-match-patch==20200713
+ # via django-import-export
+django==5.0
+ # via
+ # geraipi (pyproject.toml)
+ # django-ckeditor
+ # django-cors-headers
+ # django-filter
+ # django-htmx
+ # django-import-export
+ # django-jazzmin
+ # django-js-asset
+ # django-sesame
+ # django-solo
+ # django-tailwind
+ # djangorestframework
+django-ckeditor==6.7.1
+ # via geraipi (pyproject.toml)
+django-cors-headers==4.4.0
+ # via geraipi (pyproject.toml)
+django-filter==24.3
+ # via geraipi (pyproject.toml)
+django-htmx==1.19.0
+ # via geraipi (pyproject.toml)
+django-import-export==4.1.1
+ # via geraipi (pyproject.toml)
+django-jazzmin==3.0.0
+ # via geraipi (pyproject.toml)
+django-js-asset==2.0.0
+ # via django-ckeditor
+django-loginas==0.3.11
+ # via geraipi (pyproject.toml)
+django-resized==1.0.2
+ # via geraipi (pyproject.toml)
+django-sesame==3.2.2
+ # via geraipi (pyproject.toml)
+django-solo==2.3.0
+ # via geraipi (pyproject.toml)
+django-tailwind==3.8.0
+ # via geraipi (pyproject.toml)
+django-vite-plugin==3.0.4
+ # via geraipi (pyproject.toml)
+djangorestframework==3.15.2
+ # via geraipi (pyproject.toml)
+exceptiongroup==1.2.2
+ # via ipython
+executing==2.1.0
+ # via stack-data
+firebase-admin==6.5.0
+ # via geraipi (pyproject.toml)
+google-api-core==2.17.1
+ # via
+ # firebase-admin
+ # google-api-python-client
+ # google-cloud-core
+ # google-cloud-firestore
+ # google-cloud-storage
+google-api-python-client==2.118.0
+ # via firebase-admin
+google-auth==2.28.0
+ # via
+ # google-api-core
+ # google-api-python-client
+ # google-auth-httplib2
+ # google-cloud-core
+ # google-cloud-storage
+google-auth-httplib2==0.2.0
+ # via google-api-python-client
+google-cloud-core==2.4.1
+ # via
+ # google-cloud-firestore
+ # google-cloud-storage
+google-cloud-firestore==2.14.0
+ # via firebase-admin
+google-cloud-storage==2.14.0
+ # via firebase-admin
+google-crc32c==1.5.0
+ # via
+ # google-cloud-storage
+ # google-resumable-media
+google-resumable-media==2.7.0
+ # via google-cloud-storage
+googleapis-common-protos==1.62.0
+ # via
+ # google-api-core
+ # grpcio-status
+grpcio==1.60.1
+ # via
+ # google-api-core
+ # grpcio-status
+grpcio-status==1.60.1
+ # via google-api-core
+httplib2==0.22.0
+ # via
+ # google-api-python-client
+ # google-auth-httplib2
+idna==2.10
+ # via requests
+ipython==8.27.0
+ # via geraipi (pyproject.toml)
+jedi==0.19.1
+ # via ipython
+kombu==5.4.1
+ # via celery
+matplotlib-inline==0.1.7
+ # via ipython
+mnemonic==0.20
+ # via stellar-sdk
+msgpack==1.0.7
+ # via cachecontrol
+mysqlclient==2.2.4
+ # via geraipi (pyproject.toml)
+parso==0.8.4
+ # via jedi
+pexpect==4.9.0
+ # via ipython
+pillow==10.4.0
+ # via geraipi (pyproject.toml)
+pip==24.2
+ # via geraipi (pyproject.toml)
+prompt-toolkit==3.0.47
+ # via
+ # click-repl
+ # ipython
+proto-plus==1.23.0
+ # via google-cloud-firestore
+protobuf==4.25.3
+ # via
+ # google-api-core
+ # google-cloud-firestore
+ # googleapis-common-protos
+ # grpcio-status
+ # proto-plus
+ptyprocess==0.7.0
+ # via pexpect
+pure-eval==0.2.3
+ # via stack-data
+pyasn1==0.5.1
+ # via
+ # pyasn1-modules
+ # rsa
+pyasn1-modules==0.3.0
+ # via google-auth
+pycparser==2.21
+ # via cffi
+pydantic==2.9.1
+ # via stellar-sdk
+pydantic-core==2.23.3
+ # via pydantic
+pygments==2.18.0
+ # via ipython
+pyjwt==2.6.0
+ # via firebase-admin
+pynacl==1.5.0
+ # via stellar-sdk
+pyparsing==3.0.9
+ # via httplib2
+python-dateutil==2.8.2
+ # via celery
+python-dotenv==1.0.1
+ # via geraipi (pyproject.toml)
+redis==5.0.8
+ # via geraipi (pyproject.toml)
+requests==2.32.3
+ # via
+ # cachecontrol
+ # deep-translator
+ # google-api-core
+ # google-cloud-storage
+ # requests-sse
+ # stellar-sdk
+requests-sse==0.3.2
+ # via stellar-sdk
+rsa==4.9
+ # via google-auth
+six==1.16.0
+ # via
+ # asttokens
+ # click-repl
+ # python-dateutil
+soupsieve==2.5
+ # via beautifulsoup4
+sqlparse==0.4.3
+ # via django
+stack-data==0.6.3
+ # via ipython
+stellar-sdk==11.0.0
+ # via geraipi (pyproject.toml)
+tablib==3.5.0
+ # via django-import-export
+toml==0.10.2
+ # via stellar-sdk
+traitlets==5.14.3
+ # via
+ # ipython
+ # matplotlib-inline
+typing-extensions==4.7.1
+ # via
+ # asgiref
+ # django-solo
+ # ipython
+ # pydantic
+ # pydantic-core
+tzdata==2024.1
+ # via celery
+uritemplate==4.1.1
+ # via google-api-python-client
+urllib3==1.26.12
+ # via requests
+vine==5.1.0
+ # via
+ # amqp
+ # celery
+ # kombu
+wcwidth==0.2.5
+ # via prompt-toolkit
+xdrlib3==0.1.1
+ # via stellar-sdk
From 9ed47c0e566e7600e98d8cdad8dd4167d8bc8d91 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 21:34:27 +0700
Subject: [PATCH 11/12] update gh action
---
requirements-dev.txt | 942 +++++++++++++++++++++++++++++++------------
requirements.txt | 891 ++++++++++++++++++++++++++++------------
2 files changed, 1295 insertions(+), 538 deletions(-)
diff --git a/requirements-dev.txt b/requirements-dev.txt
index 322bfad..d2a770c 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,269 +1,673 @@
-# This file was autogenerated by uv via the following command:
-# uv pip compile pyproject.toml -o requirements.txt
-amqp==5.1.1
- # via kombu
-annotated-types==0.7.0
- # via pydantic
-asgiref==3.8.1
- # via
- # django
- # django-cors-headers
- # django-htmx
-asttokens==2.4.1
- # via stack-data
-async-timeout==4.0.3
- # via redis
-beautifulsoup4==4.12.3
- # via deep-translator
-billiard==4.2.0
- # via celery
-cachecontrol==0.14.0
- # via firebase-admin
-cachetools==5.3.2
- # via google-auth
-celery==5.4.0
- # via geraipi (pyproject.toml)
-certifi==2022.9.24
- # via requests
-cffi==1.15.1
- # via
- # cryptography
- # pynacl
-charset-normalizer==2.1.1
- # via requests
-click==8.1.3
- # via
- # celery
- # click-didyoumean
- # click-plugins
- # click-repl
-click-didyoumean==0.3.0
- # via celery
-click-plugins==1.1.1
- # via celery
-click-repl==0.2.0
- # via celery
-cryptography==38.0.1
- # via pyjwt
-decorator==5.1.1
- # via ipython
-deep-translator==1.11.4
- # via geraipi (pyproject.toml)
-diff-match-patch==20200713
- # via django-import-export
-django==5.0
- # via
- # geraipi (pyproject.toml)
- # django-ckeditor
- # django-cors-headers
- # django-filter
- # django-htmx
- # django-import-export
- # django-jazzmin
- # django-js-asset
- # django-sesame
- # django-solo
- # django-tailwind
- # djangorestframework
-django-ckeditor==6.7.1
- # via geraipi (pyproject.toml)
-django-cors-headers==4.4.0
- # via geraipi (pyproject.toml)
-django-filter==24.3
- # via geraipi (pyproject.toml)
-django-htmx==1.19.0
- # via geraipi (pyproject.toml)
-django-import-export==4.1.1
- # via geraipi (pyproject.toml)
-django-jazzmin==3.0.0
- # via geraipi (pyproject.toml)
-django-js-asset==2.0.0
- # via django-ckeditor
-django-loginas==0.3.11
- # via geraipi (pyproject.toml)
-django-resized==1.0.2
- # via geraipi (pyproject.toml)
-django-sesame==3.2.2
- # via geraipi (pyproject.toml)
-django-solo==2.3.0
- # via geraipi (pyproject.toml)
-django-tailwind==3.8.0
- # via geraipi (pyproject.toml)
-django-vite-plugin==3.0.4
- # via geraipi (pyproject.toml)
-djangorestframework==3.15.2
- # via geraipi (pyproject.toml)
-exceptiongroup==1.2.2
- # via ipython
-executing==2.1.0
- # via stack-data
-firebase-admin==6.5.0
- # via geraipi (pyproject.toml)
-google-api-core==2.17.1
- # via
- # firebase-admin
- # google-api-python-client
- # google-cloud-core
- # google-cloud-firestore
- # google-cloud-storage
-google-api-python-client==2.118.0
- # via firebase-admin
-google-auth==2.28.0
- # via
- # google-api-core
- # google-api-python-client
- # google-auth-httplib2
- # google-cloud-core
- # google-cloud-storage
-google-auth-httplib2==0.2.0
- # via google-api-python-client
-google-cloud-core==2.4.1
- # via
- # google-cloud-firestore
- # google-cloud-storage
-google-cloud-firestore==2.14.0
- # via firebase-admin
-google-cloud-storage==2.14.0
- # via firebase-admin
-google-crc32c==1.5.0
- # via
- # google-cloud-storage
- # google-resumable-media
-google-resumable-media==2.7.0
- # via google-cloud-storage
-googleapis-common-protos==1.62.0
- # via
- # google-api-core
- # grpcio-status
-grpcio==1.60.1
- # via
- # google-api-core
- # grpcio-status
-grpcio-status==1.60.1
- # via google-api-core
-httplib2==0.22.0
- # via
- # google-api-python-client
- # google-auth-httplib2
-idna==2.10
- # via requests
-ipython==8.27.0
- # via geraipi (pyproject.toml)
-jedi==0.19.1
- # via ipython
-kombu==5.4.1
- # via celery
-matplotlib-inline==0.1.7
- # via ipython
-mnemonic==0.20
- # via stellar-sdk
-msgpack==1.0.7
- # via cachecontrol
-mysqlclient==2.2.4
- # via geraipi (pyproject.toml)
-parso==0.8.4
- # via jedi
-pexpect==4.9.0
- # via ipython
-pillow==10.4.0
- # via geraipi (pyproject.toml)
-pip==24.2
- # via geraipi (pyproject.toml)
-prompt-toolkit==3.0.47
- # via
- # click-repl
- # ipython
-proto-plus==1.23.0
- # via google-cloud-firestore
-protobuf==4.25.3
- # via
- # google-api-core
- # google-cloud-firestore
- # googleapis-common-protos
- # grpcio-status
- # proto-plus
-ptyprocess==0.7.0
- # via pexpect
-pure-eval==0.2.3
- # via stack-data
-pyasn1==0.5.1
- # via
- # pyasn1-modules
- # rsa
-pyasn1-modules==0.3.0
- # via google-auth
-pycparser==2.21
- # via cffi
-pydantic==2.9.1
- # via stellar-sdk
-pydantic-core==2.23.3
- # via pydantic
-pygments==2.18.0
- # via ipython
-pyjwt==2.6.0
- # via firebase-admin
-pynacl==1.5.0
- # via stellar-sdk
-pyparsing==3.0.9
- # via httplib2
-python-dateutil==2.8.2
- # via celery
-python-dotenv==1.0.1
- # via geraipi (pyproject.toml)
-redis==5.0.8
- # via geraipi (pyproject.toml)
-requests==2.32.3
- # via
- # cachecontrol
- # deep-translator
- # google-api-core
- # google-cloud-storage
- # requests-sse
- # stellar-sdk
-requests-sse==0.3.2
- # via stellar-sdk
-rsa==4.9
- # via google-auth
-six==1.16.0
- # via
- # asttokens
- # click-repl
- # python-dateutil
-soupsieve==2.5
- # via beautifulsoup4
-sqlparse==0.4.3
- # via django
-stack-data==0.6.3
- # via ipython
-stellar-sdk==11.0.0
- # via geraipi (pyproject.toml)
-tablib==3.5.0
- # via django-import-export
-toml==0.10.2
- # via stellar-sdk
-traitlets==5.14.3
- # via
- # ipython
- # matplotlib-inline
-typing-extensions==4.7.1
- # via
- # asgiref
- # django-solo
- # ipython
- # pydantic
- # pydantic-core
-tzdata==2024.1
- # via celery
-uritemplate==4.1.1
- # via google-api-python-client
-urllib3==1.26.12
- # via requests
-vine==5.1.0
- # via
- # amqp
- # celery
- # kombu
-wcwidth==0.2.5
- # via prompt-toolkit
-xdrlib3==0.1.1
- # via stellar-sdk
+# This file was autogenerated via `uv export`.
+amqp==5.2.0 \
+ --hash=sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd \
+ --hash=sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637
+annotated-types==0.7.0 \
+ --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 \
+ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+asgiref==3.8.1 \
+ --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 \
+ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47
+asttokens==2.4.1 \
+ --hash=sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0 \
+ --hash=sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24
+async-timeout==4.0.3 ; python_full_version < '3.11.3' \
+ --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \
+ --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028
+beautifulsoup4==4.12.3 \
+ --hash=sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051 \
+ --hash=sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed
+billiard==4.2.0 \
+ --hash=sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c \
+ --hash=sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d
+black==24.8.0 \
+ --hash=sha256:2500945420b6784c38b9ee885af039f5e7471ef284ab03fa35ecdde4688cd83f \
+ --hash=sha256:09cdeb74d494ec023ded657f7092ba518e8cf78fa8386155e4a03fdcc44679e6 \
+ --hash=sha256:81c6742da39f33b08e791da38410f32e27d632260e599df7245cccee2064afeb \
+ --hash=sha256:707a1ca89221bc8a1a64fb5e15ef39cd755633daa672a9db7498d1c19de66a42 \
+ --hash=sha256:d6417535d99c37cee4091a2f24eb2b6d5ec42b144d50f1f2e436d9fe1916fe1a \
+ --hash=sha256:fb6e2c0b86bbd43dee042e48059c9ad7830abd5c94b0bc518c0eeec57c3eddc1 \
+ --hash=sha256:837fd281f1908d0076844bc2b801ad2d369c78c45cf800cad7b61686051041af \
+ --hash=sha256:62e8730977f0b77998029da7971fa896ceefa2c4c4933fcd593fa599ecbf97a4 \
+ --hash=sha256:72901b4913cbac8972ad911dc4098d5753704d1f3c56e44ae8dce99eecb0e3af \
+ --hash=sha256:7c046c1d1eeb7aea9335da62472481d3bbf3fd986e093cffd35f4385c94ae368 \
+ --hash=sha256:649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed \
+ --hash=sha256:2b59b250fdba5f9a9cd9d0ece6e6d993d91ce877d121d161e4698af3eb9c1018 \
+ --hash=sha256:6e55d30d44bed36593c3163b9bc63bf58b3b30e4611e4d88a0c3c239930ed5b2 \
+ --hash=sha256:972085c618ee94f402da1af548a4f218c754ea7e5dc70acb168bfaca4c2542ed
+cachecontrol==0.14.0 \
+ --hash=sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938 \
+ --hash=sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0
+cachetools==5.5.0 \
+ --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a \
+ --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292
+celery==5.4.0 \
+ --hash=sha256:504a19140e8d3029d5acad88330c541d4c3f64c789d85f94756762d8bca7e706 \
+ --hash=sha256:369631eb580cf8c51a82721ec538684994f8277637edde2dfc0dacd73ed97f64
+certifi==2024.8.30 \
+ --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 \
+ --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8
+cffi==1.17.1 \
+ --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
+ --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
+ --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
+ --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
+ --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
+ --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
+ --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
+ --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
+ --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
+ --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
+ --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
+ --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
+ --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
+ --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
+ --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
+ --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
+ --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
+ --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
+ --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
+ --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
+ --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
+ --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
+ --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b \
+ --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
+ --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
+ --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
+ --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
+ --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
+ --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
+ --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
+ --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
+ --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
+ --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
+ --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
+ --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
+ --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
+ --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
+ --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
+ --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
+ --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
+ --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
+ --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
+ --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
+ --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
+ --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
+ --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
+ --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a
+charset-normalizer==3.3.2 \
+ --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \
+ --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \
+ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
+ --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \
+ --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \
+ --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \
+ --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \
+ --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \
+ --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \
+ --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \
+ --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \
+ --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \
+ --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \
+ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
+ --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \
+ --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \
+ --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \
+ --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \
+ --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \
+ --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \
+ --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \
+ --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \
+ --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \
+ --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \
+ --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \
+ --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \
+ --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \
+ --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \
+ --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \
+ --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \
+ --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \
+ --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \
+ --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \
+ --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \
+ --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \
+ --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \
+ --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \
+ --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \
+ --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \
+ --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \
+ --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \
+ --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \
+ --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \
+ --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \
+ --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \
+ --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \
+ --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc
+click==8.1.7 \
+ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de \
+ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28
+click-didyoumean==0.3.1 \
+ --hash=sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463 \
+ --hash=sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c
+click-plugins==1.1.1 \
+ --hash=sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b \
+ --hash=sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8
+click-repl==0.3.0 \
+ --hash=sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9 \
+ --hash=sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812
+colorama==0.4.6 ; sys_platform == 'win32' or platform_system == 'Windows' \
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+cryptography==43.0.1 \
+ --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
+ --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
+ --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
+ --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
+ --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
+ --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
+ --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
+ --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
+ --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
+ --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
+ --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
+ --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
+ --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
+ --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
+ --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
+ --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
+ --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
+ --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
+ --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
+ --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
+ --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
+ --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289 \
+ --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84
+decorator==5.1.1 \
+ --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \
+ --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
+deep-translator==1.11.4 \
+ --hash=sha256:801260c69231138707ea88a0955e484db7d40e210c9e0ae0f77372ffda5f4bf5 \
+ --hash=sha256:d635df037e23fa35d12fd42dab72a0b55c9dd19e6292009ee7207e3f30b9e60a
+diff-match-patch==20230430 \
+ --hash=sha256:953019cdb9c9d2c9e47b5b12bcff3cf4746fc4598eb406076fa1fc27e6a1f15c \
+ --hash=sha256:dce43505fb7b1b317de7195579388df0746d90db07015ed47a85e5e44930ef93
+django==5.1 \
+ --hash=sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d \
+ --hash=sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557
+django-ckeditor==6.7.1 \
+ --hash=sha256:7144f9ead662306266c728912487313b3b87ba2abf9dbb82c447f662ce25d1f7 \
+ --hash=sha256:55b5f9ce3af47e3c8a8ed37d42be8439da2a664d6e571c2247c1db5c96459dd7
+django-cors-headers==4.4.0 \
+ --hash=sha256:92cf4633e22af67a230a1456cb1b7a02bb213d6536d2dcb2a4a24092ea9cebc2 \
+ --hash=sha256:5c6e3b7fe870876a1efdfeb4f433782c3524078fa0dc9e0195f6706ce7a242f6
+django-extensions==3.2.3 \
+ --hash=sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a \
+ --hash=sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401
+django-filter==24.3 \
+ --hash=sha256:d8ccaf6732afd21ca0542f6733b11591030fa98669f8d15599b358e24a2cd9c3 \
+ --hash=sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64
+django-htmx==1.19.0 \
+ --hash=sha256:e7e17304e78e07f96eca0affc3ce1806edfdf3538bb7cb1912452b101f3e627d \
+ --hash=sha256:875a642814e52278c1728842436beda2001847a493ab79fd82da3fb46ead140f
+django-import-export==4.1.1 \
+ --hash=sha256:16ecc5a9f0df46bde6eb278a3e65ebda0ee1db55656f36440e9fb83f40ab85a3 \
+ --hash=sha256:730ae2443a02b1ba27d8dba078a27ae9123adfcabb78161b4f130843607b3df9
+django-jazzmin==3.0.0 \
+ --hash=sha256:424ac3e0f7bfd9ce973b581a66abde92035ba6c5b17605615fdf6bd97c4dcb33 \
+ --hash=sha256:95ef5d7571519c4c53c24083ec417a0db126aaf1d7dc7311e034a90e430392b3
+django-js-asset==2.2.0 \
+ --hash=sha256:0c57a82cae2317e83951d956110ce847f58ff0cdc24e314dbc18b35033917e94 \
+ --hash=sha256:7ef3e858e13d06f10799b56eea62b1e76706f42cf4e709be4e13356bc0ae30d8
+django-loginas==0.3.11 \
+ --hash=sha256:37aec6fcd1cdb72378b69d2468d2ae39b12cd013f838a9bf9b9b5132e8341735 \
+ --hash=sha256:5492eb5b4eb86c05e86cd84fb1f89c9796498643dc23d19e9c9bf83f5768ba86
+django-resized==1.0.2 \
+ --hash=sha256:52d727860f64ef4fdadbe2e74b66231c71c59df4d95949e338fcd320450f77fa \
+ --hash=sha256:d55a8d4125838486a1e76ffb689f8364f7d579bc7562b04400065602ec2ba7cc
+django-sesame==3.2.2 \
+ --hash=sha256:5d753a309166356b6a0d7fc047690943b9e80b4aa7952f1a6400fe6ce60d573c \
+ --hash=sha256:523ebd4d04e28c897c262f25b78b6fd8f37e11cdca6e277fdc8bf496bd686cf5
+django-solo==2.3.0 \
+ --hash=sha256:e82ee8b0aeccb97c401dc722bf01f665c93484c880e929f2a0ea53f5cbf2bf61 \
+ --hash=sha256:8069319fc9a3dc1080dc47b134d42526bf71749127eca1bf94bd7eb831c02fb2
+django-tailwind==3.8.0 \
+ --hash=sha256:31c2f4a7879d685c2de0feaf0b63f246200b37337bea4d7dbafb59bc3f10c008 \
+ --hash=sha256:fa969c5b95d314b173fe2b2ed2cb2c03f2e2c94fdc2c01ff73a993fa159085da
+django-unfold==0.39.0 \
+ --hash=sha256:927218e8a14f951dd82212a980f3f02608a160f966da656d13ef51be887a610c \
+ --hash=sha256:5393742d0755fc3983ee805ac27213cb7abbe06b563a0cdfd24103ff22480322
+django-vite-plugin==3.0.4 \
+ --hash=sha256:e5964597daa53ad5992f23e99e61dc4168c07ed51077851a3e3f02989697d41c \
+ --hash=sha256:5cc0425cd9a56afc0d1d27d5016e61a6929ad93024307af4195e4b25db340574
+django-webpack-loader==3.1.1 \
+ --hash=sha256:f11b79700d1bfc1299131bdf4ba479c1ec200f83a1400e1a2feb5c2ba7b6f8c4 \
+ --hash=sha256:15c05cb685b113c5e6f947efa8ee3888a03c2969a2dd0da4c7610b3e695f67ba
+djangorestframework==3.15.2 \
+ --hash=sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad \
+ --hash=sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20
+exceptiongroup==1.2.2 ; python_full_version < '3.11' \
+ --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc \
+ --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b
+executing==2.1.0 \
+ --hash=sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab \
+ --hash=sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf
+firebase-admin==6.5.0 \
+ --hash=sha256:e716dde1447f0a1cd1523be76ff872df33c4e1a3c079564ace033b2ad60bcc4f \
+ --hash=sha256:fe34ee3ca0e625c5156b3931ca4b4b69b5fc344dbe51bba9706ff674ce277898
+flake8==7.1.1 \
+ --hash=sha256:049d058491e228e03e67b390f311bbf88fce2dbaa8fa673e7aea87b7198b8d38 \
+ --hash=sha256:597477df7860daa5aa0fdd84bf5208a043ab96b8e96ab708770ae0364dd03213
+google-api-core==2.19.2 \
+ --hash=sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f \
+ --hash=sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4
+google-api-python-client==2.145.0 \
+ --hash=sha256:8b84dde11aaccadc127e4846f5cd932331d804ea324e353131595e3f25376e97 \
+ --hash=sha256:d74da1358f3f2d63daf3c6f26bd96d89652051183bc87cf10a56ceb2a70beb50
+google-auth==2.34.0 \
+ --hash=sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc \
+ --hash=sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65
+google-auth-httplib2==0.2.0 \
+ --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \
+ --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d
+google-cloud-core==2.4.1 \
+ --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \
+ --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61
+google-cloud-firestore==2.18.0 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:3db5dd42334b9904d82b3786703a5a4b576810fb50f61b8fa83ecf4f17b7fdae \
+ --hash=sha256:9a735860b692f39f93f900dd3390713ceb9b47ea82cda98360bb551f03d2b916
+google-cloud-storage==2.18.2 \
+ --hash=sha256:aaf7acd70cdad9f274d29332673fcab98708d0e1f4dceb5a5356aaef06af4d99 \
+ --hash=sha256:97a4d45c368b7d401ed48c4fdfe86e1e1cb96401c9e199e419d289e2c0370166
+google-crc32c==1.6.0 \
+ --hash=sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc \
+ --hash=sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa \
+ --hash=sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9 \
+ --hash=sha256:a184243544811e4a50d345838a883733461e67578959ac59964e43cca2c791e7 \
+ --hash=sha256:236c87a46cdf06384f614e9092b82c05f81bd34b80248021f729396a78e55d7e \
+ --hash=sha256:ebab974b1687509e5c973b5c4b8b146683e101e102e17a86bd196ecaa4d099fc \
+ --hash=sha256:50cf2a96da226dcbff8671233ecf37bf6e95de98b2a2ebadbfdf455e6d05df42 \
+ --hash=sha256:f7a1fc29803712f80879b0806cb83ab24ce62fc8daf0569f2204a0cfd7f68ed4 \
+ --hash=sha256:40b05ab32a5067525670880eb5d169529089a26fe35dce8891127aeddc1950e8 \
+ --hash=sha256:a9e4b426c3702f3cd23b933436487eb34e01e00327fac20c9aebb68ccf34117d \
+ --hash=sha256:51c4f54dd8c6dfeb58d1df5e4f7f97df8abf17a36626a217f169893d1d7f3e9f \
+ --hash=sha256:bb8b3c75bd157010459b15222c3fd30577042a7060e29d42dabce449c087f2b3 \
+ --hash=sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d \
+ --hash=sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b \
+ --hash=sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00 \
+ --hash=sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3 \
+ --hash=sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760 \
+ --hash=sha256:48abd62ca76a2cbe034542ed1b6aee851b6f28aaca4e6551b5599b6f3ef175cc \
+ --hash=sha256:18e311c64008f1f1379158158bb3f0c8d72635b9eb4f9545f8cf990c5668e59d
+google-resumable-media==2.7.2 \
+ --hash=sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0 \
+ --hash=sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa
+googleapis-common-protos==1.65.0 \
+ --hash=sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0 \
+ --hash=sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63
+grpcio==1.66.1 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2 \
+ --hash=sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492 \
+ --hash=sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac \
+ --hash=sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60 \
+ --hash=sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f \
+ --hash=sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083 \
+ --hash=sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a \
+ --hash=sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d \
+ --hash=sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c \
+ --hash=sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858 \
+ --hash=sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a \
+ --hash=sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26 \
+ --hash=sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df \
+ --hash=sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22 \
+ --hash=sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1 \
+ --hash=sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e \
+ --hash=sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd \
+ --hash=sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791 \
+ --hash=sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb \
+ --hash=sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a \
+ --hash=sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9 \
+ --hash=sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d \
+ --hash=sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0 \
+ --hash=sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761 \
+ --hash=sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815 \
+ --hash=sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524 \
+ --hash=sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759 \
+ --hash=sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734
+grpcio-status==1.66.1 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024 \
+ --hash=sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02
+httplib2==0.22.0 \
+ --hash=sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81 \
+ --hash=sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc
+idna==3.10 \
+ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
+ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+ipython==8.27.0 \
+ --hash=sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e \
+ --hash=sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c
+isort==5.13.2 \
+ --hash=sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109 \
+ --hash=sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6
+jedi==0.19.1 \
+ --hash=sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd \
+ --hash=sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0
+kombu==5.4.1 \
+ --hash=sha256:1c05178826dab811f8cab5b0a154d42a7a33d8bcdde9fa3d7b4582e43c3c03db \
+ --hash=sha256:621d365f234e4c089596f3a2510f1ade07026efc28caca426161d8f458786cab
+matplotlib-inline==0.1.7 \
+ --hash=sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90 \
+ --hash=sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca
+mccabe==0.7.0 \
+ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \
+ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e
+mnemonic==0.20 \
+ --hash=sha256:7c6fb5639d779388027a77944680aee4870f0fcd09b1e42a5525ee2ce4c625f6 \
+ --hash=sha256:acd2168872d0379e7a10873bb3e12bf6c91b35de758135c4fbd1015ef18fafc5
+msgpack==1.1.0 \
+ --hash=sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e \
+ --hash=sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd \
+ --hash=sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d \
+ --hash=sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5 \
+ --hash=sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5 \
+ --hash=sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e \
+ --hash=sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b \
+ --hash=sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f \
+ --hash=sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68 \
+ --hash=sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b \
+ --hash=sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044 \
+ --hash=sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f \
+ --hash=sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7 \
+ --hash=sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa \
+ --hash=sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701 \
+ --hash=sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6 \
+ --hash=sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59 \
+ --hash=sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0 \
+ --hash=sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e \
+ --hash=sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6 \
+ --hash=sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5 \
+ --hash=sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88 \
+ --hash=sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788 \
+ --hash=sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d \
+ --hash=sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2 \
+ --hash=sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420 \
+ --hash=sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2 \
+ --hash=sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39 \
+ --hash=sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f \
+ --hash=sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247 \
+ --hash=sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c \
+ --hash=sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b \
+ --hash=sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b \
+ --hash=sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f \
+ --hash=sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf \
+ --hash=sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330 \
+ --hash=sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734 \
+ --hash=sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e \
+ --hash=sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca \
+ --hash=sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915 \
+ --hash=sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d \
+ --hash=sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434 \
+ --hash=sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c \
+ --hash=sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc \
+ --hash=sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f
+mypy-extensions==1.0.0 \
+ --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 \
+ --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d
+mysqlclient==2.2.4 \
+ --hash=sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41 \
+ --hash=sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5 \
+ --hash=sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711 \
+ --hash=sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab \
+ --hash=sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54
+packaging==24.1 \
+ --hash=sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002 \
+ --hash=sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124
+parso==0.8.4 \
+ --hash=sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d \
+ --hash=sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18
+pathspec==0.12.1 \
+ --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 \
+ --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08
+pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' \
+ --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f \
+ --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523
+pillow==10.4.0 \
+ --hash=sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06 \
+ --hash=sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e \
+ --hash=sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d \
+ --hash=sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856 \
+ --hash=sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f \
+ --hash=sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b \
+ --hash=sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc \
+ --hash=sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e \
+ --hash=sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46 \
+ --hash=sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984 \
+ --hash=sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141 \
+ --hash=sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1 \
+ --hash=sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c \
+ --hash=sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be \
+ --hash=sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3 \
+ --hash=sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6 \
+ --hash=sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe \
+ --hash=sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319 \
+ --hash=sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d \
+ --hash=sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696 \
+ --hash=sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496 \
+ --hash=sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91 \
+ --hash=sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22 \
+ --hash=sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94 \
+ --hash=sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597 \
+ --hash=sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80 \
+ --hash=sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca \
+ --hash=sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef \
+ --hash=sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a \
+ --hash=sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b \
+ --hash=sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9 \
+ --hash=sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42 \
+ --hash=sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a \
+ --hash=sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9 \
+ --hash=sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3 \
+ --hash=sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb \
+ --hash=sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70 \
+ --hash=sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be \
+ --hash=sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0 \
+ --hash=sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc \
+ --hash=sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a \
+ --hash=sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309 \
+ --hash=sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060 \
+ --hash=sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea \
+ --hash=sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d \
+ --hash=sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4 \
+ --hash=sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da \
+ --hash=sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026 \
+ --hash=sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e \
+ --hash=sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5 \
+ --hash=sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885 \
+ --hash=sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5
+pip==24.2 \
+ --hash=sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8 \
+ --hash=sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2
+platformdirs==4.3.3 \
+ --hash=sha256:d4e0b7d8ec176b341fb03cb11ca12d0276faa8c485f9cd218f613840463fc2c0 \
+ --hash=sha256:50a5450e2e84f44539718293cbb1da0a0885c9d14adf21b77bae4e66fc99d9b5
+prompt-toolkit==3.0.47 \
+ --hash=sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360 \
+ --hash=sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10
+proto-plus==1.24.0 \
+ --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \
+ --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12
+protobuf==5.28.1 \
+ --hash=sha256:42597e938f83bb7f3e4b35f03aa45208d49ae8d5bcb4bc10b9fc825e0ab5e423 \
+ --hash=sha256:fc063acaf7a3d9ca13146fefb5b42ac94ab943ec6e978f543cd5637da2d57957 \
+ --hash=sha256:4c7f5cb38c640919791c9f74ea80c5b82314c69a8409ea36f2599617d03989af \
+ --hash=sha256:4304e4fceb823d91699e924a1fdf95cde0e066f3b1c28edb665bda762ecde10f \
+ --hash=sha256:0dfd86d2b5edf03d91ec2a7c15b4e950258150f14f9af5f51c17fa224ee1931f \
+ --hash=sha256:51f09caab818707ab91cf09cc5c156026599cf05a4520779ccbf53c1b352fb25 \
+ --hash=sha256:c529535e5c0effcf417682563719e5d8ac8d2b93de07a56108b4c2d436d7a29a
+ptyprocess==0.7.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' \
+ --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 \
+ --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35
+pure-eval==0.2.3 \
+ --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 \
+ --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0
+pyasn1==0.6.1 \
+ --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 \
+ --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629
+pyasn1-modules==0.4.1 \
+ --hash=sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c \
+ --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd
+pycodestyle==2.12.1 \
+ --hash=sha256:6838eae08bbce4f6accd5d5572075c63626a15ee3e6f842df996bf62f6d73521 \
+ --hash=sha256:46f0fb92069a7c28ab7bb558f05bfc0110dac69a0cd23c61ea0040283a9d78b3
+pycparser==2.22 \
+ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
+ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
+pydantic==2.9.1 \
+ --hash=sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2 \
+ --hash=sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612
+pydantic-core==2.23.3 \
+ --hash=sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690 \
+ --hash=sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6 \
+ --hash=sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5 \
+ --hash=sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b \
+ --hash=sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700 \
+ --hash=sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01 \
+ --hash=sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed \
+ --hash=sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec \
+ --hash=sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba \
+ --hash=sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee \
+ --hash=sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe \
+ --hash=sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b \
+ --hash=sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83 \
+ --hash=sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27 \
+ --hash=sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45 \
+ --hash=sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611 \
+ --hash=sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61 \
+ --hash=sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5 \
+ --hash=sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0 \
+ --hash=sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8 \
+ --hash=sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8 \
+ --hash=sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48 \
+ --hash=sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5 \
+ --hash=sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1 \
+ --hash=sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa \
+ --hash=sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305 \
+ --hash=sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb \
+ --hash=sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa \
+ --hash=sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162 \
+ --hash=sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801 \
+ --hash=sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb \
+ --hash=sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326 \
+ --hash=sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c \
+ --hash=sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c \
+ --hash=sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab \
+ --hash=sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c \
+ --hash=sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b \
+ --hash=sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f \
+ --hash=sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2 \
+ --hash=sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791 \
+ --hash=sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423 \
+ --hash=sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63 \
+ --hash=sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9 \
+ --hash=sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5 \
+ --hash=sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855 \
+ --hash=sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4 \
+ --hash=sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d \
+ --hash=sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8 \
+ --hash=sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1 \
+ --hash=sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d \
+ --hash=sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4 \
+ --hash=sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211 \
+ --hash=sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961 \
+ --hash=sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e \
+ --hash=sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc \
+ --hash=sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4 \
+ --hash=sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b
+pyflakes==3.2.0 \
+ --hash=sha256:1c61603ff154621fb2a9172037d84dca3500def8c8b630657d1701f026f8af3f \
+ --hash=sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a
+pygments==2.18.0 \
+ --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \
+ --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a
+pyjwt==2.9.0 \
+ --hash=sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c \
+ --hash=sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850
+pynacl==1.5.0 \
+ --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \
+ --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \
+ --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \
+ --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \
+ --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \
+ --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \
+ --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \
+ --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \
+ --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 \
+ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93
+pyparsing==3.1.4 \
+ --hash=sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032 \
+ --hash=sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c
+python-dateutil==2.9.0.post0 \
+ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \
+ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427
+python-dotenv==1.0.1 \
+ --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \
+ --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a
+redis==5.0.8 \
+ --hash=sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870 \
+ --hash=sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4
+requests==2.32.3 \
+ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
+ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
+requests-sse==0.3.2 \
+ --hash=sha256:3e17bd324e500c9b11c7c23dd00af3f0222070328134bda67a8917985cfc4127 \
+ --hash=sha256:c3399b689f6e7bf0eac7c2031211d66ffbb3ab77afc6c9226a71c73c06609f61
+rsa==4.9 \
+ --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 \
+ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7
+six==1.16.0 \
+ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
+ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
+soupsieve==2.6 \
+ --hash=sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb \
+ --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9
+sqlparse==0.5.1 \
+ --hash=sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e \
+ --hash=sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4
+stack-data==0.6.3 \
+ --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \
+ --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695
+stellar-sdk==11.0.0 \
+ --hash=sha256:645a4ba4b7e9eab5285bd2d870c74b13968173f56d75a89fd07656a344e2fa7e \
+ --hash=sha256:54a53d143aa8a4bf5baf5a38bc8ebddd3280339b6f973cfcbae4c2c362e7929d
+tablib==3.5.0 \
+ --hash=sha256:f6661dfc45e1d4f51fa8a6239f9c8349380859a5bfaa73280645f046d6c96e33 \
+ --hash=sha256:9821caa9eca6062ff7299fa645e737aecff982e6b2b42046928a6413c8dabfd9
+toml==0.10.2 \
+ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f \
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b
+tomli==2.0.1 ; python_full_version < '3.11' \
+ --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f \
+ --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc
+traitlets==5.14.3 \
+ --hash=sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7 \
+ --hash=sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f
+typing-extensions==4.12.2 \
+ --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 \
+ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d
+tzdata==2024.1 \
+ --hash=sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd \
+ --hash=sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252
+uritemplate==4.1.1 \
+ --hash=sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0 \
+ --hash=sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e
+urllib3==2.2.3 \
+ --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 \
+ --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac
+vine==5.1.0 \
+ --hash=sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0 \
+ --hash=sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc
+wcwidth==0.2.13 \
+ --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5 \
+ --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859
+xdrlib3==0.1.1 \
+ --hash=sha256:26697013af45afab6c6ff9a598fd04979cde83fa7215da059551b088aea88f34 \
+ --hash=sha256:175c0645f347c64e76bb374c2109480007eb2ff04ad08acfe885a130d2b0877d
diff --git a/requirements.txt b/requirements.txt
index 322bfad..b6eef67 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,269 +1,622 @@
-# This file was autogenerated by uv via the following command:
-# uv pip compile pyproject.toml -o requirements.txt
-amqp==5.1.1
- # via kombu
-annotated-types==0.7.0
- # via pydantic
-asgiref==3.8.1
- # via
- # django
- # django-cors-headers
- # django-htmx
-asttokens==2.4.1
- # via stack-data
-async-timeout==4.0.3
- # via redis
-beautifulsoup4==4.12.3
- # via deep-translator
-billiard==4.2.0
- # via celery
-cachecontrol==0.14.0
- # via firebase-admin
-cachetools==5.3.2
- # via google-auth
-celery==5.4.0
- # via geraipi (pyproject.toml)
-certifi==2022.9.24
- # via requests
-cffi==1.15.1
- # via
- # cryptography
- # pynacl
-charset-normalizer==2.1.1
- # via requests
-click==8.1.3
- # via
- # celery
- # click-didyoumean
- # click-plugins
- # click-repl
-click-didyoumean==0.3.0
- # via celery
-click-plugins==1.1.1
- # via celery
-click-repl==0.2.0
- # via celery
-cryptography==38.0.1
- # via pyjwt
-decorator==5.1.1
- # via ipython
-deep-translator==1.11.4
- # via geraipi (pyproject.toml)
-diff-match-patch==20200713
- # via django-import-export
-django==5.0
- # via
- # geraipi (pyproject.toml)
- # django-ckeditor
- # django-cors-headers
- # django-filter
- # django-htmx
- # django-import-export
- # django-jazzmin
- # django-js-asset
- # django-sesame
- # django-solo
- # django-tailwind
- # djangorestframework
-django-ckeditor==6.7.1
- # via geraipi (pyproject.toml)
-django-cors-headers==4.4.0
- # via geraipi (pyproject.toml)
-django-filter==24.3
- # via geraipi (pyproject.toml)
-django-htmx==1.19.0
- # via geraipi (pyproject.toml)
-django-import-export==4.1.1
- # via geraipi (pyproject.toml)
-django-jazzmin==3.0.0
- # via geraipi (pyproject.toml)
-django-js-asset==2.0.0
- # via django-ckeditor
-django-loginas==0.3.11
- # via geraipi (pyproject.toml)
-django-resized==1.0.2
- # via geraipi (pyproject.toml)
-django-sesame==3.2.2
- # via geraipi (pyproject.toml)
-django-solo==2.3.0
- # via geraipi (pyproject.toml)
-django-tailwind==3.8.0
- # via geraipi (pyproject.toml)
-django-vite-plugin==3.0.4
- # via geraipi (pyproject.toml)
-djangorestframework==3.15.2
- # via geraipi (pyproject.toml)
-exceptiongroup==1.2.2
- # via ipython
-executing==2.1.0
- # via stack-data
-firebase-admin==6.5.0
- # via geraipi (pyproject.toml)
-google-api-core==2.17.1
- # via
- # firebase-admin
- # google-api-python-client
- # google-cloud-core
- # google-cloud-firestore
- # google-cloud-storage
-google-api-python-client==2.118.0
- # via firebase-admin
-google-auth==2.28.0
- # via
- # google-api-core
- # google-api-python-client
- # google-auth-httplib2
- # google-cloud-core
- # google-cloud-storage
-google-auth-httplib2==0.2.0
- # via google-api-python-client
-google-cloud-core==2.4.1
- # via
- # google-cloud-firestore
- # google-cloud-storage
-google-cloud-firestore==2.14.0
- # via firebase-admin
-google-cloud-storage==2.14.0
- # via firebase-admin
-google-crc32c==1.5.0
- # via
- # google-cloud-storage
- # google-resumable-media
-google-resumable-media==2.7.0
- # via google-cloud-storage
-googleapis-common-protos==1.62.0
- # via
- # google-api-core
- # grpcio-status
-grpcio==1.60.1
- # via
- # google-api-core
- # grpcio-status
-grpcio-status==1.60.1
- # via google-api-core
-httplib2==0.22.0
- # via
- # google-api-python-client
- # google-auth-httplib2
-idna==2.10
- # via requests
-ipython==8.27.0
- # via geraipi (pyproject.toml)
-jedi==0.19.1
- # via ipython
-kombu==5.4.1
- # via celery
-matplotlib-inline==0.1.7
- # via ipython
-mnemonic==0.20
- # via stellar-sdk
-msgpack==1.0.7
- # via cachecontrol
-mysqlclient==2.2.4
- # via geraipi (pyproject.toml)
-parso==0.8.4
- # via jedi
-pexpect==4.9.0
- # via ipython
-pillow==10.4.0
- # via geraipi (pyproject.toml)
-pip==24.2
- # via geraipi (pyproject.toml)
-prompt-toolkit==3.0.47
- # via
- # click-repl
- # ipython
-proto-plus==1.23.0
- # via google-cloud-firestore
-protobuf==4.25.3
- # via
- # google-api-core
- # google-cloud-firestore
- # googleapis-common-protos
- # grpcio-status
- # proto-plus
-ptyprocess==0.7.0
- # via pexpect
-pure-eval==0.2.3
- # via stack-data
-pyasn1==0.5.1
- # via
- # pyasn1-modules
- # rsa
-pyasn1-modules==0.3.0
- # via google-auth
-pycparser==2.21
- # via cffi
-pydantic==2.9.1
- # via stellar-sdk
-pydantic-core==2.23.3
- # via pydantic
-pygments==2.18.0
- # via ipython
-pyjwt==2.6.0
- # via firebase-admin
-pynacl==1.5.0
- # via stellar-sdk
-pyparsing==3.0.9
- # via httplib2
-python-dateutil==2.8.2
- # via celery
-python-dotenv==1.0.1
- # via geraipi (pyproject.toml)
-redis==5.0.8
- # via geraipi (pyproject.toml)
-requests==2.32.3
- # via
- # cachecontrol
- # deep-translator
- # google-api-core
- # google-cloud-storage
- # requests-sse
- # stellar-sdk
-requests-sse==0.3.2
- # via stellar-sdk
-rsa==4.9
- # via google-auth
-six==1.16.0
- # via
- # asttokens
- # click-repl
- # python-dateutil
-soupsieve==2.5
- # via beautifulsoup4
-sqlparse==0.4.3
- # via django
-stack-data==0.6.3
- # via ipython
-stellar-sdk==11.0.0
- # via geraipi (pyproject.toml)
-tablib==3.5.0
- # via django-import-export
-toml==0.10.2
- # via stellar-sdk
-traitlets==5.14.3
- # via
- # ipython
- # matplotlib-inline
-typing-extensions==4.7.1
- # via
- # asgiref
- # django-solo
- # ipython
- # pydantic
- # pydantic-core
-tzdata==2024.1
- # via celery
-uritemplate==4.1.1
- # via google-api-python-client
-urllib3==1.26.12
- # via requests
-vine==5.1.0
- # via
- # amqp
- # celery
- # kombu
-wcwidth==0.2.5
- # via prompt-toolkit
-xdrlib3==0.1.1
- # via stellar-sdk
+# This file was autogenerated via `uv export`.
+amqp==5.2.0 \
+ --hash=sha256:a1ecff425ad063ad42a486c902807d1482311481c8ad95a72694b2975e75f7fd \
+ --hash=sha256:827cb12fb0baa892aad844fd95258143bce4027fdac4fccddbc43330fd281637
+annotated-types==0.7.0 \
+ --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89 \
+ --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53
+asgiref==3.8.1 \
+ --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 \
+ --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47
+asttokens==2.4.1 \
+ --hash=sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0 \
+ --hash=sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24
+async-timeout==4.0.3 ; python_full_version < '3.11.3' \
+ --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \
+ --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028
+beautifulsoup4==4.12.3 \
+ --hash=sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051 \
+ --hash=sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed
+billiard==4.2.0 \
+ --hash=sha256:9a3c3184cb275aa17a732f93f65b20c525d3d9f253722d26a82194803ade5a2c \
+ --hash=sha256:07aa978b308f334ff8282bd4a746e681b3513db5c9a514cbdd810cbbdc19714d
+cachecontrol==0.14.0 \
+ --hash=sha256:7db1195b41c81f8274a7bbd97c956f44e8348265a1bc7641c37dfebc39f0c938 \
+ --hash=sha256:f5bf3f0620c38db2e5122c0726bdebb0d16869de966ea6a2befe92470b740ea0
+cachetools==5.5.0 \
+ --hash=sha256:2cc24fb4cbe39633fb7badd9db9ca6295d766d9c2995f245725a46715d050f2a \
+ --hash=sha256:02134e8439cdc2ffb62023ce1debca2944c3f289d66bb17ead3ab3dede74b292
+celery==5.4.0 \
+ --hash=sha256:504a19140e8d3029d5acad88330c541d4c3f64c789d85f94756762d8bca7e706 \
+ --hash=sha256:369631eb580cf8c51a82721ec538684994f8277637edde2dfc0dacd73ed97f64
+certifi==2024.8.30 \
+ --hash=sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9 \
+ --hash=sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8
+cffi==1.17.1 \
+ --hash=sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824 \
+ --hash=sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14 \
+ --hash=sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67 \
+ --hash=sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382 \
+ --hash=sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702 \
+ --hash=sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3 \
+ --hash=sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6 \
+ --hash=sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17 \
+ --hash=sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8 \
+ --hash=sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e \
+ --hash=sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be \
+ --hash=sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c \
+ --hash=sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15 \
+ --hash=sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401 \
+ --hash=sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf \
+ --hash=sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4 \
+ --hash=sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41 \
+ --hash=sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1 \
+ --hash=sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6 \
+ --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d \
+ --hash=sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6 \
+ --hash=sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f \
+ --hash=sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b \
+ --hash=sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655 \
+ --hash=sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0 \
+ --hash=sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4 \
+ --hash=sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c \
+ --hash=sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36 \
+ --hash=sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5 \
+ --hash=sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff \
+ --hash=sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99 \
+ --hash=sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93 \
+ --hash=sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3 \
+ --hash=sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8 \
+ --hash=sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65 \
+ --hash=sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903 \
+ --hash=sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e \
+ --hash=sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 \
+ --hash=sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3 \
+ --hash=sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683 \
+ --hash=sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5 \
+ --hash=sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4 \
+ --hash=sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd \
+ --hash=sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed \
+ --hash=sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9 \
+ --hash=sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d \
+ --hash=sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a
+charset-normalizer==3.3.2 \
+ --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \
+ --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \
+ --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \
+ --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \
+ --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \
+ --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \
+ --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \
+ --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \
+ --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \
+ --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \
+ --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \
+ --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \
+ --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \
+ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \
+ --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \
+ --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \
+ --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \
+ --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \
+ --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \
+ --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \
+ --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \
+ --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \
+ --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \
+ --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \
+ --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \
+ --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \
+ --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \
+ --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \
+ --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \
+ --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \
+ --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \
+ --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \
+ --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \
+ --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \
+ --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \
+ --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \
+ --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \
+ --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \
+ --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \
+ --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \
+ --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \
+ --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \
+ --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \
+ --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \
+ --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \
+ --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \
+ --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc
+click==8.1.7 \
+ --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de \
+ --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28
+click-didyoumean==0.3.1 \
+ --hash=sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463 \
+ --hash=sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c
+click-plugins==1.1.1 \
+ --hash=sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b \
+ --hash=sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8
+click-repl==0.3.0 \
+ --hash=sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9 \
+ --hash=sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812
+colorama==0.4.6 ; sys_platform == 'win32' or platform_system == 'Windows' \
+ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
+ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
+cryptography==43.0.1 \
+ --hash=sha256:203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d \
+ --hash=sha256:8385d98f6a3bf8bb2d65a73e17ed87a3ba84f6991c155691c51112075f9ffc5d \
+ --hash=sha256:27e613d7077ac613e399270253259d9d53872aaf657471473ebfc9a52935c062 \
+ --hash=sha256:68aaecc4178e90719e95298515979814bda0cbada1256a4485414860bd7ab962 \
+ --hash=sha256:de41fd81a41e53267cb020bb3a7212861da53a7d39f863585d13ea11049cf277 \
+ --hash=sha256:f98bf604c82c416bc829e490c700ca1553eafdf2912a91e23a79d97d9801372a \
+ --hash=sha256:61ec41068b7b74268fa86e3e9e12b9f0c21fcf65434571dbb13d954bceb08042 \
+ --hash=sha256:014f58110f53237ace6a408b5beb6c427b64e084eb451ef25a28308270086494 \
+ --hash=sha256:2bd51274dcd59f09dd952afb696bf9c61a7a49dfc764c04dd33ef7a6b502a1e2 \
+ --hash=sha256:666ae11966643886c2987b3b721899d250855718d6d9ce41b521252a17985f4d \
+ --hash=sha256:ac119bb76b9faa00f48128b7f5679e1d8d437365c5d26f1c2c3f0da4ce1b553d \
+ --hash=sha256:1bbcce1a551e262dfbafb6e6252f1ae36a248e615ca44ba302df077a846a8806 \
+ --hash=sha256:58d4e9129985185a06d849aa6df265bdd5a74ca6e1b736a77959b498e0505b85 \
+ --hash=sha256:d03a475165f3134f773d1388aeb19c2d25ba88b6a9733c5c590b9ff7bbfa2e0c \
+ --hash=sha256:511f4273808ab590912a93ddb4e3914dfd8a388fed883361b02dea3791f292e1 \
+ --hash=sha256:80eda8b3e173f0f247f711eef62be51b599b5d425c429b5d4ca6a05e9e856baa \
+ --hash=sha256:38926c50cff6f533f8a2dae3d7f19541432610d114a70808f0926d5aaa7121e4 \
+ --hash=sha256:a575913fb06e05e6b4b814d7f7468c2c660e8bb16d8d5a1faf9b33ccc569dd47 \
+ --hash=sha256:d75601ad10b059ec832e78823b348bfa1a59f6b8d545db3a24fd44362a1564cb \
+ --hash=sha256:ea25acb556320250756e53f9e20a4177515f012c9eaea17eb7587a8c4d8ae034 \
+ --hash=sha256:c1332724be35d23a854994ff0b66530119500b6053d0bd3363265f7e5e77288d \
+ --hash=sha256:fba1007b3ef89946dbbb515aeeb41e30203b004f0b4b00e5e16078b518563289 \
+ --hash=sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84
+decorator==5.1.1 \
+ --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \
+ --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186
+deep-translator==1.11.4 \
+ --hash=sha256:801260c69231138707ea88a0955e484db7d40e210c9e0ae0f77372ffda5f4bf5 \
+ --hash=sha256:d635df037e23fa35d12fd42dab72a0b55c9dd19e6292009ee7207e3f30b9e60a
+diff-match-patch==20230430 \
+ --hash=sha256:953019cdb9c9d2c9e47b5b12bcff3cf4746fc4598eb406076fa1fc27e6a1f15c \
+ --hash=sha256:dce43505fb7b1b317de7195579388df0746d90db07015ed47a85e5e44930ef93
+django==5.1 \
+ --hash=sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d \
+ --hash=sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557
+django-ckeditor==6.7.1 \
+ --hash=sha256:7144f9ead662306266c728912487313b3b87ba2abf9dbb82c447f662ce25d1f7 \
+ --hash=sha256:55b5f9ce3af47e3c8a8ed37d42be8439da2a664d6e571c2247c1db5c96459dd7
+django-cors-headers==4.4.0 \
+ --hash=sha256:92cf4633e22af67a230a1456cb1b7a02bb213d6536d2dcb2a4a24092ea9cebc2 \
+ --hash=sha256:5c6e3b7fe870876a1efdfeb4f433782c3524078fa0dc9e0195f6706ce7a242f6
+django-filter==24.3 \
+ --hash=sha256:d8ccaf6732afd21ca0542f6733b11591030fa98669f8d15599b358e24a2cd9c3 \
+ --hash=sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64
+django-htmx==1.19.0 \
+ --hash=sha256:e7e17304e78e07f96eca0affc3ce1806edfdf3538bb7cb1912452b101f3e627d \
+ --hash=sha256:875a642814e52278c1728842436beda2001847a493ab79fd82da3fb46ead140f
+django-import-export==4.1.1 \
+ --hash=sha256:16ecc5a9f0df46bde6eb278a3e65ebda0ee1db55656f36440e9fb83f40ab85a3 \
+ --hash=sha256:730ae2443a02b1ba27d8dba078a27ae9123adfcabb78161b4f130843607b3df9
+django-jazzmin==3.0.0 \
+ --hash=sha256:424ac3e0f7bfd9ce973b581a66abde92035ba6c5b17605615fdf6bd97c4dcb33 \
+ --hash=sha256:95ef5d7571519c4c53c24083ec417a0db126aaf1d7dc7311e034a90e430392b3
+django-js-asset==2.2.0 \
+ --hash=sha256:0c57a82cae2317e83951d956110ce847f58ff0cdc24e314dbc18b35033917e94 \
+ --hash=sha256:7ef3e858e13d06f10799b56eea62b1e76706f42cf4e709be4e13356bc0ae30d8
+django-loginas==0.3.11 \
+ --hash=sha256:37aec6fcd1cdb72378b69d2468d2ae39b12cd013f838a9bf9b9b5132e8341735 \
+ --hash=sha256:5492eb5b4eb86c05e86cd84fb1f89c9796498643dc23d19e9c9bf83f5768ba86
+django-resized==1.0.2 \
+ --hash=sha256:52d727860f64ef4fdadbe2e74b66231c71c59df4d95949e338fcd320450f77fa \
+ --hash=sha256:d55a8d4125838486a1e76ffb689f8364f7d579bc7562b04400065602ec2ba7cc
+django-sesame==3.2.2 \
+ --hash=sha256:5d753a309166356b6a0d7fc047690943b9e80b4aa7952f1a6400fe6ce60d573c \
+ --hash=sha256:523ebd4d04e28c897c262f25b78b6fd8f37e11cdca6e277fdc8bf496bd686cf5
+django-solo==2.3.0 \
+ --hash=sha256:e82ee8b0aeccb97c401dc722bf01f665c93484c880e929f2a0ea53f5cbf2bf61 \
+ --hash=sha256:8069319fc9a3dc1080dc47b134d42526bf71749127eca1bf94bd7eb831c02fb2
+django-tailwind==3.8.0 \
+ --hash=sha256:31c2f4a7879d685c2de0feaf0b63f246200b37337bea4d7dbafb59bc3f10c008 \
+ --hash=sha256:fa969c5b95d314b173fe2b2ed2cb2c03f2e2c94fdc2c01ff73a993fa159085da
+django-unfold==0.39.0 \
+ --hash=sha256:927218e8a14f951dd82212a980f3f02608a160f966da656d13ef51be887a610c \
+ --hash=sha256:5393742d0755fc3983ee805ac27213cb7abbe06b563a0cdfd24103ff22480322
+django-vite-plugin==3.0.4 \
+ --hash=sha256:e5964597daa53ad5992f23e99e61dc4168c07ed51077851a3e3f02989697d41c \
+ --hash=sha256:5cc0425cd9a56afc0d1d27d5016e61a6929ad93024307af4195e4b25db340574
+djangorestframework==3.15.2 \
+ --hash=sha256:36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad \
+ --hash=sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20
+exceptiongroup==1.2.2 ; python_full_version < '3.11' \
+ --hash=sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc \
+ --hash=sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b
+executing==2.1.0 \
+ --hash=sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab \
+ --hash=sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf
+firebase-admin==6.5.0 \
+ --hash=sha256:e716dde1447f0a1cd1523be76ff872df33c4e1a3c079564ace033b2ad60bcc4f \
+ --hash=sha256:fe34ee3ca0e625c5156b3931ca4b4b69b5fc344dbe51bba9706ff674ce277898
+google-api-core==2.19.2 \
+ --hash=sha256:ca07de7e8aa1c98a8bfca9321890ad2340ef7f2eb136e558cee68f24b94b0a8f \
+ --hash=sha256:53ec0258f2837dd53bbd3d3df50f5359281b3cc13f800c941dd15a9b5a415af4
+google-api-python-client==2.145.0 \
+ --hash=sha256:8b84dde11aaccadc127e4846f5cd932331d804ea324e353131595e3f25376e97 \
+ --hash=sha256:d74da1358f3f2d63daf3c6f26bd96d89652051183bc87cf10a56ceb2a70beb50
+google-auth==2.34.0 \
+ --hash=sha256:8eb87396435c19b20d32abd2f984e31c191a15284af72eb922f10e5bde9c04cc \
+ --hash=sha256:72fd4733b80b6d777dcde515628a9eb4a577339437012874ea286bca7261ee65
+google-auth-httplib2==0.2.0 \
+ --hash=sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05 \
+ --hash=sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d
+google-cloud-core==2.4.1 \
+ --hash=sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073 \
+ --hash=sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61
+google-cloud-firestore==2.18.0 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:3db5dd42334b9904d82b3786703a5a4b576810fb50f61b8fa83ecf4f17b7fdae \
+ --hash=sha256:9a735860b692f39f93f900dd3390713ceb9b47ea82cda98360bb551f03d2b916
+google-cloud-storage==2.18.2 \
+ --hash=sha256:aaf7acd70cdad9f274d29332673fcab98708d0e1f4dceb5a5356aaef06af4d99 \
+ --hash=sha256:97a4d45c368b7d401ed48c4fdfe86e1e1cb96401c9e199e419d289e2c0370166
+google-crc32c==1.6.0 \
+ --hash=sha256:6eceb6ad197656a1ff49ebfbbfa870678c75be4344feb35ac1edf694309413dc \
+ --hash=sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa \
+ --hash=sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9 \
+ --hash=sha256:a184243544811e4a50d345838a883733461e67578959ac59964e43cca2c791e7 \
+ --hash=sha256:236c87a46cdf06384f614e9092b82c05f81bd34b80248021f729396a78e55d7e \
+ --hash=sha256:ebab974b1687509e5c973b5c4b8b146683e101e102e17a86bd196ecaa4d099fc \
+ --hash=sha256:50cf2a96da226dcbff8671233ecf37bf6e95de98b2a2ebadbfdf455e6d05df42 \
+ --hash=sha256:f7a1fc29803712f80879b0806cb83ab24ce62fc8daf0569f2204a0cfd7f68ed4 \
+ --hash=sha256:40b05ab32a5067525670880eb5d169529089a26fe35dce8891127aeddc1950e8 \
+ --hash=sha256:a9e4b426c3702f3cd23b933436487eb34e01e00327fac20c9aebb68ccf34117d \
+ --hash=sha256:51c4f54dd8c6dfeb58d1df5e4f7f97df8abf17a36626a217f169893d1d7f3e9f \
+ --hash=sha256:bb8b3c75bd157010459b15222c3fd30577042a7060e29d42dabce449c087f2b3 \
+ --hash=sha256:ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d \
+ --hash=sha256:62f6d4a29fea082ac4a3c9be5e415218255cf11684ac6ef5488eea0c9132689b \
+ --hash=sha256:c87d98c7c4a69066fd31701c4e10d178a648c2cac3452e62c6b24dc51f9fcc00 \
+ --hash=sha256:bd5e7d2445d1a958c266bfa5d04c39932dc54093fa391736dbfdb0f1929c1fb3 \
+ --hash=sha256:7aec8e88a3583515f9e0957fe4f5f6d8d4997e36d0f61624e70469771584c760 \
+ --hash=sha256:48abd62ca76a2cbe034542ed1b6aee851b6f28aaca4e6551b5599b6f3ef175cc \
+ --hash=sha256:18e311c64008f1f1379158158bb3f0c8d72635b9eb4f9545f8cf990c5668e59d
+google-resumable-media==2.7.2 \
+ --hash=sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0 \
+ --hash=sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa
+googleapis-common-protos==1.65.0 \
+ --hash=sha256:334a29d07cddc3aa01dee4988f9afd9b2916ee2ff49d6b757155dc0d197852c0 \
+ --hash=sha256:2972e6c496f435b92590fd54045060867f3fe9be2c82ab148fc8885035479a63
+grpcio==1.66.1 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:35334f9c9745add3e357e3372756fd32d925bd52c41da97f4dfdafbde0bf0ee2 \
+ --hash=sha256:4877ba180591acdf127afe21ec1c7ff8a5ecf0fe2600f0d3c50e8c4a1cbc6492 \
+ --hash=sha256:3750c5a00bd644c75f4507f77a804d0189d97a107eb1481945a0cf3af3e7a5ac \
+ --hash=sha256:a013c5fbb12bfb5f927444b477a26f1080755a931d5d362e6a9a720ca7dbae60 \
+ --hash=sha256:b1b24c23d51a1e8790b25514157d43f0a4dce1ac12b3f0b8e9f66a5e2c4c132f \
+ --hash=sha256:b7ffb8ea674d68de4cac6f57d2498fef477cef582f1fa849e9f844863af50083 \
+ --hash=sha256:307b1d538140f19ccbd3aed7a93d8f71103c5d525f3c96f8616111614b14bf2a \
+ --hash=sha256:1c17ebcec157cfb8dd445890a03e20caf6209a5bd4ac5b040ae9dbc59eef091d \
+ --hash=sha256:ef82d361ed5849d34cf09105d00b94b6728d289d6b9235513cb2fcc79f7c432c \
+ --hash=sha256:292a846b92cdcd40ecca46e694997dd6b9be6c4c01a94a0dfb3fcb75d20da858 \
+ --hash=sha256:c30aeceeaff11cd5ddbc348f37c58bcb96da8d5aa93fed78ab329de5f37a0d7a \
+ --hash=sha256:8a1e224ce6f740dbb6b24c58f885422deebd7eb724aff0671a847f8951857c26 \
+ --hash=sha256:a66fe4dc35d2330c185cfbb42959f57ad36f257e0cc4557d11d9f0a3f14311df \
+ --hash=sha256:e3ba04659e4fce609de2658fe4dbf7d6ed21987a94460f5f92df7579fd5d0e22 \
+ --hash=sha256:4573608e23f7e091acfbe3e84ac2045680b69751d8d67685ffa193a4429fedb1 \
+ --hash=sha256:7e06aa1f764ec8265b19d8f00140b8c4b6ca179a6dc67aa9413867c47e1fb04e \
+ --hash=sha256:3885f037eb11f1cacc41f207b705f38a44b69478086f40608959bf5ad85826dd \
+ --hash=sha256:97ae7edd3f3f91480e48ede5d3e7d431ad6005bfdbd65c1b56913799ec79e791 \
+ --hash=sha256:cfd349de4158d797db2bd82d2020554a121674e98fbe6b15328456b3bf2495bb \
+ --hash=sha256:a92c4f58c01c77205df6ff999faa008540475c39b835277fb8883b11cada127a \
+ --hash=sha256:fdb14bad0835914f325349ed34a51940bc2ad965142eb3090081593c6e347be9 \
+ --hash=sha256:f03a5884c56256e08fd9e262e11b5cfacf1af96e2ce78dc095d2c41ccae2c80d \
+ --hash=sha256:2ca2559692d8e7e245d456877a85ee41525f3ed425aa97eb7a70fc9a79df91a0 \
+ --hash=sha256:84ca1be089fb4446490dd1135828bd42a7c7f8421e74fa581611f7afdf7ab761 \
+ --hash=sha256:d639c939ad7c440c7b2819a28d559179a4508783f7e5b991166f8d7a34b52815 \
+ --hash=sha256:b9feb4e5ec8dc2d15709f4d5fc367794d69277f5d680baf1910fc9915c633524 \
+ --hash=sha256:7101db1bd4cd9b880294dec41a93fcdce465bdbb602cd8dc5bd2d6362b618759 \
+ --hash=sha256:b0aa03d240b5539648d996cc60438f128c7f46050989e35b25f5c18286c86734
+grpcio-status==1.66.1 ; platform_python_implementation != 'PyPy' \
+ --hash=sha256:b3f7d34ccc46d83fea5261eea3786174459f763c31f6e34f1d24eba6d515d024 \
+ --hash=sha256:cf9ed0b4a83adbe9297211c95cb5488b0cd065707e812145b842c85c4782ff02
+httplib2==0.22.0 \
+ --hash=sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81 \
+ --hash=sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc
+idna==3.10 \
+ --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
+ --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
+ipython==8.27.0 \
+ --hash=sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e \
+ --hash=sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c
+jedi==0.19.1 \
+ --hash=sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd \
+ --hash=sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0
+kombu==5.4.1 \
+ --hash=sha256:1c05178826dab811f8cab5b0a154d42a7a33d8bcdde9fa3d7b4582e43c3c03db \
+ --hash=sha256:621d365f234e4c089596f3a2510f1ade07026efc28caca426161d8f458786cab
+matplotlib-inline==0.1.7 \
+ --hash=sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90 \
+ --hash=sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca
+mnemonic==0.20 \
+ --hash=sha256:7c6fb5639d779388027a77944680aee4870f0fcd09b1e42a5525ee2ce4c625f6 \
+ --hash=sha256:acd2168872d0379e7a10873bb3e12bf6c91b35de758135c4fbd1015ef18fafc5
+msgpack==1.1.0 \
+ --hash=sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e \
+ --hash=sha256:7ad442d527a7e358a469faf43fda45aaf4ac3249c8310a82f0ccff9164e5dccd \
+ --hash=sha256:74bed8f63f8f14d75eec75cf3d04ad581da6b914001b474a5d3cd3372c8cc27d \
+ --hash=sha256:914571a2a5b4e7606997e169f64ce53a8b1e06f2cf2c3a7273aa106236d43dd5 \
+ --hash=sha256:c921af52214dcbb75e6bdf6a661b23c3e6417f00c603dd2070bccb5c3ef499f5 \
+ --hash=sha256:d8ce0b22b890be5d252de90d0e0d119f363012027cf256185fc3d474c44b1b9e \
+ --hash=sha256:73322a6cc57fcee3c0c57c4463d828e9428275fb85a27aa2aa1a92fdc42afd7b \
+ --hash=sha256:e1f3c3d21f7cf67bcf2da8e494d30a75e4cf60041d98b3f79875afb5b96f3a3f \
+ --hash=sha256:64fc9068d701233effd61b19efb1485587560b66fe57b3e50d29c5d78e7fef68 \
+ --hash=sha256:42f754515e0f683f9c79210a5d1cad631ec3d06cea5172214d2176a42e67e19b \
+ --hash=sha256:3df7e6b05571b3814361e8464f9304c42d2196808e0119f55d0d3e62cd5ea044 \
+ --hash=sha256:685ec345eefc757a7c8af44a3032734a739f8c45d1b0ac45efc5d8977aa4720f \
+ --hash=sha256:3d364a55082fb2a7416f6c63ae383fbd903adb5a6cf78c5b96cc6316dc1cedc7 \
+ --hash=sha256:79ec007767b9b56860e0372085f8504db5d06bd6a327a335449508bbee9648fa \
+ --hash=sha256:6ad622bf7756d5a497d5b6836e7fc3752e2dd6f4c648e24b1803f6048596f701 \
+ --hash=sha256:8e59bca908d9ca0de3dc8684f21ebf9a690fe47b6be93236eb40b99af28b6ea6 \
+ --hash=sha256:5e1da8f11a3dd397f0a32c76165cf0c4eb95b31013a94f6ecc0b280c05c91b59 \
+ --hash=sha256:452aff037287acb1d70a804ffd022b21fa2bb7c46bee884dbc864cc9024128a0 \
+ --hash=sha256:8da4bf6d54ceed70e8861f833f83ce0814a2b72102e890cbdfe4b34764cdd66e \
+ --hash=sha256:41c991beebf175faf352fb940bf2af9ad1fb77fd25f38d9142053914947cdbf6 \
+ --hash=sha256:a52a1f3a5af7ba1c9ace055b659189f6c669cf3657095b50f9602af3a3ba0fe5 \
+ --hash=sha256:58638690ebd0a06427c5fe1a227bb6b8b9fdc2bd07701bec13c2335c82131a88 \
+ --hash=sha256:fd2906780f25c8ed5d7b323379f6138524ba793428db5d0e9d226d3fa6aa1788 \
+ --hash=sha256:d46cf9e3705ea9485687aa4001a76e44748b609d260af21c4ceea7f2212a501d \
+ --hash=sha256:5dbad74103df937e1325cc4bfeaf57713be0b4f15e1c2da43ccdd836393e2ea2 \
+ --hash=sha256:58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420 \
+ --hash=sha256:4676e5be1b472909b2ee6356ff425ebedf5142427842aa06b4dfd5117d1ca8a2 \
+ --hash=sha256:17fb65dd0bec285907f68b15734a993ad3fc94332b5bb21b0435846228de1f39 \
+ --hash=sha256:a51abd48c6d8ac89e0cfd4fe177c61481aca2d5e7ba42044fd218cfd8ea9899f \
+ --hash=sha256:2137773500afa5494a61b1208619e3871f75f27b03bcfca7b3a7023284140247 \
+ --hash=sha256:398b713459fea610861c8a7b62a6fec1882759f308ae0795b5413ff6a160cf3c \
+ --hash=sha256:06f5fd2f6bb2a7914922d935d3b8bb4a7fff3a9a91cfce6d06c13bc42bec975b \
+ --hash=sha256:ad33e8400e4ec17ba782f7b9cf868977d867ed784a1f5f2ab46e7ba53b6e1e1b \
+ --hash=sha256:115a7af8ee9e8cddc10f87636767857e7e3717b7a2e97379dc2054712693e90f \
+ --hash=sha256:071603e2f0771c45ad9bc65719291c568d4edf120b44eb36324dcb02a13bfddf \
+ --hash=sha256:0f92a83b84e7c0749e3f12821949d79485971f087604178026085f60ce109330 \
+ --hash=sha256:4a1964df7b81285d00a84da4e70cb1383f2e665e0f1f2a7027e683956d04b734 \
+ --hash=sha256:59caf6a4ed0d164055ccff8fe31eddc0ebc07cf7326a2aaa0dbf7a4001cd823e \
+ --hash=sha256:0907e1a7119b337971a689153665764adc34e89175f9a34793307d9def08e6ca \
+ --hash=sha256:65553c9b6da8166e819a6aa90ad15288599b340f91d18f60b2061f402b9a4915 \
+ --hash=sha256:7a946a8992941fea80ed4beae6bff74ffd7ee129a90b4dd5cf9c476a30e9708d \
+ --hash=sha256:4b51405e36e075193bc051315dbf29168d6141ae2500ba8cd80a522964e31434 \
+ --hash=sha256:b4c01941fd2ff87c2a934ee6055bda4ed353a7846b8d4f341c428109e9fcde8c \
+ --hash=sha256:7c9a35ce2c2573bada929e0b7b3576de647b0defbd25f5139dcdaba0ae35a4cc \
+ --hash=sha256:bce7d9e614a04d0883af0b3d4d501171fbfca038f12c77fa838d9f198147a23f
+mysqlclient==2.2.4 \
+ --hash=sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41 \
+ --hash=sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5 \
+ --hash=sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711 \
+ --hash=sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab \
+ --hash=sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54
+parso==0.8.4 \
+ --hash=sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d \
+ --hash=sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18
+pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' \
+ --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f \
+ --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523
+pillow==10.4.0 \
+ --hash=sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06 \
+ --hash=sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e \
+ --hash=sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d \
+ --hash=sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856 \
+ --hash=sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f \
+ --hash=sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b \
+ --hash=sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc \
+ --hash=sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e \
+ --hash=sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46 \
+ --hash=sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984 \
+ --hash=sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141 \
+ --hash=sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1 \
+ --hash=sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c \
+ --hash=sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be \
+ --hash=sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3 \
+ --hash=sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6 \
+ --hash=sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe \
+ --hash=sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319 \
+ --hash=sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d \
+ --hash=sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696 \
+ --hash=sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496 \
+ --hash=sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91 \
+ --hash=sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22 \
+ --hash=sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94 \
+ --hash=sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597 \
+ --hash=sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80 \
+ --hash=sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca \
+ --hash=sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef \
+ --hash=sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a \
+ --hash=sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b \
+ --hash=sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9 \
+ --hash=sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42 \
+ --hash=sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a \
+ --hash=sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9 \
+ --hash=sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3 \
+ --hash=sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb \
+ --hash=sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70 \
+ --hash=sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be \
+ --hash=sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0 \
+ --hash=sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc \
+ --hash=sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a \
+ --hash=sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309 \
+ --hash=sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060 \
+ --hash=sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea \
+ --hash=sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d \
+ --hash=sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4 \
+ --hash=sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da \
+ --hash=sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026 \
+ --hash=sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e \
+ --hash=sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5 \
+ --hash=sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885 \
+ --hash=sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5
+pip==24.2 \
+ --hash=sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8 \
+ --hash=sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2
+prompt-toolkit==3.0.47 \
+ --hash=sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360 \
+ --hash=sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10
+proto-plus==1.24.0 \
+ --hash=sha256:30b72a5ecafe4406b0d339db35b56c4059064e69227b8c3bda7462397f966445 \
+ --hash=sha256:402576830425e5f6ce4c2a6702400ac79897dab0b4343821aa5188b0fab81a12
+protobuf==5.28.1 \
+ --hash=sha256:42597e938f83bb7f3e4b35f03aa45208d49ae8d5bcb4bc10b9fc825e0ab5e423 \
+ --hash=sha256:fc063acaf7a3d9ca13146fefb5b42ac94ab943ec6e978f543cd5637da2d57957 \
+ --hash=sha256:4c7f5cb38c640919791c9f74ea80c5b82314c69a8409ea36f2599617d03989af \
+ --hash=sha256:4304e4fceb823d91699e924a1fdf95cde0e066f3b1c28edb665bda762ecde10f \
+ --hash=sha256:0dfd86d2b5edf03d91ec2a7c15b4e950258150f14f9af5f51c17fa224ee1931f \
+ --hash=sha256:51f09caab818707ab91cf09cc5c156026599cf05a4520779ccbf53c1b352fb25 \
+ --hash=sha256:c529535e5c0effcf417682563719e5d8ac8d2b93de07a56108b4c2d436d7a29a
+ptyprocess==0.7.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' \
+ --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 \
+ --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35
+pure-eval==0.2.3 \
+ --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 \
+ --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0
+pyasn1==0.6.1 \
+ --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 \
+ --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629
+pyasn1-modules==0.4.1 \
+ --hash=sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c \
+ --hash=sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd
+pycparser==2.22 \
+ --hash=sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6 \
+ --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
+pydantic==2.9.1 \
+ --hash=sha256:1363c7d975c7036df0db2b4a61f2e062fbc0aa5ab5f2772e0ffc7191a4f4bce2 \
+ --hash=sha256:7aff4db5fdf3cf573d4b3c30926a510a10e19a0774d38fc4967f78beb6deb612
+pydantic-core==2.23.3 \
+ --hash=sha256:3cb0f65d8b4121c1b015c60104a685feb929a29d7cf204387c7f2688c7974690 \
+ --hash=sha256:7f10a5d1b9281392f1bf507d16ac720e78285dfd635b05737c3911637601bae6 \
+ --hash=sha256:3c09a7885dd33ee8c65266e5aa7fb7e2f23d49d8043f089989726391dd7350c5 \
+ --hash=sha256:6470b5a1ec4d1c2e9afe928c6cb37eb33381cab99292a708b8cb9aa89e62429b \
+ --hash=sha256:9172d2088e27d9a185ea0a6c8cebe227a9139fd90295221d7d495944d2367700 \
+ --hash=sha256:86fc6c762ca7ac8fbbdff80d61b2c59fb6b7d144aa46e2d54d9e1b7b0e780e01 \
+ --hash=sha256:f0cb80fd5c2df4898693aa841425ea1727b1b6d2167448253077d2a49003e0ed \
+ --hash=sha256:03667cec5daf43ac4995cefa8aaf58f99de036204a37b889c24a80927b629cec \
+ --hash=sha256:047531242f8e9c2db733599f1c612925de095e93c9cc0e599e96cf536aaf56ba \
+ --hash=sha256:5499798317fff7f25dbef9347f4451b91ac2a4330c6669821c8202fd354c7bee \
+ --hash=sha256:bbb5e45eab7624440516ee3722a3044b83fff4c0372efe183fd6ba678ff681fe \
+ --hash=sha256:8b5b3ed73abb147704a6e9f556d8c5cb078f8c095be4588e669d315e0d11893b \
+ --hash=sha256:2b603cde285322758a0279995b5796d64b63060bfbe214b50a3ca23b5cee3e83 \
+ --hash=sha256:c889fd87e1f1bbeb877c2ee56b63bb297de4636661cc9bbfcf4b34e5e925bc27 \
+ --hash=sha256:ea85bda3189fb27503af4c45273735bcde3dd31c1ab17d11f37b04877859ef45 \
+ --hash=sha256:a7f7f72f721223f33d3dc98a791666ebc6a91fa023ce63733709f4894a7dc611 \
+ --hash=sha256:2b2b55b0448e9da68f56b696f313949cda1039e8ec7b5d294285335b53104b61 \
+ --hash=sha256:c24574c7e92e2c56379706b9a3f07c1e0c7f2f87a41b6ee86653100c4ce343e5 \
+ --hash=sha256:f2b05e6ccbee333a8f4b8f4d7c244fdb7a979e90977ad9c51ea31261e2085ce0 \
+ --hash=sha256:e2c409ce1c219c091e47cb03feb3c4ed8c2b8e004efc940da0166aaee8f9d6c8 \
+ --hash=sha256:d965e8b325f443ed3196db890d85dfebbb09f7384486a77461347f4adb1fa7f8 \
+ --hash=sha256:f56af3a420fb1ffaf43ece3ea09c2d27c444e7c40dcb7c6e7cf57aae764f2b48 \
+ --hash=sha256:5b01a078dd4f9a52494370af21aa52964e0a96d4862ac64ff7cea06e0f12d2c5 \
+ --hash=sha256:560e32f0df04ac69b3dd818f71339983f6d1f70eb99d4d1f8e9705fb6c34a5c1 \
+ --hash=sha256:c744fa100fdea0d000d8bcddee95213d2de2e95b9c12be083370b2072333a0fa \
+ --hash=sha256:e0ec50663feedf64d21bad0809f5857bac1ce91deded203efc4a84b31b2e4305 \
+ --hash=sha256:db6e6afcb95edbe6b357786684b71008499836e91f2a4a1e55b840955b341dbb \
+ --hash=sha256:98ccd69edcf49f0875d86942f4418a4e83eb3047f20eb897bffa62a5d419c8fa \
+ --hash=sha256:a678c1ac5c5ec5685af0133262103defb427114e62eafeda12f1357a12140162 \
+ --hash=sha256:01491d8b4d8db9f3391d93b0df60701e644ff0894352947f31fff3e52bd5c801 \
+ --hash=sha256:fcf31facf2796a2d3b7fe338fe8640aa0166e4e55b4cb108dbfd1058049bf4cb \
+ --hash=sha256:7200fd561fb3be06827340da066df4311d0b6b8eb0c2116a110be5245dceb326 \
+ --hash=sha256:dc1636770a809dee2bd44dd74b89cc80eb41172bcad8af75dd0bc182c2666d4c \
+ --hash=sha256:67a5def279309f2e23014b608c4150b0c2d323bd7bccd27ff07b001c12c2415c \
+ --hash=sha256:748bdf985014c6dd3e1e4cc3db90f1c3ecc7246ff5a3cd4ddab20c768b2f1dab \
+ --hash=sha256:255ec6dcb899c115f1e2a64bc9ebc24cc0e3ab097775755244f77360d1f3c06c \
+ --hash=sha256:40b8441be16c1e940abebed83cd006ddb9e3737a279e339dbd6d31578b802f7b \
+ --hash=sha256:6daaf5b1ba1369a22c8b050b643250e3e5efc6a78366d323294aee54953a4d5f \
+ --hash=sha256:d015e63b985a78a3d4ccffd3bdf22b7c20b3bbd4b8227809b3e8e75bc37f9cb2 \
+ --hash=sha256:a3fc572d9b5b5cfe13f8e8a6e26271d5d13f80173724b738557a8c7f3a8a3791 \
+ --hash=sha256:f6bd91345b5163ee7448bee201ed7dd601ca24f43f439109b0212e296eb5b423 \
+ --hash=sha256:fc379c73fd66606628b866f661e8785088afe2adaba78e6bbe80796baf708a63 \
+ --hash=sha256:fbdce4b47592f9e296e19ac31667daed8753c8367ebb34b9a9bd89dacaa299c9 \
+ --hash=sha256:fc3cf31edf405a161a0adad83246568647c54404739b614b1ff43dad2b02e6d5 \
+ --hash=sha256:8e22b477bf90db71c156f89a55bfe4d25177b81fce4aa09294d9e805eec13855 \
+ --hash=sha256:0a0137ddf462575d9bce863c4c95bac3493ba8e22f8c28ca94634b4a1d3e2bb4 \
+ --hash=sha256:203171e48946c3164fe7691fc349c79241ff8f28306abd4cad5f4f75ed80bc8d \
+ --hash=sha256:76bdab0de4acb3f119c2a4bff740e0c7dc2e6de7692774620f7452ce11ca76c8 \
+ --hash=sha256:37ba321ac2a46100c578a92e9a6aa33afe9ec99ffa084424291d84e456f490c1 \
+ --hash=sha256:f399e8657c67313476a121a6944311fab377085ca7f490648c9af97fc732732d \
+ --hash=sha256:6b5547d098c76e1694ba85f05b595720d7c60d342f24d5aad32c3049131fa5c4 \
+ --hash=sha256:0dda0290a6f608504882d9f7650975b4651ff91c85673341789a476b1159f211 \
+ --hash=sha256:65b6e5da855e9c55a0c67f4db8a492bf13d8d3316a59999cfbaf98cc6e401961 \
+ --hash=sha256:09e926397f392059ce0afdcac920df29d9c833256354d0c55f1584b0b70cf07e \
+ --hash=sha256:87cfa0ed6b8c5bd6ae8b66de941cece179281239d482f363814d2b986b79cedc \
+ --hash=sha256:e61328920154b6a44d98cabcb709f10e8b74276bc709c9a513a8c37a18786cc4 \
+ --hash=sha256:ce3317d155628301d649fe5e16a99528d5680af4ec7aa70b90b8dacd2d725c9b
+pygments==2.18.0 \
+ --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \
+ --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a
+pyjwt==2.9.0 \
+ --hash=sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c \
+ --hash=sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850
+pynacl==1.5.0 \
+ --hash=sha256:8ac7448f09ab85811607bdd21ec2464495ac8b7c66d146bf545b0f08fb9220ba \
+ --hash=sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1 \
+ --hash=sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92 \
+ --hash=sha256:a36d4a9dda1f19ce6e03c9a784a2921a4b726b02e1c736600ca9c22029474394 \
+ --hash=sha256:0c84947a22519e013607c9be43706dd42513f9e6ae5d39d3613ca1e142fba44d \
+ --hash=sha256:06b8f6fa7f5de8d5d2f7573fe8c863c051225a27b61e6860fd047b1775807858 \
+ --hash=sha256:a422368fc821589c228f4c49438a368831cb5bbc0eab5ebe1d7fac9dded6567b \
+ --hash=sha256:61f642bf2378713e2c2e1de73444a3778e5f0a38be6fee0fe532fe30060282ff \
+ --hash=sha256:e46dae94e34b085175f8abb3b0aaa7da40767865ac82c928eeb9e57e1ea8a543 \
+ --hash=sha256:20f42270d27e1b6a29f54032090b972d97f0a1b0948cc52392041ef7831fee93
+pyparsing==3.1.4 \
+ --hash=sha256:f86ec8d1a83f11977c9a6ea7598e8c27fc5cddfa5b07ea2241edbbde1d7bc032 \
+ --hash=sha256:a6a7ee4235a3f944aa1fa2249307708f893fe5717dc603503c6c7969c070fb7c
+python-dateutil==2.9.0.post0 \
+ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \
+ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427
+python-dotenv==1.0.1 \
+ --hash=sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca \
+ --hash=sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a
+redis==5.0.8 \
+ --hash=sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870 \
+ --hash=sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4
+requests==2.32.3 \
+ --hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
+ --hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
+requests-sse==0.3.2 \
+ --hash=sha256:3e17bd324e500c9b11c7c23dd00af3f0222070328134bda67a8917985cfc4127 \
+ --hash=sha256:c3399b689f6e7bf0eac7c2031211d66ffbb3ab77afc6c9226a71c73c06609f61
+rsa==4.9 \
+ --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 \
+ --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7
+six==1.16.0 \
+ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
+ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
+soupsieve==2.6 \
+ --hash=sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb \
+ --hash=sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9
+sqlparse==0.5.1 \
+ --hash=sha256:bb6b4df465655ef332548e24f08e205afc81b9ab86cb1c45657a7ff173a3a00e \
+ --hash=sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4
+stack-data==0.6.3 \
+ --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \
+ --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695
+stellar-sdk==11.0.0 \
+ --hash=sha256:645a4ba4b7e9eab5285bd2d870c74b13968173f56d75a89fd07656a344e2fa7e \
+ --hash=sha256:54a53d143aa8a4bf5baf5a38bc8ebddd3280339b6f973cfcbae4c2c362e7929d
+tablib==3.5.0 \
+ --hash=sha256:f6661dfc45e1d4f51fa8a6239f9c8349380859a5bfaa73280645f046d6c96e33 \
+ --hash=sha256:9821caa9eca6062ff7299fa645e737aecff982e6b2b42046928a6413c8dabfd9
+toml==0.10.2 \
+ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f \
+ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b
+traitlets==5.14.3 \
+ --hash=sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7 \
+ --hash=sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f
+typing-extensions==4.12.2 \
+ --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 \
+ --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d
+tzdata==2024.1 \
+ --hash=sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd \
+ --hash=sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252
+uritemplate==4.1.1 \
+ --hash=sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0 \
+ --hash=sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e
+urllib3==2.2.3 \
+ --hash=sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9 \
+ --hash=sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac
+vine==5.1.0 \
+ --hash=sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0 \
+ --hash=sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc
+wcwidth==0.2.13 \
+ --hash=sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5 \
+ --hash=sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859
+xdrlib3==0.1.1 \
+ --hash=sha256:26697013af45afab6c6ff9a598fd04979cde83fa7215da059551b088aea88f34 \
+ --hash=sha256:175c0645f347c64e76bb374c2109480007eb2ff04ad08acfe885a130d2b0877d
From bcc10c432281794da7483b1e876d32e1b2daf6a4 Mon Sep 17 00:00:00 2001
From: Roni Ahmadi
Date: Tue, 24 Sep 2024 21:49:13 +0700
Subject: [PATCH 12/12] update gh action
---
.github/workflows/license_scan.yml | 30 ------------------------------
1 file changed, 30 deletions(-)
delete mode 100644 .github/workflows/license_scan.yml
diff --git a/.github/workflows/license_scan.yml b/.github/workflows/license_scan.yml
deleted file mode 100644
index c80da69..0000000
--- a/.github/workflows/license_scan.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: Python matrix CI
-
-on: [push]
-
-jobs:
- build:
- runs-on: ubuntu-22.04
- strategy:
- matrix:
- os: [ubuntu-latest, macos-latest, windows-latest]
- python-version: [3.10.15]
- steps:
- - uses: actions/checkout@v1
- - name: Set up Python
- uses: actions/setup-python@v1
- with:
- python-version: ${{ matrix.python-version }}
- - name: Install dependencies
- run: |
- python3 -m pip install --upgrade pip
- pip install -r requirements-dev.txt
- - name: Lint with flake8
- run: |
- # stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
- # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- flake8 . --count --exit-zero --statistics
- - name: Test with pytest
- run: |
- pytest --cov=. test
\ No newline at end of file