From 20473818a9fb24ef8a06da0cc43c926001909a24 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 5 Feb 2026 19:30:53 +0300 Subject: [PATCH 01/30] feat(emailing): add OpenAPI schemas for unsubscribe and tracking endpoints Includes detailed OpenAPI schemas for unsubscribe (GET and POST) and tracking pixel (GET) endpoints, supporting email compatibility and event tracking. Added support for RFC 8058-compliant one-click unsubscribe functionality and transparent image-based email tracking. --- engine/core/static/js/rapidoc-min.js | 3915 ++++++++++++++++++++++++ engine/core/templates/rapidoc.html | 63 + engine/core/views.py | 23 +- engine/vibes_auth/docs/drf/emailing.py | 253 ++ engine/vibes_auth/docs/drf/views.py | 6 +- engine/vibes_auth/docs/drf/viewsets.py | 18 +- engine/vibes_auth/emailing/views.py | 55 +- pyproject.toml | 34 +- schon/settings/drf.py | 10 +- schon/settings/unfold.py | 11 +- schon/urls.py | 18 +- uv.lock | 684 ++--- 12 files changed, 4621 insertions(+), 469 deletions(-) create mode 100644 engine/core/static/js/rapidoc-min.js create mode 100644 engine/core/templates/rapidoc.html create mode 100644 engine/vibes_auth/docs/drf/emailing.py diff --git a/engine/core/static/js/rapidoc-min.js b/engine/core/static/js/rapidoc-min.js new file mode 100644 index 00000000..c656086a --- /dev/null +++ b/engine/core/static/js/rapidoc-min.js @@ -0,0 +1,3915 @@ +/*! RapiDoc 9.3.8 | Author - Mrinmoy Majumdar | License information can be found in rapidoc-min.js.LICENSE.txt */ +(()=>{var e,t,r={557:(e,t,r)=>{"use strict";const s=globalThis,n=s.ShadowRoot&&(void 0===s.ShadyCSS||s.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,i=Symbol(),o=new WeakMap;class a{constructor(e,t,r){if(this._$cssResult$=!0,r!==i)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o;const t=this.t;if(n&&void 0===e){const r=void 0!==t&&1===t.length;r&&(e=o.get(t)),void 0===e&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),r&&o.set(t,e))}return e}toString(){return this.cssText}}const l=e=>new a("string"==typeof e?e:e+"",void 0,i),c=(e,...t)=>{const r=1===e.length?e[0]:t.reduce(((t,r,s)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if("number"==typeof e)return e;throw Error("Value passed to 'css' function must be a 'css' function result: "+e+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(r)+e[s+1]),e[0]);return new a(r,e,i)},p=(e,t)=>{if(n)e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet));else for(const r of t){const t=document.createElement("style"),n=s.litNonce;void 0!==n&&t.setAttribute("nonce",n),t.textContent=r.cssText,e.appendChild(t)}},u=n?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t="";for(const r of e.cssRules)t+=r.cssText;return l(t)})(e):e,{is:d,defineProperty:h,getOwnPropertyDescriptor:m,getOwnPropertyNames:f,getOwnPropertySymbols:g,getPrototypeOf:y}=Object,v=globalThis,b=v.trustedTypes,x=b?b.emptyScript:"",w=v.reactiveElementPolyfillSupport,$=(e,t)=>e,S={toAttribute(e,t){switch(t){case Boolean:e=e?x:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let r=e;switch(t){case Boolean:r=null!==e;break;case Number:r=null===e?null:Number(e);break;case Object:case Array:try{r=JSON.parse(e)}catch(e){r=null}}return r}},E=(e,t)=>!d(e,t),k={attribute:!0,type:String,converter:S,reflect:!1,hasChanged:E};Symbol.metadata??=Symbol("metadata"),v.litPropertyMetadata??=new WeakMap;class A extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=k){if(t.state&&(t.attribute=!1),this._$Ei(),this.elementProperties.set(e,t),!t.noAccessor){const r=Symbol(),s=this.getPropertyDescriptor(e,r,t);void 0!==s&&h(this.prototype,e,s)}}static getPropertyDescriptor(e,t,r){const{get:s,set:n}=m(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get(){return s?.call(this)},set(t){const i=s?.call(this);n.call(this,t),this.requestUpdate(e,i,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??k}static _$Ei(){if(this.hasOwnProperty($("elementProperties")))return;const e=y(this);e.finalize(),void 0!==e.l&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty($("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty($("properties"))){const e=this.properties,t=[...f(e),...g(e)];for(const r of t)this.createProperty(r,e[r])}const e=this[Symbol.metadata];if(null!==e){const t=litPropertyMetadata.get(e);if(void 0!==t)for(const[e,r]of t)this.elementProperties.set(e,r)}this._$Eh=new Map;for(const[e,t]of this.elementProperties){const r=this._$Eu(e,t);void 0!==r&&this._$Eh.set(r,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const r=new Set(e.flat(1/0).reverse());for(const e of r)t.unshift(u(e))}else void 0!==e&&t.push(u(e));return t}static _$Eu(e,t){const r=t.attribute;return!1===r?void 0:"string"==typeof r?r:"string"==typeof e?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((e=>e(this)))}addController(e){(this._$EO??=new Set).add(e),void 0!==this.renderRoot&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){const e=new Map,t=this.constructor.elementProperties;for(const r of t.keys())this.hasOwnProperty(r)&&(e.set(r,this[r]),delete this[r]);e.size>0&&(this._$Ep=e)}createRenderRoot(){const e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return p(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((e=>e.hostConnected?.()))}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach((e=>e.hostDisconnected?.()))}attributeChangedCallback(e,t,r){this._$AK(e,r)}_$EC(e,t){const r=this.constructor.elementProperties.get(e),s=this.constructor._$Eu(e,r);if(void 0!==s&&!0===r.reflect){const n=(void 0!==r.converter?.toAttribute?r.converter:S).toAttribute(t,r.type);this._$Em=e,null==n?this.removeAttribute(s):this.setAttribute(s,n),this._$Em=null}}_$AK(e,t){const r=this.constructor,s=r._$Eh.get(e);if(void 0!==s&&this._$Em!==s){const e=r.getPropertyOptions(s),n="function"==typeof e.converter?{fromAttribute:e.converter}:void 0!==e.converter?.fromAttribute?e.converter:S;this._$Em=s,this[s]=n.fromAttribute(t,e.type),this._$Em=null}}requestUpdate(e,t,r){if(void 0!==e){if(r??=this.constructor.getPropertyOptions(e),!(r.hasChanged??E)(this[e],t))return;this.P(e,t,r)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(e,t,r){this._$AL.has(e)||this._$AL.set(e,t),!0===r.reflect&&this._$Em!==e&&(this._$Ej??=new Set).add(e)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}const e=this.constructor.elementProperties;if(e.size>0)for(const[t,r]of e)!0!==r.wrapped||this._$AL.has(t)||void 0===this[t]||this.P(t,this[t],r)}let e=!1;const t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach((e=>e.hostUpdate?.())),this.update(t)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach((e=>e.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Ej&&=this._$Ej.forEach((e=>this._$EC(e,this[e]))),this._$EU()}updated(e){}firstUpdated(e){}}A.elementStyles=[],A.shadowRootOptions={mode:"open"},A[$("elementProperties")]=new Map,A[$("finalized")]=new Map,w?.({ReactiveElement:A}),(v.reactiveElementVersions??=[]).push("2.0.4");const O=globalThis,j=O.trustedTypes,T=j?j.createPolicy("lit-html",{createHTML:e=>e}):void 0,P="$lit$",C=`lit$${Math.random().toFixed(9).slice(2)}$`,I="?"+C,_=`<${I}>`,R=document,F=()=>R.createComment(""),M=e=>null===e||"object"!=typeof e&&"function"!=typeof e,L=Array.isArray,D=e=>L(e)||"function"==typeof e?.[Symbol.iterator],B="[ \t\n\f\r]",q=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,N=/-->/g,U=/>/g,z=RegExp(`>|${B}(?:([^\\s"'>=/]+)(${B}*=${B}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,"g"),H=/'/g,V=/"/g,W=/^(?:script|style|textarea|title)$/i,G=e=>(t,...r)=>({_$litType$:e,strings:t,values:r}),J=G(1),K=(G(2),G(3),Symbol.for("lit-noChange")),Y=Symbol.for("lit-nothing"),X=new WeakMap,Z=R.createTreeWalker(R,129);function Q(e,t){if(!L(e)||!e.hasOwnProperty("raw"))throw Error("invalid template strings array");return void 0!==T?T.createHTML(t):t}const ee=(e,t)=>{const r=e.length-1,s=[];let n,i=2===t?"":3===t?"":"",o=q;for(let t=0;t"===l[0]?(o=n??q,c=-1):void 0===l[1]?c=-2:(c=o.lastIndex-l[2].length,a=l[1],o=void 0===l[3]?z:'"'===l[3]?V:H):o===V||o===H?o=z:o===N||o===U?o=q:(o=z,n=void 0);const u=o===z&&e[t+1].startsWith("/>")?" ":"";i+=o===q?r+_:c>=0?(s.push(a),r.slice(0,c)+P+r.slice(c)+C+u):r+C+(-2===c?t:u)}return[Q(e,i+(e[r]||"")+(2===t?"":3===t?"":"")),s]};class te{constructor({strings:e,_$litType$:t},r){let s;this.parts=[];let n=0,i=0;const o=e.length-1,a=this.parts,[l,c]=ee(e,t);if(this.el=te.createElement(l,r),Z.currentNode=this.el.content,2===t||3===t){const e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;null!==(s=Z.nextNode())&&a.length0){s.textContent=j?j.emptyScript:"";for(let r=0;r2||""!==r[0]||""!==r[1]?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=Y}_$AI(e,t=this,r,s){const n=this.strings;let i=!1;if(void 0===n)e=re(this,e,t,0),i=!M(e)||e!==this._$AH&&e!==K,i&&(this._$AH=e);else{const s=e;let o,a;for(e=n[0],o=0;o{const s=r?.renderBefore??t;let n=s._$litPart$;if(void 0===n){const e=r?.renderBefore??null;s._$litPart$=n=new ne(t.insertBefore(F(),e),e,void 0,r??{})}return n._$AI(e),n})(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this.o?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this.o?.setConnected(!1)}render(){return K}}de._$litElement$=!0,de.finalized=!0,globalThis.litElementHydrateSupport?.({LitElement:de});const he=globalThis.litElementPolyfillSupport;he?.({LitElement:de});function me(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}(globalThis.litElementVersions??=[]).push("4.1.0");let fe={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,hooks:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};const ge=/[&<>"']/,ye=new RegExp(ge.source,"g"),ve=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,be=new RegExp(ve.source,"g"),xe={"&":"&","<":"<",">":">",'"':""","'":"'"},we=e=>xe[e];function $e(e,t){if(t){if(ge.test(e))return e.replace(ye,we)}else if(ve.test(e))return e.replace(be,we);return e}const Se=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Ee(e){return e.replace(Se,((e,t)=>"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}const ke=/(^|[^\[])\^/g;function Ae(e,t){e="string"==typeof e?e:e.source,t=t||"";const r={replace:(t,s)=>(s=(s=s.source||s).replace(ke,"$1"),e=e.replace(t,s),r),getRegex:()=>new RegExp(e,t)};return r}const Oe=/[^\w:]/g,je=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function Te(e,t,r){if(e){let e;try{e=decodeURIComponent(Ee(r)).replace(Oe,"").toLowerCase()}catch(e){return null}if(0===e.indexOf("javascript:")||0===e.indexOf("vbscript:")||0===e.indexOf("data:"))return null}t&&!je.test(r)&&(r=function(e,t){Pe[" "+e]||(Ce.test(e)?Pe[" "+e]=e+"/":Pe[" "+e]=Me(e,"/",!0));e=Pe[" "+e];const r=-1===e.indexOf(":");return"//"===t.substring(0,2)?r?t:e.replace(Ie,"$1")+t:"/"===t.charAt(0)?r?t:e.replace(_e,"$1")+t:e+t}(t,r));try{r=encodeURI(r).replace(/%25/g,"%")}catch(e){return null}return r}const Pe={},Ce=/^[^:]+:\/*[^/]*$/,Ie=/^([^:]+:)[\s\S]*$/,_e=/^([^:]+:\/*[^/]*)[\s\S]*$/;const Re={exec:function(){}};function Fe(e,t){const r=e.replace(/\|/g,((e,t,r)=>{let s=!1,n=t;for(;--n>=0&&"\\"===r[n];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(r[0].trim()||r.shift(),r.length>0&&!r[r.length-1].trim()&&r.pop(),r.length>t)r.splice(t);else for(;r.length1;)1&t&&(r+=e),t>>=1,e+=e;return r+e}function De(e,t,r,s){const n=t.href,i=t.title?$e(t.title):null,o=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){s.state.inLink=!0;const e={type:"link",raw:r,href:n,title:i,text:o,tokens:s.inlineTokens(o)};return s.state.inLink=!1,e}return{type:"image",raw:r,href:n,title:i,text:$e(o)}}class Be{constructor(e){this.options=e||fe}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:Me(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],r=function(e,t){const r=e.match(/^(\s+)(?:```)/);if(null===r)return t;const s=r[1];return t.split("\n").map((e=>{const t=e.match(/^\s+/);if(null===t)return e;const[r]=t;return r.length>=s.length?e.slice(s.length):e})).join("\n")}(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline._escapes,"$1"):t[2],text:r}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=Me(e,"#");this.options.pedantic?e=t.trim():t&&!/ $/.test(t)||(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){const e=t[0].replace(/^ *>[ \t]?/gm,""),r=this.lexer.state.top;this.lexer.state.top=!0;const s=this.lexer.blockTokens(e);return this.lexer.state.top=r,{type:"blockquote",raw:t[0],tokens:s,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let r,s,n,i,o,a,l,c,p,u,d,h,m=t[1].trim();const f=m.length>1,g={type:"list",raw:"",ordered:f,start:f?+m.slice(0,-1):"",loose:!1,items:[]};m=f?`\\d{1,9}\\${m.slice(-1)}`:`\\${m}`,this.options.pedantic&&(m=f?m:"[*+-]");const y=new RegExp(`^( {0,3}${m})((?:[\t ][^\\n]*)?(?:\\n|$))`);for(;e&&(h=!1,t=y.exec(e))&&!this.rules.block.hr.test(e);){if(r=t[0],e=e.substring(r.length),c=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),p=e.split("\n",1)[0],this.options.pedantic?(i=2,d=c.trimLeft()):(i=t[2].search(/[^ ]/),i=i>4?1:i,d=c.slice(i),i+=t[1].length),a=!1,!c&&/^ *$/.test(p)&&(r+=p+"\n",e=e.substring(p.length+1),h=!0),!h){const t=new RegExp(`^ {0,${Math.min(3,i-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),s=new RegExp(`^ {0,${Math.min(3,i-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),n=new RegExp(`^ {0,${Math.min(3,i-1)}}(?:\`\`\`|~~~)`),o=new RegExp(`^ {0,${Math.min(3,i-1)}}#`);for(;e&&(u=e.split("\n",1)[0],p=u,this.options.pedantic&&(p=p.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!n.test(p))&&!o.test(p)&&!t.test(p)&&!s.test(e);){if(p.search(/[^ ]/)>=i||!p.trim())d+="\n"+p.slice(i);else{if(a)break;if(c.search(/[^ ]/)>=4)break;if(n.test(c))break;if(o.test(c))break;if(s.test(c))break;d+="\n"+p}a||p.trim()||(a=!0),r+=u+"\n",e=e.substring(u.length+1),c=p.slice(i)}}g.loose||(l?g.loose=!0:/\n *\n *$/.test(r)&&(l=!0)),this.options.gfm&&(s=/^\[[ xX]\] /.exec(d),s&&(n="[ ] "!==s[0],d=d.replace(/^\[[ xX]\] +/,""))),g.items.push({type:"list_item",raw:r,task:!!s,checked:n,loose:!1,text:d}),g.raw+=r}g.items[g.items.length-1].raw=r.trimRight(),g.items[g.items.length-1].text=d.trimRight(),g.raw=g.raw.trimRight();const v=g.items.length;for(o=0;o"space"===e.type)),t=e.length>0&&e.some((e=>/\n.*\n/.test(e.raw)));g.loose=t}if(g.loose)for(o=0;o$/,"$1").replace(this.rules.inline._escapes,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline._escapes,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:r,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(t){const e={type:"table",header:Fe(t[1]).map((e=>({text:e}))),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(e.header.length===e.align.length){e.raw=t[0];let r,s,n,i,o=e.align.length;for(r=0;r({text:e})));for(o=e.header.length,s=0;s/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):$e(t[0]):t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=Me(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=function(e,t){if(-1===e.indexOf(t[1]))return-1;const r=e.length;let s=0,n=0;for(;n-1){const r=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,r).trim(),t[3]=""}}let r=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r);e&&(r=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return r=r.trim(),/^$/.test(e)?r.slice(1):r.slice(1,-1)),De(t,{href:r?r.replace(this.rules.inline._escapes,"$1"):r,title:s?s.replace(this.rules.inline._escapes,"$1"):s},t[0],this.lexer)}}reflink(e,t){let r;if((r=this.rules.inline.reflink.exec(e))||(r=this.rules.inline.nolink.exec(e))){let e=(r[2]||r[1]).replace(/\s+/g," ");if(e=t[e.toLowerCase()],!e){const e=r[0].charAt(0);return{type:"text",raw:e,text:e}}return De(r,e,r[0],this.lexer)}}emStrong(e,t,r=""){let s=this.rules.inline.emStrong.lDelim.exec(e);if(!s)return;if(s[3]&&r.match(/[\p{L}\p{N}]/u))return;const n=s[1]||s[2]||"";if(!n||n&&(""===r||this.rules.inline.punctuation.exec(r))){const r=s[0].length-1;let n,i,o=r,a=0;const l="*"===s[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+r);null!=(s=l.exec(t));){if(n=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!n)continue;if(i=n.length,s[3]||s[4]){o+=i;continue}if((s[5]||s[6])&&r%3&&!((r+i)%3)){a+=i;continue}if(o-=i,o>0)continue;i=Math.min(i,i+o+a);const t=e.slice(0,r+s.index+(s[0].length-n.length)+i);if(Math.min(r,i)%2){const e=t.slice(1,-1);return{type:"em",raw:t,text:e,tokens:this.lexer.inlineTokens(e)}}const l=t.slice(2,-2);return{type:"strong",raw:t,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const r=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return r&&s&&(e=e.substring(1,e.length-1)),e=$e(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e,t){const r=this.rules.inline.autolink.exec(e);if(r){let e,s;return"@"===r[2]?(e=$e(this.options.mangle?t(r[1]):r[1]),s="mailto:"+e):(e=$e(r[1]),s=e),{type:"link",raw:r[0],text:e,href:s,tokens:[{type:"text",raw:e,text:e}]}}}url(e,t){let r;if(r=this.rules.inline.url.exec(e)){let e,s;if("@"===r[2])e=$e(this.options.mangle?t(r[0]):r[0]),s="mailto:"+e;else{let t;do{t=r[0],r[0]=this.rules.inline._backpedal.exec(r[0])[0]}while(t!==r[0]);e=$e(r[0]),s="www."===r[1]?"http://"+r[0]:r[0]}return{type:"link",raw:r[0],text:e,href:s,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e,t){const r=this.rules.inline.text.exec(e);if(r){let e;return e=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):$e(r[0]):r[0]:$e(this.options.smartypants?t(r[0]):r[0]),{type:"text",raw:r[0],text:e}}}}const qe={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:Re,lheading:/^((?:.|\n(?!\n))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};qe.def=Ae(qe.def).replace("label",qe._label).replace("title",qe._title).getRegex(),qe.bullet=/(?:[*+-]|\d{1,9}[.)])/,qe.listItemStart=Ae(/^( *)(bull) */).replace("bull",qe.bullet).getRegex(),qe.list=Ae(qe.list).replace(/bull/g,qe.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+qe.def.source+")").getRegex(),qe._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",qe._comment=/|$)/,qe.html=Ae(qe.html,"i").replace("comment",qe._comment).replace("tag",qe._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),qe.paragraph=Ae(qe._paragraph).replace("hr",qe.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe._tag).getRegex(),qe.blockquote=Ae(qe.blockquote).replace("paragraph",qe.paragraph).getRegex(),qe.normal={...qe},qe.gfm={...qe.normal,table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"},qe.gfm.table=Ae(qe.gfm.table).replace("hr",qe.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe._tag).getRegex(),qe.gfm.paragraph=Ae(qe._paragraph).replace("hr",qe.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",qe.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",qe._tag).getRegex(),qe.pedantic={...qe.normal,html:Ae("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",qe._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Re,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:Ae(qe.normal._paragraph).replace("hr",qe.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",qe.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()};const Ne={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Re,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^(?:[^_*\\]|\\.)*?\_\_(?:[^_*\\]|\\.)*?\*(?:[^_*\\]|\\.)*?(?=\_\_)|(?:[^*\\]|\\.)+(?=[^*])|[punct_](\*+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|(?:[^punct*_\s\\]|\\.)(\*+)(?=[^punct*_\s])/,rDelimUnd:/^(?:[^_*\\]|\\.)*?\*\*(?:[^_*\\]|\\.)*?\_(?:[^_*\\]|\\.)*?(?=\*\*)|(?:[^_\\]|\\.)+(?=[^_])|[punct*](\_+)(?=[\s]|$)|(?:[^punct*_\s\\]|\\.)(\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Re,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(r="x"+r.toString(16)),s+="&#"+r+";";return s}Ne._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",Ne.punctuation=Ae(Ne.punctuation).replace(/punctuation/g,Ne._punctuation).getRegex(),Ne.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,Ne.escapedEmSt=/(?:^|[^\\])(?:\\\\)*\\[*_]/g,Ne._comment=Ae(qe._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),Ne.emStrong.lDelim=Ae(Ne.emStrong.lDelim).replace(/punct/g,Ne._punctuation).getRegex(),Ne.emStrong.rDelimAst=Ae(Ne.emStrong.rDelimAst,"g").replace(/punct/g,Ne._punctuation).getRegex(),Ne.emStrong.rDelimUnd=Ae(Ne.emStrong.rDelimUnd,"g").replace(/punct/g,Ne._punctuation).getRegex(),Ne._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,Ne._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,Ne._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,Ne.autolink=Ae(Ne.autolink).replace("scheme",Ne._scheme).replace("email",Ne._email).getRegex(),Ne._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,Ne.tag=Ae(Ne.tag).replace("comment",Ne._comment).replace("attribute",Ne._attribute).getRegex(),Ne._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Ne._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,Ne._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,Ne.link=Ae(Ne.link).replace("label",Ne._label).replace("href",Ne._href).replace("title",Ne._title).getRegex(),Ne.reflink=Ae(Ne.reflink).replace("label",Ne._label).replace("ref",qe._label).getRegex(),Ne.nolink=Ae(Ne.nolink).replace("ref",qe._label).getRegex(),Ne.reflinkSearch=Ae(Ne.reflinkSearch,"g").replace("reflink",Ne.reflink).replace("nolink",Ne.nolink).getRegex(),Ne.normal={...Ne},Ne.pedantic={...Ne.normal,strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:Ae(/^!?\[(label)\]\((.*?)\)/).replace("label",Ne._label).getRegex(),reflink:Ae(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ne._label).getRegex()},Ne.gfm={...Ne.normal,escape:Ae(Ne.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\t+" ".repeat(r.length)));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((s=>!!(r=s.call({lexer:this},e,t))&&(e=e.substring(r.raw.length),t.push(r),!0)))))if(r=this.tokenizer.space(e))e=e.substring(r.raw.length),1===r.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(r);else if(r=this.tokenizer.code(e))e=e.substring(r.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?t.push(r):(s.raw+="\n"+r.raw,s.text+="\n"+r.text,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(r=this.tokenizer.fences(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.heading(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.hr(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.blockquote(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.list(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.html(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.def(e))e=e.substring(r.raw.length),s=t[t.length-1],!s||"paragraph"!==s.type&&"text"!==s.type?this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title}):(s.raw+="\n"+r.raw,s.text+="\n"+r.raw,this.inlineQueue[this.inlineQueue.length-1].src=s.text);else if(r=this.tokenizer.table(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.lheading(e))e=e.substring(r.raw.length),t.push(r);else{if(n=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const r=e.slice(1);let s;this.options.extensions.startBlock.forEach((function(e){s=e.call({lexer:this},r),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(n=e.substring(0,t+1))}if(this.state.top&&(r=this.tokenizer.paragraph(n)))s=t[t.length-1],i&&"paragraph"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(r),i=n.length!==e.length,e=e.substring(r.raw.length);else if(r=this.tokenizer.text(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===s.type?(s.raw+="\n"+r.raw,s.text+="\n"+r.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=s.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let r,s,n,i,o,a,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(i[0].slice(i[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,i.index)+"["+Le("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,i.index)+"["+Le("a",i[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(l));)l=l.slice(0,i.index+i[0].length-2)+"++"+l.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex),this.tokenizer.rules.inline.escapedEmSt.lastIndex--;for(;e;)if(o||(a=""),o=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(r=s.call({lexer:this},e,t))&&(e=e.substring(r.raw.length),t.push(r),!0)))))if(r=this.tokenizer.escape(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.tag(e))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===r.type&&"text"===s.type?(s.raw+=r.raw,s.text+=r.text):t.push(r);else if(r=this.tokenizer.link(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(r.raw.length),s=t[t.length-1],s&&"text"===r.type&&"text"===s.type?(s.raw+=r.raw,s.text+=r.text):t.push(r);else if(r=this.tokenizer.emStrong(e,l,a))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.codespan(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.br(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.del(e))e=e.substring(r.raw.length),t.push(r);else if(r=this.tokenizer.autolink(e,ze))e=e.substring(r.raw.length),t.push(r);else if(this.state.inLink||!(r=this.tokenizer.url(e,ze))){if(n=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const r=e.slice(1);let s;this.options.extensions.startInline.forEach((function(e){s=e.call({lexer:this},r),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(n=e.substring(0,t+1))}if(r=this.tokenizer.inlineText(n,Ue))e=e.substring(r.raw.length),"_"!==r.raw.slice(-1)&&(a=r.raw.slice(-1)),o=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=r.raw,s.text+=r.text):t.push(r);else if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}else e=e.substring(r.raw.length),t.push(r);return t}}class Ve{constructor(e){this.options=e||fe}code(e,t,r){const s=(t||"").match(/\S*/)[0];if(this.options.highlight){const t=this.options.highlight(e,s);null!=t&&t!==e&&(r=!0,e=t)}return e=e.replace(/\n$/,"")+"\n",s?'
'+(r?e:$e(e,!0))+"
\n":"
"+(r?e:$e(e,!0))+"
\n"}blockquote(e){return`
\n${e}
\n`}html(e){return e}heading(e,t,r,s){if(this.options.headerIds){return`${e}\n`}return`${e}\n`}hr(){return this.options.xhtml?"
\n":"
\n"}list(e,t,r){const s=t?"ol":"ul";return"<"+s+(t&&1!==r?' start="'+r+'"':"")+">\n"+e+"\n"}listitem(e){return`
  • ${e}
  • \n`}checkbox(e){return" "}paragraph(e){return`

    ${e}

    \n`}table(e,t){return t&&(t=`${t}`),"\n\n"+e+"\n"+t+"
    \n"}tablerow(e){return`\n${e}\n`}tablecell(e,t){const r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return this.options.xhtml?"
    ":"
    "}del(e){return`${e}`}link(e,t,r){if(null===(e=Te(this.options.sanitize,this.options.baseUrl,e)))return r;let s='",s}image(e,t,r){if(null===(e=Te(this.options.sanitize,this.options.baseUrl,e)))return r;let s=`${r}":">",s}text(e){return e}}class We{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,r){return""+r}image(e,t,r){return""+r}br(){return""}}class Ge{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let r=e,s=0;if(this.seen.hasOwnProperty(r)){s=this.seen[e];do{s++,r=e+"-"+s}while(this.seen.hasOwnProperty(r))}return t||(this.seen[e]=s,this.seen[r]=0),r}slug(e,t={}){const r=this.serialize(e);return this.getNextSafeSlug(r,t.dryrun)}}class Je{constructor(e){this.options=e||fe,this.options.renderer=this.options.renderer||new Ve,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new We,this.slugger=new Ge}static parse(e,t){return new Je(t).parse(e)}static parseInline(e,t){return new Je(t).parseInline(e)}parse(e,t=!0){let r,s,n,i,o,a,l,c,p,u,d,h,m,f,g,y,v,b,x,w="";const $=e.length;for(r=0;r<$;r++)if(u=e[r],this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[u.type]&&(x=this.options.extensions.renderers[u.type].call({parser:this},u),!1!==x||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(u.type)))w+=x||"";else switch(u.type){case"space":continue;case"hr":w+=this.renderer.hr();continue;case"heading":w+=this.renderer.heading(this.parseInline(u.tokens),u.depth,Ee(this.parseInline(u.tokens,this.textRenderer)),this.slugger);continue;case"code":w+=this.renderer.code(u.text,u.lang,u.escaped);continue;case"table":for(c="",l="",i=u.header.length,s=0;s0&&"paragraph"===g.tokens[0].type?(g.tokens[0].text=b+" "+g.tokens[0].text,g.tokens[0].tokens&&g.tokens[0].tokens.length>0&&"text"===g.tokens[0].tokens[0].type&&(g.tokens[0].tokens[0].text=b+" "+g.tokens[0].tokens[0].text)):g.tokens.unshift({type:"text",text:b}):f+=b),f+=this.parse(g.tokens,m),p+=this.renderer.listitem(f,v,y);w+=this.renderer.list(p,d,h);continue;case"html":w+=this.renderer.html(u.text);continue;case"paragraph":w+=this.renderer.paragraph(this.parseInline(u.tokens));continue;case"text":for(p=u.tokens?this.parseInline(u.tokens):u.text;r+1<$&&"text"===e[r+1].type;)u=e[++r],p+="\n"+(u.tokens?this.parseInline(u.tokens):u.text);w+=t?this.renderer.paragraph(p):p;continue;default:{const e='Token with "'+u.type+'" type was not found.';if(this.options.silent)return void console.error(e);throw new Error(e)}}return w}parseInline(e,t){t=t||this.renderer;let r,s,n,i="";const o=e.length;for(r=0;r{"function"==typeof s&&(n=s,s=null);const i={...s},o=function(e,t,r){return s=>{if(s.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+$e(s.message+"",!0)+"
    ";return t?Promise.resolve(e):r?void r(null,e):e}if(t)return Promise.reject(s);if(!r)throw s;r(s)}}((s={...Xe.defaults,...i}).silent,s.async,n);if(null==r)return o(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof r)return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(r)+", string expected"));if(function(e){e&&e.sanitize&&!e.silent&&console.warn("marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options")}(s),s.hooks&&(s.hooks.options=s),n){const i=s.highlight;let a;try{s.hooks&&(r=s.hooks.preprocess(r)),a=e(r,s)}catch(e){return o(e)}const l=function(e){let r;if(!e)try{s.walkTokens&&Xe.walkTokens(a,s.walkTokens),r=t(a,s),s.hooks&&(r=s.hooks.postprocess(r))}catch(t){e=t}return s.highlight=i,e?o(e):n(null,r)};if(!i||i.length<3)return l();if(delete s.highlight,!a.length)return l();let c=0;return Xe.walkTokens(a,(function(e){"code"===e.type&&(c++,setTimeout((()=>{i(e.text,e.lang,(function(t,r){if(t)return l(t);null!=r&&r!==e.text&&(e.text=r,e.escaped=!0),c--,0===c&&l()}))}),0))})),void(0===c&&l())}if(s.async)return Promise.resolve(s.hooks?s.hooks.preprocess(r):r).then((t=>e(t,s))).then((e=>s.walkTokens?Promise.all(Xe.walkTokens(e,s.walkTokens)).then((()=>e)):e)).then((e=>t(e,s))).then((e=>s.hooks?s.hooks.postprocess(e):e)).catch(o);try{s.hooks&&(r=s.hooks.preprocess(r));const n=e(r,s);s.walkTokens&&Xe.walkTokens(n,s.walkTokens);let i=t(n,s);return s.hooks&&(i=s.hooks.postprocess(i)),i}catch(e){return o(e)}}}function Xe(e,t,r){return Ye(He.lex,Je.parse)(e,t,r)}Xe.options=Xe.setOptions=function(e){var t;return Xe.defaults={...Xe.defaults,...e},t=Xe.defaults,fe=t,Xe},Xe.getDefaults=me,Xe.defaults=fe,Xe.use=function(...e){const t=Xe.defaults.extensions||{renderers:{},childTokens:{}};e.forEach((e=>{const r={...e};if(r.async=Xe.defaults.async||r.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if(e.renderer){const r=t.renderers[e.name];t.renderers[e.name]=r?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=r.apply(this,t)),s}:e.renderer}if(e.tokenizer){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");t[e.level]?t[e.level].unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),r.extensions=t),e.renderer){const t=Xe.defaults.renderer||new Ve;for(const r in e.renderer){const s=t[r];t[r]=(...n)=>{let i=e.renderer[r].apply(t,n);return!1===i&&(i=s.apply(t,n)),i}}r.renderer=t}if(e.tokenizer){const t=Xe.defaults.tokenizer||new Be;for(const r in e.tokenizer){const s=t[r];t[r]=(...n)=>{let i=e.tokenizer[r].apply(t,n);return!1===i&&(i=s.apply(t,n)),i}}r.tokenizer=t}if(e.hooks){const t=Xe.defaults.hooks||new Ke;for(const r in e.hooks){const s=t[r];Ke.passThroughHooks.has(r)?t[r]=n=>{if(Xe.defaults.async)return Promise.resolve(e.hooks[r].call(t,n)).then((e=>s.call(t,e)));const i=e.hooks[r].call(t,n);return s.call(t,i)}:t[r]=(...n)=>{let i=e.hooks[r].apply(t,n);return!1===i&&(i=s.apply(t,n)),i}}r.hooks=t}if(e.walkTokens){const t=Xe.defaults.walkTokens;r.walkTokens=function(r){let s=[];return s.push(e.walkTokens.call(this,r)),t&&(s=s.concat(t.call(this,r))),s}}Xe.setOptions(r)}))},Xe.walkTokens=function(e,t){let r=[];for(const s of e)switch(r=r.concat(t.call(Xe,s)),s.type){case"table":for(const e of s.header)r=r.concat(Xe.walkTokens(e.tokens,t));for(const e of s.rows)for(const s of e)r=r.concat(Xe.walkTokens(s.tokens,t));break;case"list":r=r.concat(Xe.walkTokens(s.items,t));break;default:Xe.defaults.extensions&&Xe.defaults.extensions.childTokens&&Xe.defaults.extensions.childTokens[s.type]?Xe.defaults.extensions.childTokens[s.type].forEach((function(e){r=r.concat(Xe.walkTokens(s[e],t))})):s.tokens&&(r=r.concat(Xe.walkTokens(s.tokens,t)))}return r},Xe.parseInline=Ye(He.lexInline,Je.parseInline),Xe.Parser=Je,Xe.parser=Je.parse,Xe.Renderer=Ve,Xe.TextRenderer=We,Xe.Lexer=He,Xe.lexer=He.lex,Xe.Tokenizer=Be,Xe.Slugger=Ge,Xe.Hooks=Ke,Xe.parse=Xe;Xe.options,Xe.setOptions,Xe.use,Xe.walkTokens,Xe.parseInline,Je.parse,He.lex;var Ze=r(848),Qe=r.n(Ze);r(113),r(83),r(378),r(976),r(514),r(22),r(342),r(784),r(651);const et=c` + .hover-bg:hover { + background: var(--bg3); + } + ::selection { + background: var(--selection-bg); + color: var(--selection-fg); + } + .regular-font { + font-family:var(--font-regular); + } + .mono-font { + font-family:var(--font-mono); + } + .title { + font-size: calc(var(--font-size-small) + 18px); + font-weight: normal + } + .sub-title{ font-size: 20px; } + .req-res-title { + font-family: var(--font-regular); + font-size: calc(var(--font-size-small) + 4px); + font-weight:bold; + margin-bottom:8px; + text-align:left; + } + .tiny-title { + font-size:calc(var(--font-size-small) + 1px); + font-weight:bold; + } + .regular-font-size { font-size: var(--font-size-regular); } + .small-font-size { font-size: var(--font-size-small); } + .upper { text-transform: uppercase; } + .primary-text { color: var(--primary-color); } + .bold-text { font-weight:bold; } + .gray-text { color: var(--light-fg); } + .red-text { color: var(--red) } + .blue-text { color: var(--blue) } + .multiline { + overflow: scroll; + max-height: var(--resp-area-height, 400px); + color: var(--fg3); + } + .method-fg.put { color: var(--orange); } + .method-fg.post { color: var(--green); } + .method-fg.get { color: var(--blue); } + .method-fg.delete { color: var(--red); } + .method-fg.options, + .method-fg.head, + .method-fg.patch { + color: var(--yellow); + } + + h1 { font-family:var(--font-regular); font-size:28px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + h2 { font-family:var(--font-regular); font-size:24px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + h3 { font-family:var(--font-regular); font-size:18px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + h4 { font-family:var(--font-regular); font-size:16px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + h5 { font-family:var(--font-regular); font-size:14px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + h6 { font-family:var(--font-regular); font-size:14px; padding-top: 10px; letter-spacing:normal; font-weight:normal; } + + h1,h2,h3,h4,h5,h5 { + margin-block-end: 0.2em; + } + p { margin-block-start: 0.5em; } + a { color: var(--blue); cursor:pointer; } + a.inactive-link { + color:var(--fg); + text-decoration: none; + cursor:text; + } + + code, + pre { + margin: 0px; + font-family: var(--font-mono); + font-size: calc(var(--font-size-mono) - 1px); + } + + .m-markdown, + .m-markdown-small { + display:block; + } + + .m-markdown p, + .m-markdown span { + font-size: var(--font-size-regular); + line-height:calc(var(--font-size-regular) + 8px); + } + .m-markdown li { + font-size: var(--font-size-regular); + line-height:calc(var(--font-size-regular) + 10px); + } + + .m-markdown-small p, + .m-markdown-small span, + .m-markdown-small li { + font-size: var(--font-size-small); + line-height: calc(var(--font-size-small) + 6px); + } + .m-markdown-small li { + line-height: calc(var(--font-size-small) + 8px); + } + + .m-markdown p:not(:first-child) { + margin-block-start: 24px; + } + + .m-markdown-small p:not(:first-child) { + margin-block-start: 12px; + } + .m-markdown-small p:first-child { + margin-block-start: 0; + } + + .m-markdown p, + .m-markdown-small p { + margin-block-end: 0 + } + + .m-markdown code span { + font-size:var(--font-size-mono); + } + + .m-markdown-small code, + .m-markdown code { + padding: 1px 6px; + border-radius: 2px; + color: var(--inline-code-fg); + background-color: var(--bg3); + font-size: calc(var(--font-size-mono)); + line-height: 1.2; + } + + .m-markdown-small code { + font-size: calc(var(--font-size-mono) - 1px); + } + + .m-markdown-small pre, + .m-markdown pre { + white-space: pre-wrap; + overflow-x: auto; + line-height: normal; + border-radius: 2px; + border: 1px solid var(--code-border-color); + } + + .m-markdown pre { + padding: 12px; + background-color: var(--code-bg); + color:var(--code-fg); + } + + .m-markdown-small pre { + margin-top: 4px; + padding: 2px 4px; + background-color: var(--bg3); + color: var(--fg2); + } + + .m-markdown-small pre code, + .m-markdown pre code { + border:none; + padding:0; + } + + .m-markdown pre code { + color: var(--code-fg); + background-color: var(--code-bg); + background-color: transparent; + } + + .m-markdown-small pre code { + color: var(--fg2); + background-color: var(--bg3); + } + + .m-markdown ul, + .m-markdown ol { + padding-inline-start: 30px; + } + + .m-markdown-small ul, + .m-markdown-small ol { + padding-inline-start: 20px; + } + + .m-markdown-small a, + .m-markdown a { + color:var(--blue); + } + + .m-markdown-small img, + .m-markdown img { + max-width: 100%; + } + + /* Markdown table */ + + .m-markdown-small table, + .m-markdown table { + border-spacing: 0; + margin: 10px 0; + border-collapse: separate; + border: 1px solid var(--border-color); + border-radius: var(--border-radius); + font-size: calc(var(--font-size-small) + 1px); + line-height: calc(var(--font-size-small) + 4px); + max-width: 100%; + } + + .m-markdown-small table { + font-size: var(--font-size-small); + line-height: calc(var(--font-size-small) + 2px); + margin: 8px 0; + } + + .m-markdown-small td, + .m-markdown-small th, + .m-markdown td, + .m-markdown th { + vertical-align: top; + border-top: 1px solid var(--border-color); + line-height: calc(var(--font-size-small) + 4px); + } + + .m-markdown-small tr:first-child th, + .m-markdown tr:first-child th { + border-top: 0 none; + } + + .m-markdown th, + .m-markdown td { + padding: 10px 12px; + } + + .m-markdown-small th, + .m-markdown-small td { + padding: 8px 8px; + } + + .m-markdown th, + .m-markdown-small th { + font-weight: 600; + background-color: var(--bg2); + vertical-align: middle; + } + + .m-markdown-small table code { + font-size: calc(var(--font-size-mono) - 2px); + } + + .m-markdown table code { + font-size: calc(var(--font-size-mono) - 1px); + } + + .m-markdown blockquote, + .m-markdown-small blockquote { + margin-inline-start: 0; + margin-inline-end: 0; + border-left: 3px solid var(--border-color); + padding: 6px 0 6px 6px; + } + .m-markdown hr{ + border: 1px solid var(--border-color); + } +`,tt=c` +/* Button */ +.m-btn { + border-radius: var(--border-radius); + font-weight: 600; + display: inline-block; + padding: 6px 16px; + font-size: var(--font-size-small); + outline: 0; + line-height: 1; + text-align: center; + white-space: nowrap; + border: 2px solid var(--primary-color); + background-color:transparent; + user-select: none; + cursor: pointer; + box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); + transition-duration: 0.75s; +} +.m-btn.primary { + background-color: var(--primary-color); + color: var(--primary-color-invert); +} +.m-btn.thin-border { border-width: 1px; } +.m-btn.large { padding:8px 14px; } +.m-btn.small { padding:5px 12px; } +.m-btn.tiny { padding:5px 6px; } +.m-btn.circle { border-radius: 50%; } +.m-btn:hover { + background-color: var(--primary-color); + color: var(--primary-color-invert); +} +.m-btn.nav { border: 2px solid var(--nav-accent-color); } +.m-btn.nav:hover { + background-color: var(--nav-accent-color); +} +.m-btn:disabled { + background-color: var(--bg3); + color: var(--fg3); + border-color: var(--fg3); + cursor: not-allowed; + opacity: 0.4; +} +.m-btn:active { + filter: brightness(75%); + transform: scale(0.95); + transition:scale 0s; +} +.toolbar-btn { + cursor: pointer; + padding: 4px; + margin:0 2px; + font-size: var(--font-size-small); + min-width: 50px; + color: var(--primary-color-invert); + border-radius: 2px; + border: none; + background-color: var(--primary-color); +} + +input, textarea, select, button, pre { + color:var(--fg); + outline: none; + background-color: var(--input-bg); + border: 1px solid var(--border-color); + border-radius: var(--border-radius); +} +button { + font-family: var(--font-regular); +} + +/* Form Inputs */ +pre, +select, +textarea, +input[type="file"], +input[type="text"], +input[type="password"] { + font-family: var(--font-mono); + font-weight: 400; + font-size: var(--font-size-small); + transition: border .2s; + padding: 6px 5px; +} + +select { + font-family: var(--font-regular); + padding: 5px 30px 5px 5px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cpath%20d%3D%22M10.3%203.3L6%207.6%201.7%203.3A1%201%200%2000.3%204.7l5%205a1%201%200%20001.4%200l5-5a1%201%200%2010-1.4-1.4z%22%20fill%3D%22%23777777%22%2F%3E%3C%2Fsvg%3E"); + background-position: calc(100% - 5px) center; + background-repeat: no-repeat; + background-size: 10px; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + cursor: pointer; +} + +select:hover { + border-color: var(--primary-color); +} + +textarea::placeholder, +input[type="text"]::placeholder, +input[type="password"]::placeholder { + color: var(--placeholder-color); + opacity:1; +} + + +input[type="file"]{ + font-family: var(--font-regular); + padding:2px; + cursor:pointer; + border: 1px solid var(--primary-color); + min-height: calc(var(--font-size-small) + 18px); +} + +input[type="file"]::-webkit-file-upload-button { + font-family: var(--font-regular); + font-size: var(--font-size-small); + outline: none; + cursor:pointer; + padding: 3px 8px; + border: 1px solid var(--primary-color); + background-color: var(--primary-color); + color: var(--primary-color-invert); + border-radius: var(--border-radius);; + -webkit-appearance: none; +} + +pre, +textarea { + scrollbar-width: thin; + scrollbar-color: var(--border-color) var(--input-bg); +} + +pre::-webkit-scrollbar, +textarea::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +pre::-webkit-scrollbar-track, +textarea::-webkit-scrollbar-track { + background:var(--input-bg); +} + +pre::-webkit-scrollbar-thumb, +textarea::-webkit-scrollbar-thumb { + border-radius: 2px; + background-color: var(--border-color); +} + +.link { + font-size:var(--font-size-small); + text-decoration: underline; + color:var(--blue); + font-family:var(--font-mono); + margin-bottom:2px; +} + +/* Toggle Body */ +input[type="checkbox"] { + appearance: none; + display: inline-block; + background-color: var(--light-bg); + border: 1px solid var(--light-bg); + border-radius: 9px; + cursor: pointer; + height: 18px; + position: relative; + transition: border .25s .15s, box-shadow .25s .3s, padding .25s; + min-width: 36px; + width: 36px; + vertical-align: top; +} +/* Toggle Thumb */ +input[type="checkbox"]:after { + position: absolute; + background-color: var(--bg); + border: 1px solid var(--light-bg); + border-radius: 8px; + content: ''; + top: 0px; + left: 0px; + right: 16px; + display: block; + height: 16px; + transition: border .25s .15s, left .25s .1s, right .15s .175s; +} + +/* Toggle Body - Checked */ +input[type="checkbox"]:checked { + background-color: var(--green); + border-color: var(--green); +} +/* Toggle Thumb - Checked*/ +input[type="checkbox"]:checked:after { + border: 1px solid var(--green); + left: 16px; + right: 1px; + transition: border .25s, left .15s .25s, right .25s .175s; +}`,rt=c` +.row, .col { + display:flex; +} +.row { + align-items:center; + flex-direction: row; +} +.col { + align-items:stretch; + flex-direction: column; +} +`,st=c` +.m-table { + border-spacing: 0; + border-collapse: separate; + border: 1px solid var(--light-border-color); + border-radius: var(--border-radius); + margin: 0; + max-width: 100%; + direction: ltr; +} +.m-table tr:first-child td, +.m-table tr:first-child th { + border-top: 0 none; +} +.m-table td, +.m-table th { + font-size: var(--font-size-small); + line-height: calc(var(--font-size-small) + 4px); + padding: 4px 5px 4px; + vertical-align: top; +} + +.m-table.padded-12 td, +.m-table.padded-12 th { + padding: 12px; +} + +.m-table td:not([align]), +.m-table th:not([align]) { + text-align: left; +} + +.m-table th { + color: var(--fg2); + font-size: var(--font-size-small); + line-height: calc(var(--font-size-small) + 18px); + font-weight: 600; + letter-spacing: normal; + background-color: var(--bg2); + vertical-align: bottom; + border-bottom: 1px solid var(--light-border-color); +} + +.m-table > tbody > tr > td, +.m-table > tr > td { + border-top: 1px solid var(--light-border-color); + text-overflow: ellipsis; + overflow: hidden; +} +.table-title { + font-size:var(--font-size-small); + font-weight:bold; + vertical-align: middle; + margin: 12px 0 4px 0; +} +`,nt=c` +:host { + container-type: inline-size; +} +.only-large-screen { display:none; } +.endpoint-head .path { + display: flex; + font-family:var(--font-mono); + font-size: var(--font-size-small); + align-items: center; + overflow-wrap: break-word; + word-break: break-all; +} + +.endpoint-head .descr { + font-size: var(--font-size-small); + color:var(--light-fg); + font-weight:400; + align-items: center; + overflow-wrap: break-word; + word-break: break-all; + display:none; +} + +.m-endpoint.expanded { margin-bottom:16px; } +.m-endpoint > .endpoint-head{ + border-width:1px 1px 1px 5px; + border-style:solid; + border-color:transparent; + border-top-color:var(--light-border-color); + display:flex; + padding:6px 16px; + align-items: center; + cursor: pointer; +} +.m-endpoint > .endpoint-head.put:hover, +.m-endpoint > .endpoint-head.put.expanded { + border-color:var(--orange); + background-color:var(--light-orange); +} +.m-endpoint > .endpoint-head.post:hover, +.m-endpoint > .endpoint-head.post.expanded { + border-color:var(--green); + background-color:var(--light-green); +} +.m-endpoint > .endpoint-head.get:hover, +.m-endpoint > .endpoint-head.get.expanded { + border-color:var(--blue); + background-color:var(--light-blue); +} +.m-endpoint > .endpoint-head.delete:hover, +.m-endpoint > .endpoint-head.delete.expanded { + border-color:var(--red); + background-color:var(--light-red); +} + +.m-endpoint > .endpoint-head.head:hover, +.m-endpoint > .endpoint-head.head.expanded, +.m-endpoint > .endpoint-head.patch:hover, +.m-endpoint > .endpoint-head.patch.expanded, +.m-endpoint > .endpoint-head.options:hover, +.m-endpoint > .endpoint-head.options.expanded { + border-color:var(--yellow); + background-color:var(--light-yellow); +} + +.m-endpoint > .endpoint-head.deprecated:hover, +.m-endpoint > .endpoint-head.deprecated.expanded { + border-color:var(--border-color); + filter:opacity(0.6); +} + +.m-endpoint .endpoint-body { + flex-wrap:wrap; + padding:16px 0px 0 0px; + border-width:0px 1px 1px 5px; + border-style:solid; + box-shadow: 0px 4px 3px -3px rgba(0, 0, 0, 0.15); +} +.m-endpoint .endpoint-body.delete{ border-color:var(--red); } +.m-endpoint .endpoint-body.put{ border-color:var(--orange); } +.m-endpoint .endpoint-body.post { border-color:var(--green); } +.m-endpoint .endpoint-body.get { border-color:var(--blue); } +.m-endpoint .endpoint-body.head, +.m-endpoint .endpoint-body.patch, +.m-endpoint .endpoint-body.options { + border-color:var(--yellow); +} + +.m-endpoint .endpoint-body.deprecated { + border-color:var(--border-color); + filter:opacity(0.6); +} + +.endpoint-head .deprecated { + color: var(--light-fg); + filter:opacity(0.6); +} + +.summary{ + padding:8px 8px; +} +.summary .title { + font-size:calc(var(--font-size-regular) + 2px); + margin-bottom: 6px; + word-break: break-all; +} + +.endpoint-head .method { + padding:2px 5px; + vertical-align: middle; + font-size:var(--font-size-small); + height: calc(var(--font-size-small) + 16px); + line-height: calc(var(--font-size-small) + 8px); + width: 60px; + border-radius: 2px; + display:inline-block; + text-align: center; + font-weight: bold; + text-transform:uppercase; + margin-right:5px; +} +.endpoint-head .method.delete{ border: 2px solid var(--red);} +.endpoint-head .method.put{ border: 2px solid var(--orange); } +.endpoint-head .method.post{ border: 2px solid var(--green); } +.endpoint-head .method.get{ border: 2px solid var(--blue); } +.endpoint-head .method.get.deprecated{ border: 2px solid var(--border-color); } +.endpoint-head .method.head, +.endpoint-head .method.patch, +.endpoint-head .method.options { + border: 2px solid var(--yellow); +} + +.req-resp-container { + display: flex; + margin-top:16px; + align-items: stretch; + flex-wrap: wrap; + flex-direction: column; + border-top:1px solid var(--light-border-color); +} + +.view-mode-request, +api-response.view-mode { + flex:1; + min-height:100px; + padding:16px 8px; + overflow:hidden; +} +.view-mode-request { + border-width:0 0 1px 0; + border-style:dashed; +} + +.head .view-mode-request, +.patch .view-mode-request, +.options .view-mode-request { + border-color:var(--yellow); +} +.put .view-mode-request { + border-color:var(--orange); +} +.post .view-mode-request { + border-color:var(--green); +} +.get .view-mode-request { + border-color:var(--blue); +} +.delete .view-mode-request { + border-color:var(--red); +} + +@container (min-width: 1024px) { + .only-large-screen { display:block; } + .endpoint-head .path{ + font-size: var(--font-size-regular); + } + .endpoint-head .descr{ + display: flex; + } + .endpoint-head .m-markdown-small, + .descr .m-markdown-small{ + display:block; + } + .req-resp-container{ + flex-direction: var(--layout, row); + flex-wrap: nowrap; + } + api-response.view-mode { + padding:16px; + } + .view-mode-request.row-layout { + border-width:0 1px 0 0; + padding:16px; + } + .summary{ + padding:8px 16px; + } +} +`,it=c` +code[class*="language-"], +pre[class*="language-"] { + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 2; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + white-space: normal; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: var(--light-fg) +} + +.token.punctuation { + color: var(--fg); +} + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color:var(--pink); +} + +.token.function-name { + color: var(--blue); +} + +.token.boolean, +.token.number, +.token.function { + color: var(--red); +} + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: var(--code-property-color); +} + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: var(--code-keyword-color); +} + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: var(--green); +} + +.token.operator, +.token.entity, +.token.url { + color: var(--code-operator-color); +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.inserted { + color: green; +} +`,ot=c` +.tab-panel { + border: none; +} +.tab-buttons { + height:30px; + padding: 4px 4px 0 4px; + border-bottom: 1px solid var(--light-border-color) ; + align-items: stretch; + overflow-y: hidden; + overflow-x: auto; + scrollbar-width: thin; +} +.tab-buttons::-webkit-scrollbar { + height: 1px; + background-color: var(--border-color); +} +.tab-btn { + border: none; + border-bottom: 3px solid transparent; + color: var(--light-fg); + background-color: transparent; + white-space: nowrap; + cursor:pointer; + outline:none; + font-family:var(--font-regular); + font-size:var(--font-size-small); + margin-right:16px; + padding:1px; +} +.tab-btn.active { + border-bottom: 3px solid var(--primary-color); + font-weight:bold; + color:var(--primary-color); +} + +.tab-btn:hover { + color:var(--primary-color); +} +.tab-content { + margin:-1px 0 0 0; + position:relative; + min-height: 50px; +} +`,at=c` +.nav-bar-info:focus-visible, +.nav-bar-tag:focus-visible, +.nav-bar-path:focus-visible { + outline: 1px solid; + box-shadow: none; + outline-offset: -4px; +} +.nav-bar-expand-all:focus-visible, +.nav-bar-collapse-all:focus-visible, +.nav-bar-tag-icon:focus-visible { + outline: 1px solid; + box-shadow: none; + outline-offset: 2px; +} +.nav-bar { + width:0; + height:100%; + overflow: hidden; + color:var(--nav-text-color); + background-color: var(--nav-bg-color); + background-blend-mode: multiply; + line-height: calc(var(--font-size-small) + 4px); + display:none; + position:relative; + flex-direction:column; + flex-wrap:nowrap; + word-break:break-word; +} +::slotted([slot=nav-logo]) { + padding:16px 16px 0 16px; +} +.nav-scroll { + overflow-x: hidden; + overflow-y: auto; + overflow-y: overlay; + scrollbar-width: thin; + scrollbar-color: var(--nav-hover-bg-color) transparent; +} + +.nav-bar-tag { + display: flex; + align-items: center; + justify-content: space-between; + flex-direction: row; +} +.nav-bar.read .nav-bar-tag-icon { + display:none; +} +.nav-bar-paths-under-tag { + overflow:hidden; + transition: max-height .2s ease-out, visibility .3s; +} +.collapsed .nav-bar-paths-under-tag { + visibility: hidden; +} + +.nav-bar-expand-all { + transform: rotate(90deg); + cursor:pointer; + margin-right:10px; +} +.nav-bar-collapse-all { + transform: rotate(270deg); + cursor:pointer; +} +.nav-bar-expand-all:hover, .nav-bar-collapse-all:hover { + color: var(--primary-color); +} + +.nav-bar-tag-icon { + color: var(--nav-text-color); + font-size: 20px; +} +.nav-bar-tag-icon:hover { + color:var(--nav-hover-text-color); +} +.nav-bar.focused .nav-bar-tag-and-paths.collapsed .nav-bar-tag-icon::after { + content: '⌵'; + width:16px; + height:16px; + text-align: center; + display: inline-block; + transform: rotate(-90deg); + transition: transform 0.2s ease-out 0s; +} +.nav-bar.focused .nav-bar-tag-and-paths.expanded .nav-bar-tag-icon::after { + content: '⌵'; + width:16px; + height:16px; + text-align: center; + display: inline-block; + transition: transform 0.2s ease-out 0s; +} +.nav-scroll::-webkit-scrollbar { + width: var(--scroll-bar-width, 8px); +} +.nav-scroll::-webkit-scrollbar-track { + background:transparent; +} +.nav-scroll::-webkit-scrollbar-thumb { + background-color: var(--nav-hover-bg-color); +} + +.nav-bar-tag { + font-size: var(--font-size-regular); + color: var(--nav-accent-color); + border-left:4px solid transparent; + font-weight:bold; + padding: 15px 15px 15px 10px; + text-transform: capitalize; +} + +.nav-bar-components, +.nav-bar-h1, +.nav-bar-h2, +.nav-bar-info, +.nav-bar-tag, +.nav-bar-path { + display:flex; + cursor: pointer; + width: 100%; + border: none; + border-radius:4px; + color: var(--nav-text-color); + background: transparent; + border-left:4px solid transparent; +} + +.nav-bar-h1, +.nav-bar-h2, +.nav-bar-path { + font-size: calc(var(--font-size-small) + 1px); + padding: var(--nav-item-padding); +} +.nav-bar-path.small-font { + font-size: var(--font-size-small); +} + +.nav-bar-info { + font-size: var(--font-size-regular); + padding: 16px 10px; + font-weight:bold; +} +.nav-bar-section { + display: flex; + flex-direction: row; + justify-content: space-between; + font-size: var(--font-size-small); + color: var(--nav-text-color); + padding: var(--nav-item-padding); + font-weight:bold; +} +.nav-bar-section.operations { + cursor:pointer; +} +.nav-bar-section.operations:hover { + color:var(--nav-hover-text-color); + background-color:var(--nav-hover-bg-color); +} + +.nav-bar-section:first-child { + display: none; +} +.nav-bar-h2 {margin-left:12px;} + +.nav-bar-h1.left-bar.active, +.nav-bar-h2.left-bar.active, +.nav-bar-info.left-bar.active, +.nav-bar-tag.left-bar.active, +.nav-bar-path.left-bar.active, +.nav-bar-section.left-bar.operations.active { + border-left:4px solid var(--nav-accent-color); + color:var(--nav-hover-text-color); +} + +.nav-bar-h1.colored-block.active, +.nav-bar-h2.colored-block.active, +.nav-bar-info.colored-block.active, +.nav-bar-tag.colored-block.active, +.nav-bar-path.colored-block.active, +.nav-bar-section.colored-block.operations.active { + background-color: var(--nav-accent-color); + color: var(--nav-accent-text-color); + border-radius: 0; +} + +.nav-bar-h1:hover, +.nav-bar-h2:hover, +.nav-bar-info:hover, +.nav-bar-tag:hover, +.nav-bar-path:hover { + color:var(--nav-hover-text-color); + background-color:var(--nav-hover-bg-color); +} +`,lt=c` +#api-info { + font-size: calc(var(--font-size-regular) - 1px); + margin-top: 8px; + margin-left: -15px; +} + +#api-info span:before { + content: "|"; + display: inline-block; + opacity: 0.5; + width: 15px; + text-align: center; +} +#api-info span:first-child:before { + content: ""; + width: 0px; +} +`,ct=c` + +`;const pt=/[\s#:?&={}]/g,ut="_rapidoc_api_key";function dt(e){return new Promise((t=>setTimeout(t,e)))}function ht(e,t){const r=t.target,s=document.createElement("textarea");s.value=e,s.style.position="fixed",document.body.appendChild(s),s.focus(),s.select();try{document.execCommand("copy"),r.innerText="Copied",setTimeout((()=>{r.innerText="Copy"}),5e3)}catch(e){console.error("Unable to copy",e)}document.body.removeChild(s)}function mt(e,t,r=""){return`${t.method} ${t.path} ${t.summary||""} ${t.description||""} ${t.operationId||""} ${r}`.toLowerCase().includes(e.toLowerCase())}function ft(e,t=new Set){return e?(Object.keys(e).forEach((r=>{var s;if(t.add(r),e[r].properties)ft(e[r].properties,t);else if(null!==(s=e[r].items)&&void 0!==s&&s.properties){var n;ft(null===(n=e[r].items)||void 0===n?void 0:n.properties,t)}})),t):t}function gt(e,t){if(e){const r=document.createElement("a");document.body.appendChild(r),r.style="display: none",r.href=e,r.download=t,r.click(),r.remove()}}function yt(e){if(e){const t=document.createElement("a");document.body.appendChild(t),t.style="display: none",t.href=e,t.target="_blank",t.click(),t.remove()}}const vt=Object.freeze({url:"/"}),{fetch:bt,Response:xt,Headers:wt,Request:$t,FormData:St,File:Et,Blob:kt}=globalThis;function At(e,t){return t||"undefined"==typeof navigator||(t=navigator),t&&"ReactNative"===t.product?!(!e||"object"!=typeof e||"string"!=typeof e.uri):"undefined"!=typeof File&&e instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||!!ArrayBuffer.isView(e)||null!==e&&"object"==typeof e&&"function"==typeof e.pipe}function Ot(e,t){return Array.isArray(e)&&e.some((e=>At(e,t)))}void 0===globalThis.fetch&&(globalThis.fetch=bt),void 0===globalThis.Headers&&(globalThis.Headers=wt),void 0===globalThis.Request&&(globalThis.Request=$t),void 0===globalThis.Response&&(globalThis.Response=xt),void 0===globalThis.FormData&&(globalThis.FormData=St),void 0===globalThis.File&&(globalThis.File=Et),void 0===globalThis.Blob&&(globalThis.Blob=kt);class jt extends File{constructor(e,t="",r={}){super([e],t,r),this.data=e}valueOf(){return this.data}toString(){return this.valueOf()}}function Tt(e,t="reserved"){return[...e].map((e=>{if((e=>/^[a-z0-9\-._~]+$/i.test(e))(e))return e;if((e=>":/?#[]@!$&'()*+,;=".indexOf(e)>-1)(e)&&"unsafe"===t)return e;const r=new TextEncoder;return Array.from(r.encode(e)).map((e=>`0${e.toString(16).toUpperCase()}`.slice(-2))).map((e=>`%${e}`)).join("")})).join("")}function Pt(e){const{value:t}=e;return Array.isArray(t)?function({key:e,value:t,style:r,explode:s,escape:n}){if("simple"===r)return t.map((e=>Ct(e,n))).join(",");if("label"===r)return`.${t.map((e=>Ct(e,n))).join(".")}`;if("matrix"===r)return t.map((e=>Ct(e,n))).reduce(((t,r)=>!t||s?`${t||""};${e}=${r}`:`${t},${r}`),"");if("form"===r){const r=s?`&${e}=`:",";return t.map((e=>Ct(e,n))).join(r)}if("spaceDelimited"===r){const r=s?`${e}=`:"";return t.map((e=>Ct(e,n))).join(` ${r}`)}if("pipeDelimited"===r){const r=s?`${e}=`:"";return t.map((e=>Ct(e,n))).join(`|${r}`)}}(e):"object"==typeof t?function({key:e,value:t,style:r,explode:s,escape:n}){const i=Object.keys(t);return"simple"===r?i.reduce(((e,r)=>{const i=Ct(t[r],n);return`${e?`${e},`:""}${r}${s?"=":","}${i}`}),""):"label"===r?i.reduce(((e,r)=>{const i=Ct(t[r],n);return`${e?`${e}.`:"."}${r}${s?"=":"."}${i}`}),""):"matrix"===r&&s?i.reduce(((e,r)=>`${e?`${e};`:";"}${r}=${Ct(t[r],n)}`),""):"matrix"===r?i.reduce(((r,s)=>{const i=Ct(t[s],n);return`${r?`${r},`:`;${e}=`}${s},${i}`}),""):"form"===r?i.reduce(((e,r)=>{const i=Ct(t[r],n);return`${e?`${e}${s?"&":","}`:""}${r}${s?"=":","}${i}`}),""):void 0}(e):function({key:e,value:t,style:r,escape:s}){return"simple"===r?Ct(t,s):"label"===r?`.${Ct(t,s)}`:"matrix"===r?`;${e}=${Ct(t,s)}`:"form"===r||"deepObject"===r?Ct(t,s):void 0}(e)}function Ct(e,t=!1){return Array.isArray(e)||null!==e&&"object"==typeof e?e=JSON.stringify(e):"number"!=typeof e&&"boolean"!=typeof e||(e=String(e)),t&&e.length>0?Tt(e,t):e}const It={form:",",spaceDelimited:"%20",pipeDelimited:"|"},_t={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};function Rt(e,t,r=!1){const{collectionFormat:s,allowEmptyValue:n,serializationOption:i,encoding:o}=t,a="object"!=typeof t||Array.isArray(t)?t:t.value,l=r?e=>e.toString():e=>encodeURIComponent(e),c=l(e);if(void 0===a&&n)return[[c,""]];if(At(a)||Ot(a))return[[c,a]];if(i)return Ft(e,a,r,i);if(o){if([typeof o.style,typeof o.explode,typeof o.allowReserved].some((e=>"undefined"!==e))){const{style:t,explode:s,allowReserved:n}=o;return Ft(e,a,r,{style:t,explode:s,allowReserved:n})}if("string"==typeof o.contentType){if(o.contentType.startsWith("application/json")){const e=l("string"==typeof a?a:JSON.stringify(a));return[[c,new jt(e,"blob",{type:o.contentType})]]}const e=l(String(a));return[[c,new jt(e,"blob",{type:o.contentType})]]}return"object"!=typeof a?[[c,l(a)]]:Array.isArray(a)&&a.every((e=>"object"!=typeof e))?[[c,a.map(l).join(",")]]:[[c,l(JSON.stringify(a))]]}return"object"!=typeof a?[[c,l(a)]]:Array.isArray(a)?"multi"===s?[[c,a.map(l)]]:[[c,a.map(l).join(_t[s||"csv"])]]:[[c,""]]}function Ft(e,t,r,s){const n=s.style||"form",i=void 0===s.explode?"form"===n:s.explode,o=!r&&(s&&s.allowReserved?"unsafe":"reserved"),a=e=>Ct(e,o),l=r?e=>e:e=>a(e);return"object"!=typeof t?[[l(e),a(t)]]:Array.isArray(t)?i?[[l(e),t.map(a)]]:[[l(e),t.map(a).join(It[n])]]:"deepObject"===n?Object.keys(t).map((r=>[l(`${e}[${r}]`),a(t[r])])):i?Object.keys(t).map((e=>[l(e),a(t[e])])):[[l(e),Object.keys(t).map((e=>[`${l(e)},${a(t[e])}`])).join(",")]]}function Mt(e){return((e,{encode:t=!0}={})=>{const r=(e,t,s)=>(null==s?e.append(t,""):Array.isArray(s)?s.reduce(((s,n)=>r(e,t,n)),e):s instanceof Date?e.append(t,s.toISOString()):"object"==typeof s?Object.entries(s).reduce(((s,[n,i])=>r(e,`${t}[${n}]`,i)),e):e.append(t,s),e),s=Object.entries(e).reduce(((e,[t,s])=>r(e,t,s)),new URLSearchParams),n=String(s);return t?n:decodeURIComponent(n)})(Object.keys(e).reduce(((t,r)=>{for(const[s,n]of Rt(r,e[r]))t[s]=n instanceof jt?n.valueOf():n;return t}),{}),{encode:!1})}function Lt(e={}){const{url:t="",query:r,form:s}=e;if(s){const t=Object.keys(s).some((e=>{const{value:t}=s[e];return At(t)||Ot(t)})),r=e.headers["content-type"]||e.headers["Content-Type"];if(t||/multipart\/form-data/i.test(r)){const t=(n=e.form,Object.entries(n).reduce(((e,[t,r])=>{for(const[s,n]of Rt(t,r,!0))if(Array.isArray(n))for(const t of n)if(ArrayBuffer.isView(t)){const r=new Blob([t]);e.append(s,r)}else e.append(s,t);else if(ArrayBuffer.isView(n)){const t=new Blob([n]);e.append(s,t)}else e.append(s,n);return e}),new FormData));e.formdata=t,e.body=t}else e.body=Mt(s);delete e.form}var n;if(r){const[s,n]=t.split("?");let i="";if(n){const e=new URLSearchParams(n);Object.keys(r).forEach((t=>e.delete(t))),i=String(e)}const o=((...e)=>{const t=e.filter((e=>e)).join("&");return t?`?${t}`:""})(i,Mt(r));e.url=s+o,delete e.query}return e}function Dt(e){return null==e}var Bt={isNothing:Dt,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:Dt(e)?[]:[e]},repeat:function(e,t){var r,s="";for(r=0;ra&&(t=s-a+(i=" ... ").length),r-s>a&&(r=s+a-(o=" ...").length),{str:i+e.slice(t,r).replace(/\t/g,"→")+o,pos:s-t+i.length}}function Ht(e,t){return Bt.repeat(" ",t-e.length)+e}var Vt=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var r,s=/\r?\n|\r|\0/g,n=[0],i=[],o=-1;r=s.exec(e.buffer);)i.push(r.index),n.push(r.index+r[0].length),e.position<=r.index&&o<0&&(o=n.length-2);o<0&&(o=n.length-1);var a,l,c="",p=Math.min(e.line+t.linesAfter,i.length).toString().length,u=t.maxLength-(t.indent+p+3);for(a=1;a<=t.linesBefore&&!(o-a<0);a++)l=zt(e.buffer,n[o-a],i[o-a],e.position-(n[o]-n[o-a]),u),c=Bt.repeat(" ",t.indent)+Ht((e.line-a+1).toString(),p)+" | "+l.str+"\n"+c;for(l=zt(e.buffer,n[o],i[o],e.position,u),c+=Bt.repeat(" ",t.indent)+Ht((e.line+1).toString(),p)+" | "+l.str+"\n",c+=Bt.repeat("-",t.indent+p+3+l.pos)+"^\n",a=1;a<=t.linesAfter&&!(o+a>=i.length);a++)l=zt(e.buffer,n[o+a],i[o+a],e.position-(n[o]-n[o+a]),u),c+=Bt.repeat(" ",t.indent)+Ht((e.line+a+1).toString(),p)+" | "+l.str+"\n";return c.replace(/\n$/,"")},Wt=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],Gt=["scalar","sequence","mapping"],Jt=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===Wt.indexOf(t))throw new Ut('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(r){e[r].forEach((function(e){t[String(e)]=r}))})),t}(t.styleAliases||null),-1===Gt.indexOf(this.kind))throw new Ut('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function Kt(e,t){var r=[];return e[t].forEach((function(e){var t=r.length;r.forEach((function(r,s){r.tag===e.tag&&r.kind===e.kind&&r.multi===e.multi&&(t=s)})),r[t]=e})),r}function Yt(e){return this.extend(e)}Yt.prototype.extend=function(e){var t=[],r=[];if(e instanceof Jt)r.push(e);else if(Array.isArray(e))r=r.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new Ut("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(r=r.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof Jt))throw new Ut("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new Ut("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new Ut("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),r.forEach((function(e){if(!(e instanceof Jt))throw new Ut("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var s=Object.create(Yt.prototype);return s.implicit=(this.implicit||[]).concat(t),s.explicit=(this.explicit||[]).concat(r),s.compiledImplicit=Kt(s,"implicit"),s.compiledExplicit=Kt(s,"explicit"),s.compiledTypeMap=function(){var e,t,r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function s(e){e.multi?(r.multi[e.kind].push(e),r.multi.fallback.push(e)):r[e.kind][e.tag]=r.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),ar=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),lr=/^[-+]?[0-9]+e/,cr=new Jt("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!ar.test(e)||"_"===e[e.length-1])},construct:function(e){var t,r;return r="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:r*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||Bt.isNegativeZero(e))},represent:function(e,t){var r;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(Bt.isNegativeZero(e))return"-0.0";return r=e.toString(10),lr.test(r)?r.replace("e",".e"):r},defaultStyle:"lowercase"}),pr=tr.extend({implicit:[rr,sr,or,cr]}),ur=pr,dr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),hr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"),mr=new Jt("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==dr.exec(e)||null!==hr.exec(e))},construct:function(e){var t,r,s,n,i,o,a,l,c=0,p=null;if(null===(t=dr.exec(e))&&(t=hr.exec(e)),null===t)throw new Error("Date resolve error");if(r=+t[1],s=+t[2]-1,n=+t[3],!t[4])return new Date(Date.UTC(r,s,n));if(i=+t[4],o=+t[5],a=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+="0";c=+c}return t[9]&&(p=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(p=-p)),l=new Date(Date.UTC(r,s,n,i,o,a,c)),p&&l.setTime(l.getTime()-p),l},instanceOf:Date,represent:function(e){return e.toISOString()}}),fr=new Jt("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),gr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r",yr=new Jt("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,r,s=0,n=e.length,i=gr;for(r=0;r64)){if(t<0)return!1;s+=6}return s%8==0},construct:function(e){var t,r,s=e.replace(/[\r\n=]/g,""),n=s.length,i=gr,o=0,a=[];for(t=0;t>16&255),a.push(o>>8&255),a.push(255&o)),o=o<<6|i.indexOf(s.charAt(t));return 0==(r=n%4*6)?(a.push(o>>16&255),a.push(o>>8&255),a.push(255&o)):18===r?(a.push(o>>10&255),a.push(o>>2&255)):12===r&&a.push(o>>4&255),new Uint8Array(a)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,r,s="",n=0,i=e.length,o=gr;for(t=0;t>18&63],s+=o[n>>12&63],s+=o[n>>6&63],s+=o[63&n]),n=(n<<8)+e[t];return 0==(r=i%3)?(s+=o[n>>18&63],s+=o[n>>12&63],s+=o[n>>6&63],s+=o[63&n]):2===r?(s+=o[n>>10&63],s+=o[n>>4&63],s+=o[n<<2&63],s+=o[64]):1===r&&(s+=o[n>>2&63],s+=o[n<<4&63],s+=o[64],s+=o[64]),s}}),vr=Object.prototype.hasOwnProperty,br=Object.prototype.toString,xr=new Jt("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,r,s,n,i,o=[],a=e;for(t=0,r=a.length;t>10),56320+(e-65536&1023))}for(var qr=new Array(256),Nr=new Array(256),Ur=0;Ur<256;Ur++)qr[Ur]=Dr(Ur)?1:0,Nr[Ur]=Dr(Ur);function zr(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||kr,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Hr(e,t){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=Vt(r),new Ut(t,r)}function Vr(e,t){throw Hr(e,t)}function Wr(e,t){e.onWarning&&e.onWarning.call(null,Hr(e,t))}var Gr={YAML:function(e,t,r){var s,n,i;null!==e.version&&Vr(e,"duplication of %YAML directive"),1!==r.length&&Vr(e,"YAML directive accepts exactly one argument"),null===(s=/^([0-9]+)\.([0-9]+)$/.exec(r[0]))&&Vr(e,"ill-formed argument of the YAML directive"),n=parseInt(s[1],10),i=parseInt(s[2],10),1!==n&&Vr(e,"unacceptable YAML version of the document"),e.version=r[0],e.checkLineBreaks=i<2,1!==i&&2!==i&&Wr(e,"unsupported YAML version of the document")},TAG:function(e,t,r){var s,n;2!==r.length&&Vr(e,"TAG directive accepts exactly two arguments"),s=r[0],n=r[1],Pr.test(s)||Vr(e,"ill-formed tag handle (first argument) of the TAG directive"),Ar.call(e.tagMap,s)&&Vr(e,'there is a previously declared suffix for "'+s+'" tag handle'),Cr.test(n)||Vr(e,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(t){Vr(e,"tag prefix is malformed: "+n)}e.tagMap[s]=n}};function Jr(e,t,r,s){var n,i,o,a;if(t1&&(e.result+=Bt.repeat("\n",t-1))}function ts(e,t){var r,s,n=e.tag,i=e.anchor,o=[],a=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=o),s=e.input.charCodeAt(e.position);0!==s&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,Vr(e,"tab characters must not be used in indentation")),45===s)&&Fr(e.input.charCodeAt(e.position+1));)if(a=!0,e.position++,Zr(e,!0,-1)&&e.lineIndent<=t)o.push(null),s=e.input.charCodeAt(e.position);else if(r=e.line,ns(e,t,3,!1,!0),o.push(e.result),Zr(e,!0,-1),s=e.input.charCodeAt(e.position),(e.line===r||e.lineIndent>t)&&0!==s)Vr(e,"bad indentation of a sequence entry");else if(e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt?m=1:e.lineIndent===t?m=0:e.lineIndentt)&&(y&&(o=e.line,a=e.lineStart,l=e.position),ns(e,t,4,!0,n)&&(y?f=e.result:g=e.result),y||(Yr(e,d,h,m,f,g,o,a,l),m=f=g=null),Zr(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===i||e.lineIndent>t)&&0!==c)Vr(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===n?Vr(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?Vr(e,"repeat of an indentation width identifier"):(p=t+n-1,c=!0)}if(Rr(i)){do{i=e.input.charCodeAt(++e.position)}while(Rr(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!_r(i)&&0!==i)}for(;0!==i;){for(Xr(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!c||e.lineIndentp&&(p=e.lineIndent),_r(i))u++;else{if(e.lineIndent0){for(n=o,i=0;n>0;n--)(o=Lr(a=e.input.charCodeAt(++e.position)))>=0?i=(i<<4)+o:Vr(e,"expected hexadecimal character");e.result+=Br(i),e.position++}else Vr(e,"unknown escape sequence");r=s=e.position}else _r(a)?(Jr(e,r,s,!0),es(e,Zr(e,!1,t)),r=s=e.position):e.position===e.lineStart&&Qr(e)?Vr(e,"unexpected end of the document within a double quoted scalar"):(e.position++,s=e.position)}Vr(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?g=!0:function(e){var t,r,s;if(42!==(s=e.input.charCodeAt(e.position)))return!1;for(s=e.input.charCodeAt(++e.position),t=e.position;0!==s&&!Fr(s)&&!Mr(s);)s=e.input.charCodeAt(++e.position);return e.position===t&&Vr(e,"name of an alias node must contain at least one character"),r=e.input.slice(t,e.position),Ar.call(e.anchorMap,r)||Vr(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],Zr(e,!0,-1),!0}(e)?(g=!0,null===e.tag&&null===e.anchor||Vr(e,"alias node should not have any properties")):function(e,t,r){var s,n,i,o,a,l,c,p,u=e.kind,d=e.result;if(Fr(p=e.input.charCodeAt(e.position))||Mr(p)||35===p||38===p||42===p||33===p||124===p||62===p||39===p||34===p||37===p||64===p||96===p)return!1;if((63===p||45===p)&&(Fr(s=e.input.charCodeAt(e.position+1))||r&&Mr(s)))return!1;for(e.kind="scalar",e.result="",n=i=e.position,o=!1;0!==p;){if(58===p){if(Fr(s=e.input.charCodeAt(e.position+1))||r&&Mr(s))break}else if(35===p){if(Fr(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&Qr(e)||r&&Mr(p))break;if(_r(p)){if(a=e.line,l=e.lineStart,c=e.lineIndent,Zr(e,!1,-1),e.lineIndent>=t){o=!0,p=e.input.charCodeAt(e.position);continue}e.position=i,e.line=a,e.lineStart=l,e.lineIndent=c;break}}o&&(Jr(e,n,i,!1),es(e,e.line-a),n=i=e.position,o=!1),Rr(p)||(i=e.position+1),p=e.input.charCodeAt(++e.position)}return Jr(e,n,i,!1),!!e.result||(e.kind=u,e.result=d,!1)}(e,d,1===r)&&(g=!0,null===e.tag&&(e.tag="?")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(g=a&&ts(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&Vr(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),l=0,c=e.implicitTypes.length;l"),null!==e.result&&u.kind!==e.kind&&Vr(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+u.kind+'", not "'+e.kind+'"'),u.resolve(e.result,e.tag)?(e.result=u.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):Vr(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function is(e){var t,r,s,n,i=e.position,o=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(n=e.input.charCodeAt(e.position))&&(Zr(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){for(o=!0,n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!Fr(n);)n=e.input.charCodeAt(++e.position);for(s=[],(r=e.input.slice(t,e.position)).length<1&&Vr(e,"directive name must not be less than one character in length");0!==n;){for(;Rr(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!_r(n));break}if(_r(n))break;for(t=e.position;0!==n&&!Fr(n);)n=e.input.charCodeAt(++e.position);s.push(e.input.slice(t,e.position))}0!==n&&Xr(e),Ar.call(Gr,r)?Gr[r](e,r,s):Wr(e,'unknown document directive "'+r+'"')}Zr(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,Zr(e,!0,-1)):o&&Vr(e,"directives end mark is expected"),ns(e,e.lineIndent-1,4,!1,!0),Zr(e,!0,-1),e.checkLineBreaks&&jr.test(e.input.slice(i,e.position))&&Wr(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&Qr(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,Zr(e,!0,-1)):e.position=55296&&s<=56319&&t+1=56320&&r<=57343?1024*(s-55296)+r-56320+65536:s}function Ss(e){return/^\n* /.test(e)}function Es(e,t,r,s,n){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==ds.indexOf(t)||hs.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var i=e.indent*Math.max(1,r),o=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-i),a=s||e.flowLevel>-1&&r>=e.flowLevel;switch(function(e,t,r,s,n,i,o,a){var l,c,p=0,u=null,d=!1,h=!1,m=-1!==s,f=-1,g=bs(c=$s(e,0))&&65279!==c&&!vs(c)&&45!==c&&63!==c&&58!==c&&44!==c&&91!==c&&93!==c&&123!==c&&125!==c&&35!==c&&38!==c&&42!==c&&33!==c&&124!==c&&61!==c&&62!==c&&39!==c&&34!==c&&37!==c&&64!==c&&96!==c&&function(e){return!vs(e)&&58!==e}($s(e,e.length-1));if(t||o)for(l=0;l=65536?l+=2:l++){if(!bs(p=$s(e,l)))return 5;g=g&&ws(p,u,a),u=p}else{for(l=0;l=65536?l+=2:l++){if(10===(p=$s(e,l)))d=!0,m&&(h=h||l-f-1>s&&" "!==e[f+1],f=l);else if(!bs(p))return 5;g=g&&ws(p,u,a),u=p}h=h||m&&l-f-1>s&&" "!==e[f+1]}return d||h?r>9&&Ss(e)?5:o?2===i?5:2:h?4:3:!g||o||n(e)?2===i?5:2:1}(t,a,e.indent,o,(function(t){return function(e,t){var r,s;for(r=0,s=e.implicitTypes.length;r"+ks(t,e.indent)+As(gs(function(e,t){for(var r,s,n,i=/(\n+)([^\n]*)/g,o=(n=-1!==(n=e.indexOf("\n"))?n:e.length,i.lastIndex=n,Os(e.slice(0,n),t)),a="\n"===e[0]||" "===e[0];s=i.exec(e);){var l=s[1],c=s[2];r=" "===c[0],o+=l+(a||r||""===c?"":"\n")+Os(c,t),a=r}return o}(t,o),i));case 5:return'"'+function(e){for(var t,r="",s=0,n=0;n=65536?n+=2:n++)s=$s(e,n),!(t=us[s])&&bs(s)?(r+=e[n],s>=65536&&(r+=e[n+1])):r+=t||ms(s);return r}(t)+'"';default:throw new Ut("impossible error: invalid scalar style")}}()}function ks(e,t){var r=Ss(e)?String(t):"",s="\n"===e[e.length-1];return r+(!s||"\n"!==e[e.length-2]&&"\n"!==e?s?"":"-":"+")+"\n"}function As(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function Os(e,t){if(""===e||" "===e[0])return e;for(var r,s,n=/ [^ ]/g,i=0,o=0,a=0,l="";r=n.exec(e);)(a=r.index)-i>t&&(s=o>i?o:a,l+="\n"+e.slice(i,s),i=s+1),o=a;return l+="\n",e.length-i>t&&o>i?l+=e.slice(i,o)+"\n"+e.slice(o+1):l+=e.slice(i),l.slice(1)}function js(e,t,r,s){var n,i,o,a="",l=e.tag;for(n=0,i=r.length;n tag resolver accepts not "'+l+'" style');s=a.represent[l](t,l)}e.dump=s}return!0}return!1}function Ps(e,t,r,s,n,i,o){e.tag=null,e.dump=r,Ts(e,r,!1)||Ts(e,r,!0);var a,l=cs.call(e.dump),c=s;s&&(s=e.flowLevel<0||e.flowLevel>t);var p,u,d="[object Object]"===l||"[object Array]"===l;if(d&&(u=-1!==(p=e.duplicates.indexOf(r))),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(n=!1),u&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&u&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===l)s&&0!==Object.keys(e.dump).length?(function(e,t,r,s){var n,i,o,a,l,c,p="",u=e.tag,d=Object.keys(r);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new Ut("sortKeys must be a boolean or a function");for(n=0,i=d.length;n1024)&&(e.dump&&10===e.dump.charCodeAt(0)?c+="?":c+="? "),c+=e.dump,l&&(c+=ys(e,t)),Ps(e,t+1,a,!0,l)&&(e.dump&&10===e.dump.charCodeAt(0)?c+=":":c+=": ",p+=c+=e.dump));e.tag=u,e.dump=p||"{}"}(e,t,e.dump,n),u&&(e.dump="&ref_"+p+e.dump)):(function(e,t,r){var s,n,i,o,a,l="",c=e.tag,p=Object.keys(r);for(s=0,n=p.length;s1024&&(a+="? "),a+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ps(e,t,o,!1,!1)&&(l+=a+=e.dump));e.tag=c,e.dump="{"+l+"}"}(e,t,e.dump),u&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===l)s&&0!==e.dump.length?(e.noArrayIndent&&!o&&t>0?js(e,t-1,e.dump,n):js(e,t,e.dump,n),u&&(e.dump="&ref_"+p+e.dump)):(function(e,t,r){var s,n,i,o="",a=e.tag;for(s=0,n=r.length;s",e.dump=a+" "+e.dump)}return!0}function Cs(e,t){var r,s,n=[],i=[];for(Is(e,n,i),r=0,s=i.length;r(e[t]=function(e){return e.includes(", ")?e.split(", "):e}(r),e)),{})}function Ys(e,t,{loadSpec:r=!1}={}){const s={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:Ks(e.headers)},n=s.headers["content-type"],i=r||((e="")=>/(json|xml|yaml|text)\b/.test(e))(n);return(i?e.text:e.blob||e.buffer).call(e).then((e=>{if(s.text=e,s.data=e,i)try{const t=function(e,t){return t&&(0===t.indexOf("application/json")||t.indexOf("+json")>0)?JSON.parse(e):Js.load(e)}(e,n);s.body=t,s.obj=t}catch(e){s.parseError=e}return s}))}async function Xs(e,t={}){"object"==typeof e&&(e=(t=e).url),t.headers=t.headers||{},(t=Lt(t)).headers&&Object.keys(t.headers).forEach((e=>{const r=t.headers[e];"string"==typeof r&&(t.headers[e]=r.replace(/\n+/g," "))})),t.requestInterceptor&&(t=await t.requestInterceptor(t)||t);const r=t.headers["content-type"]||t.headers["Content-Type"];let s;/multipart\/form-data/i.test(r)&&(delete t.headers["content-type"],delete t.headers["Content-Type"]);try{s=await(t.userFetch||fetch)(t.url,t),s=await Ys(s,e,t),t.responseInterceptor&&(s=await t.responseInterceptor(s)||s)}catch(e){if(!s)throw e;const t=new Error(s.statusText||`response status is ${s.status}`);throw t.status=s.status,t.statusCode=s.status,t.responseError=e,t}if(!s.ok){const e=new Error(s.statusText||`response status is ${s.status}`);throw e.status=s.status,e.statusCode=s.status,e.response=s,e}return s}function Zs(e,t={}){const{requestInterceptor:r,responseInterceptor:s}=t,n=e.withCredentials?"include":"same-origin";return t=>e({url:t,loadSpec:!0,requestInterceptor:r,responseInterceptor:s,headers:{Accept:"application/json, application/yaml"},credentials:n}).then((e=>e.body))}const Qs=e=>{var t,r;const{baseDoc:s,url:n}=e,i=null!==(t=null!=s?s:n)&&void 0!==t?t:"";return"string"==typeof(null===(r=globalThis.document)||void 0===r?void 0:r.baseURI)?String(new URL(i,globalThis.document.baseURI)):i},en=e=>{const{fetch:t,http:r}=e;return t||r||Xs};var tn,rn=(tn=function(e,t){return tn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},tn(e,t)},function(e,t){function r(){this.constructor=e}tn(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),sn=Object.prototype.hasOwnProperty;function nn(e,t){return sn.call(e,t)}function on(e){if(Array.isArray(e)){for(var t=new Array(e.length),r=0;r=48&&t<=57))return!1;r++}return!0}function cn(e){return-1===e.indexOf("/")&&-1===e.indexOf("~")?e:e.replace(/~/g,"~0").replace(/\//g,"~1")}function pn(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function un(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,r=e.length;t0&&"constructor"==a[c-1]))throw new TypeError("JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README");if(r&&void 0===u&&(void 0===l[d]?u=a.slice(0,c).join("/"):c==p-1&&(u=t.path),void 0!==u&&h(t,0,e,u)),c++,Array.isArray(l)){if("-"===d)d=l.length;else{if(r&&!ln(d))throw new mn("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",i,t,e);ln(d)&&(d=~~d)}if(c>=p){if(r&&"add"===t.op&&d>l.length)throw new mn("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",i,t,e);if(!1===(o=yn[t.op].call(t,l,d,e)).test)throw new mn("Test operation failed","TEST_OPERATION_FAILED",i,t,e);return o}}else if(c>=p){if(!1===(o=gn[t.op].call(t,l,d,e)).test)throw new mn("Test operation failed","TEST_OPERATION_FAILED",i,t,e);return o}if(l=l[d],r&&c0)throw new mn('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",t,e,r);if(("move"===e.op||"copy"===e.op)&&"string"!=typeof e.from)throw new mn("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&void 0===e.value)throw new mn("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",t,e,r);if(("add"===e.op||"replace"===e.op||"test"===e.op)&&un(e.value))throw new mn("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",t,e,r);if(r)if("add"==e.op){var n=e.path.split("/").length,i=s.split("/").length;if(n!==i+1&&n!==i)throw new mn("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",t,e,r)}else if("replace"===e.op||"remove"===e.op||"_get"===e.op){if(e.path!==s)throw new mn("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",t,e,r)}else if("move"===e.op||"copy"===e.op){var o=$n([{op:"_get",path:e.from,value:void 0}],r);if(o&&"OPERATION_PATH_UNRESOLVABLE"===o.name)throw new mn("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",t,e,r)}}function $n(e,t,r){try{if(!Array.isArray(e))throw new mn("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)xn(an(t),an(e),r||!0);else{r=r||wn;for(var s=0;s0&&(e.patches=[],e.callback&&e.callback(s)),s}function Tn(e,t,r,s,n){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var i=on(t),o=on(e),a=!1,l=o.length-1;l>=0;l--){var c=e[u=o[l]];if(!nn(t,u)||void 0===t[u]&&void 0!==c&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(n&&r.push({op:"test",path:s+"/"+cn(u),value:an(c)}),r.push({op:"remove",path:s+"/"+cn(u)}),a=!0):(n&&r.push({op:"test",path:s,value:e}),r.push({op:"replace",path:s,value:t}));else{var p=t[u];"object"==typeof c&&null!=c&&"object"==typeof p&&null!=p&&Array.isArray(c)===Array.isArray(p)?Tn(c,p,r,s+"/"+cn(u),n):c!==p&&(n&&r.push({op:"test",path:s+"/"+cn(u),value:an(c)}),r.push({op:"replace",path:s+"/"+cn(u),value:an(p)}))}}if(a||i.length!=o.length)for(l=0;lvoid 0!==t&&e?e[t]:e),e)},applyPatch:function(e,t,r){if(r=r||{},"merge"===(t={...t,path:t.path&&Nn(t.path)}).op){const r=ti(e,t.path);Object.assign(r,t.value),xn(e,[Un(t.path,r)])}else if("mergeDeep"===t.op){const r=ti(e,t.path),s=Bn(r,t.value);e=xn(e,[Un(t.path,s)]).newDocument}else if("add"===t.op&&""===t.path&&Kn(t.value)){const r=Object.keys(t.value).reduce(((e,r)=>(e.push({op:"add",path:`/${Nn(r)}`,value:t.value[r]}),e)),[]);xn(e,r)}else if("replace"===t.op&&""===t.path){let{value:s}=t;r.allowMetaPatches&&t.meta&&Qn(t)&&(Array.isArray(t.value)||Kn(t.value))&&(s={...s,...t.meta}),e=s}else if(xn(e,[t]),r.allowMetaPatches&&t.meta&&Qn(t)&&(Array.isArray(t.value)||Kn(t.value))){const r={...ti(e,t.path),...t.meta};xn(e,[Un(t.path,r)])}return e},parentPathMatch:function(e,t){if(!Array.isArray(t))return!1;for(let r=0,s=t.length;r(e+"").replace(/~/g,"~0").replace(/\//g,"~1"))).join("/")}`:e}function Un(e,t,r){return{op:"replace",path:e,value:t,meta:r}}function zn(e,t,r){return Jn(Gn(e.filter(Qn).map((e=>t(e.value,r,e.path)))||[]))}function Hn(e,t,r){return r=r||[],Array.isArray(e)?e.map(((e,s)=>Hn(e,t,r.concat(s)))):Kn(e)?Object.keys(e).map((s=>Hn(e[s],t,r.concat(s)))):t(e,r[r.length-1],r)}function Vn(e,t,r){let s=[];if((r=r||[]).length>0){const n=t(e,r[r.length-1],r);n&&(s=s.concat(n))}if(Array.isArray(e)){const n=e.map(((e,s)=>Vn(e,t,r.concat(s))));n&&(s=s.concat(n))}else if(Kn(e)){const n=Object.keys(e).map((s=>Vn(e[s],t,r.concat(s))));n&&(s=s.concat(n))}return s=Gn(s),s}function Wn(e){return Array.isArray(e)?e:[e]}function Gn(e){return[].concat(...e.map((e=>Array.isArray(e)?Gn(e):e)))}function Jn(e){return e.filter((e=>void 0!==e))}function Kn(e){return e&&"object"==typeof e}function Yn(e){return e&&"function"==typeof e}function Xn(e){if(ei(e)){const{op:t}=e;return"add"===t||"remove"===t||"replace"===t}return!1}function Zn(e){return Xn(e)||ei(e)&&"mutation"===e.type}function Qn(e){return Zn(e)&&("add"===e.op||"replace"===e.op||"merge"===e.op||"mergeDeep"===e.op)}function ei(e){return e&&"object"==typeof e}function ti(e,t){try{return vn(e,t)}catch(e){return console.error(e),{}}}var ri=function(e){return e&&e.Math===Math&&e},si=ri("object"==typeof globalThis&&globalThis)||ri("object"==typeof window&&window)||ri("object"==typeof self&&self)||ri("object"==typeof global&&global)||ri(!1)||function(){return this}()||Function("return this")(),ni=function(e){try{return!!e()}catch(e){return!0}},ii=!ni((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")})),oi=ii,ai=Function.prototype,li=ai.apply,ci=ai.call,pi="object"==typeof Reflect&&Reflect.apply||(oi?ci.bind(li):function(){return ci.apply(li,arguments)}),ui=ii,di=Function.prototype,hi=di.call,mi=ui&&di.bind.bind(hi,hi),fi=ui?mi:function(e){return function(){return hi.apply(e,arguments)}},gi=fi,yi=gi({}.toString),vi=gi("".slice),bi=function(e){return vi(yi(e),8,-1)},xi=bi,wi=fi,$i=function(e){if("Function"===xi(e))return wi(e)},Si="object"==typeof document&&document.all,Ei=void 0===Si&&void 0!==Si?function(e){return"function"==typeof e||e===Si}:function(e){return"function"==typeof e},ki={},Ai=!ni((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]})),Oi=ii,ji=Function.prototype.call,Ti=Oi?ji.bind(ji):function(){return ji.apply(ji,arguments)},Pi={},Ci={}.propertyIsEnumerable,Ii=Object.getOwnPropertyDescriptor,_i=Ii&&!Ci.call({1:2},1);Pi.f=_i?function(e){var t=Ii(this,e);return!!t&&t.enumerable}:Ci;var Ri,Fi,Mi=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Li=ni,Di=bi,Bi=Object,qi=fi("".split),Ni=Li((function(){return!Bi("z").propertyIsEnumerable(0)}))?function(e){return"String"===Di(e)?qi(e,""):Bi(e)}:Bi,Ui=function(e){return null==e},zi=Ui,Hi=TypeError,Vi=function(e){if(zi(e))throw new Hi("Can't call method on "+e);return e},Wi=Ni,Gi=Vi,Ji=function(e){return Wi(Gi(e))},Ki=Ei,Yi=function(e){return"object"==typeof e?null!==e:Ki(e)},Xi={},Zi=Xi,Qi=si,eo=Ei,to=function(e){return eo(e)?e:void 0},ro=function(e,t){return arguments.length<2?to(Zi[e])||to(Qi[e]):Zi[e]&&Zi[e][t]||Qi[e]&&Qi[e][t]},so=fi({}.isPrototypeOf),no=si.navigator,io=no&&no.userAgent,oo=si,ao=io?String(io):"",lo=oo.process,co=oo.Deno,po=lo&&lo.versions||co&&co.version,uo=po&&po.v8;uo&&(Fi=(Ri=uo.split("."))[0]>0&&Ri[0]<4?1:+(Ri[0]+Ri[1])),!Fi&&ao&&(!(Ri=ao.match(/Edge\/(\d+)/))||Ri[1]>=74)&&(Ri=ao.match(/Chrome\/(\d+)/))&&(Fi=+Ri[1]);var ho=Fi,mo=ni,fo=si.String,go=!!Object.getOwnPropertySymbols&&!mo((function(){var e=Symbol("symbol detection");return!fo(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ho&&ho<41})),yo=go&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,vo=ro,bo=Ei,xo=so,wo=Object,$o=yo?function(e){return"symbol"==typeof e}:function(e){var t=vo("Symbol");return bo(t)&&xo(t.prototype,wo(e))},So=String,Eo=function(e){try{return So(e)}catch(e){return"Object"}},ko=Ei,Ao=Eo,Oo=TypeError,jo=function(e){if(ko(e))return e;throw new Oo(Ao(e)+" is not a function")},To=jo,Po=Ui,Co=function(e,t){var r=e[t];return Po(r)?void 0:To(r)},Io=Ti,_o=Ei,Ro=Yi,Fo=TypeError,Mo={exports:{}},Lo=si,Do=Object.defineProperty,Bo=si,qo=Mo.exports=Bo.o||function(e,t){try{Do(Lo,e,{value:t,configurable:!0,writable:!0})}catch(r){Lo[e]=t}return t}("__core-js_shared__",{});(qo.versions||(qo.versions=[])).push({version:"3.38.1",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE",source:"https://github.com/zloirock/core-js"});var No=Mo.exports,Uo=No,zo=function(e,t){return Uo[e]||(Uo[e]=t||{})},Ho=Vi,Vo=Object,Wo=function(e){return Vo(Ho(e))},Go=Wo,Jo=fi({}.hasOwnProperty),Ko=Object.hasOwn||function(e,t){return Jo(Go(e),t)},Yo=fi,Xo=0,Zo=Math.random(),Qo=Yo(1..toString),ea=function(e){return"Symbol("+(void 0===e?"":e)+")_"+Qo(++Xo+Zo,36)},ta=zo,ra=Ko,sa=ea,na=go,ia=yo,oa=si.Symbol,aa=ta("wks"),la=ia?oa.for||oa:oa&&oa.withoutSetter||sa,ca=function(e){return ra(aa,e)||(aa[e]=na&&ra(oa,e)?oa[e]:la("Symbol."+e)),aa[e]},pa=Ti,ua=Yi,da=$o,ha=Co,ma=TypeError,fa=ca("toPrimitive"),ga=function(e,t){if(!ua(e)||da(e))return e;var r,s=ha(e,fa);if(s){if(void 0===t&&(t="default"),r=pa(s,e,t),!ua(r)||da(r))return r;throw new ma("Can't convert object to primitive value")}return void 0===t&&(t="number"),function(e,t){var r,s;if("string"===t&&_o(r=e.toString)&&!Ro(s=Io(r,e)))return s;if(_o(r=e.valueOf)&&!Ro(s=Io(r,e)))return s;if("string"!==t&&_o(r=e.toString)&&!Ro(s=Io(r,e)))return s;throw new Fo("Can't convert object to primitive value")}(e,t)},ya=$o,va=function(e){var t=ga(e,"string");return ya(t)?t:t+""},ba=Yi,xa=si.document,wa=ba(xa)&&ba(xa.createElement),$a=function(e){return wa?xa.createElement(e):{}},Sa=$a,Ea=!Ai&&!ni((function(){return 7!==Object.defineProperty(Sa("div"),"a",{get:function(){return 7}}).a})),ka=Ai,Aa=Ti,Oa=Pi,ja=Mi,Ta=Ji,Pa=va,Ca=Ko,Ia=Ea,_a=Object.getOwnPropertyDescriptor;ki.f=ka?_a:function(e,t){if(e=Ta(e),t=Pa(t),Ia)try{return _a(e,t)}catch(e){}if(Ca(e,t))return ja(!Aa(Oa.f,e,t),e[t])};var Ra=ni,Fa=Ei,Ma=/#|\.prototype\./,La=function(e,t){var r=Ba[Da(e)];return r===Na||r!==qa&&(Fa(t)?Ra(t):!!t)},Da=La.normalize=function(e){return String(e).replace(Ma,".").toLowerCase()},Ba=La.data={},qa=La.NATIVE="N",Na=La.POLYFILL="P",Ua=La,za=jo,Ha=ii,Va=$i($i.bind),Wa=function(e,t){return za(e),void 0===t?e:Ha?Va(e,t):function(){return e.apply(t,arguments)}},Ga={},Ja=Ai&&ni((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype})),Ka=Yi,Ya=String,Xa=TypeError,Za=function(e){if(Ka(e))return e;throw new Xa(Ya(e)+" is not an object")},Qa=Ai,el=Ea,tl=Ja,rl=Za,sl=va,nl=TypeError,il=Object.defineProperty,ol=Object.getOwnPropertyDescriptor;Ga.f=Qa?tl?function(e,t,r){if(rl(e),t=sl(t),rl(r),"function"==typeof e&&"prototype"===t&&"value"in r&&"writable"in r&&!r.writable){var s=ol(e,t);s&&s.writable&&(e[t]=r.value,r={configurable:"configurable"in r?r.configurable:s.configurable,enumerable:"enumerable"in r?r.enumerable:s.enumerable,writable:!1})}return il(e,t,r)}:il:function(e,t,r){if(rl(e),t=sl(t),rl(r),el)try{return il(e,t,r)}catch(e){}if("get"in r||"set"in r)throw new nl("Accessors not supported");return"value"in r&&(e[t]=r.value),e};var al=Ga,ll=Mi,cl=Ai?function(e,t,r){return al.f(e,t,ll(1,r))}:function(e,t,r){return e[t]=r,e},pl=si,ul=pi,dl=$i,hl=Ei,ml=ki.f,fl=Ua,gl=Xi,yl=Wa,vl=cl,bl=Ko,xl=function(e){var t=function(r,s,n){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(r);case 2:return new e(r,s)}return new e(r,s,n)}return ul(e,this,arguments)};return t.prototype=e.prototype,t},wl=function(e,t){var r,s,n,i,o,a,l,c,p,u=e.target,d=e.global,h=e.stat,m=e.proto,f=d?pl:h?pl[u]:pl[u]&&pl[u].prototype,g=d?gl:gl[u]||vl(gl,u,{})[u],y=g.prototype;for(i in t)s=!(r=fl(d?i:u+(h?".":"#")+i,e.forced))&&f&&bl(f,i),a=g[i],s&&(l=e.dontCallGetSet?(p=ml(f,i))&&p.value:f[i]),o=s&&l?l:t[i],(r||m||typeof a!=typeof o)&&(c=e.bind&&s?yl(o,pl):e.wrap&&s?xl(o):m&&hl(o)?dl(o):o,(e.sham||o&&o.sham||a&&a.sham)&&vl(c,"sham",!0),vl(g,i,c),m&&(bl(gl,n=u+"Prototype")||vl(gl,n,{}),vl(gl[n],i,o),e.real&&y&&(r||!y[i])&&vl(y,i,o)))},$l=ea,Sl=zo("keys"),El=function(e){return Sl[e]||(Sl[e]=$l(e))},kl=!ni((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})),Al=Ko,Ol=Ei,jl=Wo,Tl=kl,Pl=El("IE_PROTO"),Cl=Object,Il=Cl.prototype,_l=Tl?Cl.getPrototypeOf:function(e){var t=jl(e);if(Al(t,Pl))return t[Pl];var r=t.constructor;return Ol(r)&&t instanceof r?r.prototype:t instanceof Cl?Il:null},Rl=fi,Fl=jo,Ml=Yi,Ll=String,Dl=TypeError,Bl=Yi,ql=Vi,Nl=function(e){if(function(e){return Ml(e)||null===e}(e))return e;throw new Dl("Can't set "+Ll(e)+" as a prototype")},Ul=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=function(e,t,r){try{return Rl(Fl(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}(Object.prototype,"__proto__","set"))(r,[]),t=r instanceof Array}catch(e){}return function(r,s){return ql(r),Nl(s),Bl(r)?(t?e(r,s):r.__proto__=s,r):r}}():void 0),zl={},Hl=Math.ceil,Vl=Math.floor,Wl=Math.trunc||function(e){var t=+e;return(t>0?Vl:Hl)(t)},Gl=function(e){var t=+e;return t!=t||0===t?0:Wl(t)},Jl=Gl,Kl=Math.max,Yl=Math.min,Xl=Gl,Zl=Math.min,Ql=function(e){return function(e){var t=Xl(e);return t>0?Zl(t,9007199254740991):0}(e.length)},ec=Ji,tc=Ql,rc=function(e){return function(t,r,s){var n=ec(t),i=tc(n);if(0===i)return!e&&-1;var o,a=function(e,t){var r=Jl(e);return r<0?Kl(r+t,0):Yl(r,t)}(s,i);if(e&&r!=r){for(;i>a;)if((o=n[a++])!=o)return!0}else for(;i>a;a++)if((e||a in n)&&n[a]===r)return e||a||0;return!e&&-1}},sc={includes:rc(!0),indexOf:rc(!1)},nc={},ic=Ko,oc=Ji,ac=sc.indexOf,lc=nc,cc=fi([].push),pc=function(e,t){var r,s=oc(e),n=0,i=[];for(r in s)!ic(lc,r)&&ic(s,r)&&cc(i,r);for(;t.length>n;)ic(s,r=t[n++])&&(~ac(i,r)||cc(i,r));return i},uc=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],dc=pc,hc=uc.concat("length","prototype");zl.f=Object.getOwnPropertyNames||function(e){return dc(e,hc)};var mc={};mc.f=Object.getOwnPropertySymbols;var fc=ro,gc=zl,yc=mc,vc=Za,bc=fi([].concat),xc=fc("Reflect","ownKeys")||function(e){var t=gc.f(vc(e)),r=yc.f;return r?bc(t,r(e)):t},wc=Ko,$c=xc,Sc=ki,Ec=Ga,kc=function(e,t,r){for(var s=$c(t),n=Ec.f,i=Sc.f,o=0;oo;)Ic.f(e,r=n[o++],s[r]);return e};var Mc,Lc=ro("document","documentElement"),Dc=Za,Bc=Ac,qc=uc,Nc=nc,Uc=Lc,zc=$a,Hc=El("IE_PROTO"),Vc=function(){},Wc=function(e){return" + + + + + {{ title }} + + + diff --git a/engine/core/views.py b/engine/core/views.py index 07d9404b..7f1b6cde 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -30,13 +30,10 @@ from django.utils.translation import gettext_lazy as _ from django.views.decorators.cache import cache_page from django.views.decorators.csrf import csrf_exempt from django.views.decorators.vary import vary_on_headers +from django.views.generic import TemplateView from django_ratelimit.decorators import ratelimit from drf_spectacular.utils import extend_schema_view -from drf_spectacular.views import ( - SpectacularAPIView, - SpectacularRedocView, - SpectacularSwaggerView, -) +from drf_spectacular.views import SpectacularAPIView from graphene_file_upload.django import FileUploadGraphQLView from rest_framework import status from rest_framework.permissions import AllowAny @@ -133,19 +130,13 @@ class CustomSpectacularAPIView(SpectacularAPIView): return super().get(request, *args, **kwargs) -class CustomSwaggerView(SpectacularSwaggerView): - def get_context_data(self, **kwargs): - # noinspection PyUnresolvedReferences - context = super().get_context_data(**kwargs) # ty: ignore[unresolved-attribute] - context["script_url"] = self.request.build_absolute_uri() - return context +class RapiDocView(TemplateView): + template_name = "rapidoc.html" - -class CustomRedocView(SpectacularRedocView): def get_context_data(self, **kwargs): - # noinspection PyUnresolvedReferences - context = super().get_context_data(**kwargs) # ty: ignore[unresolved-attribute] - context["script_url"] = self.request.build_absolute_uri() + context = super().get_context_data(**kwargs) + context["title"] = settings.SPECTACULAR_SETTINGS.get("TITLE", "API") + context["schema_url"] = self.request.build_absolute_uri("/docs/schema/") return context diff --git a/engine/vibes_auth/docs/drf/emailing.py b/engine/vibes_auth/docs/drf/emailing.py new file mode 100644 index 00000000..20139d2f --- /dev/null +++ b/engine/vibes_auth/docs/drf/emailing.py @@ -0,0 +1,253 @@ +from django.utils.translation import gettext_lazy as _ +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import ( + OpenApiExample, + OpenApiParameter, + OpenApiResponse, + extend_schema, + inline_serializer, +) +from rest_framework import serializers, status + +from engine.core.docs.drf import error + +_unsubscribe_token_param = OpenApiParameter( + name="token", + location=OpenApiParameter.QUERY, + description=_( + "UUID token for unsubscribing. This token is unique per user and is included " + "in the unsubscribe link of every campaign email. The token remains constant " + "for each user unless regenerated." + ), + required=True, + type=str, + examples=[ + OpenApiExample( + name="Valid token", + value="550e8400-e29b-41d4-a716-446655440000", + description="A valid UUID v4 unsubscribe token", + ), + ], +) + +_unsubscribe_success_response = inline_serializer( + name="UnsubscribeSuccessResponse", + fields={ + "detail": serializers.CharField( + default=_("You have been successfully unsubscribed from our emails.") + ), + }, +) + +_unsubscribe_already_response = inline_serializer( + name="UnsubscribeAlreadyResponse", + fields={ + "detail": serializers.CharField(default=_("You are already unsubscribed.")), + }, +) + +UNSUBSCRIBE_GET_SCHEMA = extend_schema( + tags=["emailing"], + operation_id="emailing_unsubscribe_get", + summary=_("Unsubscribe from email campaigns"), + description=_( + "Unsubscribe a user from all marketing email campaigns using their unique " + "unsubscribe token.\n\n" + "This endpoint is designed for email client compatibility where clicking a link " + "triggers a GET request. The user will no longer receive promotional emails " + "after successful unsubscription.\n\n" + "**Note:** Transactional emails (order confirmations, password resets, etc.) " + "are not affected by this setting." + ), + parameters=[_unsubscribe_token_param], + responses={ + status.HTTP_200_OK: OpenApiResponse( + response=_unsubscribe_success_response, + description=_("Successfully unsubscribed from email campaigns."), + examples=[ + OpenApiExample( + name="Unsubscribed", + value={ + "detail": "You have been successfully unsubscribed from our emails." + }, + ), + OpenApiExample( + name="Already unsubscribed", + value={"detail": "You are already unsubscribed."}, + ), + ], + ), + status.HTTP_400_BAD_REQUEST: OpenApiResponse( + response=error, + description=_("Invalid or missing unsubscribe token."), + examples=[ + OpenApiExample( + name="Missing token", + value={"detail": "Unsubscribe token is required."}, + ), + OpenApiExample( + name="Invalid format", + value={"detail": "Invalid unsubscribe token format."}, + ), + ], + ), + status.HTTP_404_NOT_FOUND: OpenApiResponse( + response=error, + description=_("User associated with the token was not found."), + examples=[ + OpenApiExample( + name="User not found", + value={"detail": "User not found."}, + ), + ], + ), + }, + examples=[ + OpenApiExample( + name="Unsubscribe request", + description="Example unsubscribe request with token", + value=None, + request_only=True, + ), + ], +) + +UNSUBSCRIBE_POST_SCHEMA = extend_schema( + tags=["emailing"], + operation_id="emailing_unsubscribe_post", + summary=_("One-Click Unsubscribe (RFC 8058)"), + description=_( + "RFC 8058 compliant one-click unsubscribe endpoint for email campaigns.\n\n" + "This endpoint supports the List-Unsubscribe-Post header mechanism defined in " + "RFC 8058, which allows email clients to unsubscribe users with a single click " + "without leaving the email application.\n\n" + "The token can be provided either as a query parameter or in the request body.\n\n" + "**Standards Compliance:**\n" + "- RFC 8058: Signaling One-Click Functionality for List Email Headers\n" + "- RFC 2369: The Use of URLs as Meta-Syntax for Core Mail List Commands\n\n" + "**Note:** Transactional emails are not affected by this setting." + ), + parameters=[_unsubscribe_token_param], + request=inline_serializer( + name="UnsubscribeRequest", + fields={ + "token": serializers.UUIDField( + required=False, + help_text=_( + "Unsubscribe token (alternative to query parameter). " + "Can be omitted if token is provided in URL." + ), + ), + }, + ), + responses={ + status.HTTP_200_OK: OpenApiResponse( + response=_unsubscribe_success_response, + description=_("Successfully unsubscribed from email campaigns."), + examples=[ + OpenApiExample( + name="Unsubscribed", + value={ + "detail": "You have been successfully unsubscribed from our emails." + }, + ), + OpenApiExample( + name="Already unsubscribed", + value={"detail": "You are already unsubscribed."}, + ), + ], + ), + status.HTTP_400_BAD_REQUEST: OpenApiResponse( + response=error, + description=_("Invalid or missing unsubscribe token."), + examples=[ + OpenApiExample( + name="Missing token", + value={"detail": "Unsubscribe token is required."}, + ), + OpenApiExample( + name="Invalid format", + value={"detail": "Invalid unsubscribe token format."}, + ), + ], + ), + status.HTTP_404_NOT_FOUND: OpenApiResponse( + response=error, + description=_("User associated with the token was not found."), + examples=[ + OpenApiExample( + name="User not found", + value={"detail": "User not found."}, + ), + ], + ), + }, + external_docs={ + "description": "RFC 8058 - Signaling One-Click Functionality", + "url": "https://datatracker.ietf.org/doc/html/rfc8058", + }, +) + +UNSUBSCRIBE_SCHEMA = { + "get": UNSUBSCRIBE_GET_SCHEMA, + "post": UNSUBSCRIBE_POST_SCHEMA, +} + +TRACKING_SCHEMA = { + "get": extend_schema( + tags=["emailing"], + operation_id="emailing_tracking_pixel", + summary=_("Track email open event"), + description=_( + "Records when a campaign email is opened by the recipient.\n\n" + "This endpoint is called automatically when the tracking pixel (1x1 transparent GIF) " + "embedded in the email is loaded by the recipient's email client.\n\n" + "**How it works:**\n" + "1. Each campaign email contains a unique tracking pixel URL with a `tid` parameter\n" + "2. When the email is opened and images are loaded, this endpoint is called\n" + "3. The recipient's status is updated to 'opened' and the timestamp is recorded\n" + "4. The campaign's aggregate opened count is updated\n\n" + "**Privacy considerations:**\n" + "- Only the first open is recorded (subsequent opens are ignored)\n" + "- No personal information beyond the tracking ID is logged\n" + "- Users who disable image loading will not trigger this event\n\n" + "**Response:**\n" + "Returns a 1x1 transparent GIF image regardless of whether tracking succeeded, " + "to ensure consistent behavior and prevent information leakage." + ), + parameters=[ + OpenApiParameter( + name="tid", + location=OpenApiParameter.QUERY, + description=_( + "Tracking ID (UUID) unique to each campaign-recipient combination. " + "This ID links the open event to a specific recipient and campaign." + ), + required=True, + type=str, + examples=[ + OpenApiExample( + name="Valid tracking ID", + value="123e4567-e89b-12d3-a456-426614174000", + description="A valid UUID v4 tracking identifier", + ), + ], + ), + ], + responses={ + status.HTTP_200_OK: OpenApiResponse( + response=OpenApiTypes.BINARY, + description=_( + "1x1 transparent GIF image. Always returned regardless of tracking status " + "to maintain consistent behavior." + ), + ), + status.HTTP_404_NOT_FOUND: OpenApiResponse( + description=_( + "Returned when no tracking ID is provided. Note: Invalid tracking IDs " + "still return 200 with the GIF to prevent enumeration attacks." + ), + ), + }, + ), +} diff --git a/engine/vibes_auth/docs/drf/views.py b/engine/vibes_auth/docs/drf/views.py index a1c0f689..d810ad81 100644 --- a/engine/vibes_auth/docs/drf/views.py +++ b/engine/vibes_auth/docs/drf/views.py @@ -13,7 +13,7 @@ from engine.vibes_auth.serializers import ( TOKEN_OBTAIN_SCHEMA = { "post": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("obtain a token pair"), description=_("obtain a token pair (refresh and access) for authentication."), @@ -36,7 +36,7 @@ TOKEN_OBTAIN_SCHEMA = { TOKEN_REFRESH_SCHEMA = { "post": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("refresh a token pair"), description=_("refresh a token pair (refresh and access)."), @@ -59,7 +59,7 @@ TOKEN_REFRESH_SCHEMA = { TOKEN_VERIFY_SCHEMA = { "post": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("verify a token"), description=_("Verify a token (refresh or access)."), diff --git a/engine/vibes_auth/docs/drf/viewsets.py b/engine/vibes_auth/docs/drf/viewsets.py index 2362fafa..04480f61 100644 --- a/engine/vibes_auth/docs/drf/viewsets.py +++ b/engine/vibes_auth/docs/drf/viewsets.py @@ -14,7 +14,7 @@ from engine.vibes_auth.serializers import ( USER_SCHEMA = { "create": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("create a new user"), request=UserSerializer, @@ -22,14 +22,14 @@ USER_SCHEMA = { ), "retrieve": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("retrieve a user's details"), responses={status.HTTP_200_OK: UserSerializer, **BASE_ERRORS}, ), "update": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("update a user's details"), request=UserSerializer, @@ -37,7 +37,7 @@ USER_SCHEMA = { ), "partial_update": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("partially update a user's details"), request=UserSerializer, @@ -45,14 +45,14 @@ USER_SCHEMA = { ), "destroy": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("delete a user"), responses={status.HTTP_204_NO_CONTENT: {}, **BASE_ERRORS}, ), "reset_password": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("reset a user's password by sending a reset password email"), request=ResetPasswordSerializer, @@ -60,7 +60,7 @@ USER_SCHEMA = { ), "upload_avatar": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("handle avatar upload for a user"), request={ @@ -78,7 +78,7 @@ USER_SCHEMA = { ), "confirm_password_reset": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("confirm a user's password reset"), request=ConfirmPasswordResetSerializer, @@ -90,7 +90,7 @@ USER_SCHEMA = { ), "activate": extend_schema( tags=[ - "vibesAuth", + "Auth", ], summary=_("activate a user's account"), request=ActivateEmailSerializer, diff --git a/engine/vibes_auth/emailing/views.py b/engine/vibes_auth/emailing/views.py index ba83c082..f3055e98 100644 --- a/engine/vibes_auth/emailing/views.py +++ b/engine/vibes_auth/emailing/views.py @@ -1,15 +1,17 @@ from uuid import UUID from django.utils.translation import gettext_lazy as _ -from drf_spectacular.utils import OpenApiParameter, extend_schema +from drf_spectacular.utils import extend_schema_view from rest_framework import status from rest_framework.permissions import AllowAny from rest_framework.response import Response from rest_framework.views import APIView +from engine.vibes_auth.docs.drf.emailing import TRACKING_SCHEMA, UNSUBSCRIBE_SCHEMA from engine.vibes_auth.models import User +@extend_schema_view(**UNSUBSCRIBE_SCHEMA) class UnsubscribeView(APIView): """ Public endpoint for one-click unsubscribe from email campaigns. @@ -20,44 +22,10 @@ class UnsubscribeView(APIView): permission_classes = [AllowAny] authentication_classes = [] - @extend_schema( - summary="Unsubscribe from email campaigns", - description="Unsubscribe a user from email campaigns using their unsubscribe token.", - parameters=[ - OpenApiParameter( - name="token", - description="Unsubscribe token from the email", - required=True, - type=str, - ), - ], - responses={ - 200: {"description": "Successfully unsubscribed"}, - 400: {"description": "Invalid or missing token"}, - 404: {"description": "User not found"}, - }, - ) def get(self, request): """Handle GET request for unsubscribe (email link click).""" return self._process_unsubscribe(request) - @extend_schema( - summary="Unsubscribe from email campaigns (One-Click)", - description="RFC 8058 compliant one-click unsubscribe endpoint.", - parameters=[ - OpenApiParameter( - name="token", - description="Unsubscribe token from the email", - required=True, - type=str, - ), - ], - responses={ - 200: {"description": "Successfully unsubscribed"}, - 400: {"description": "Invalid or missing token"}, - 404: {"description": "User not found"}, - }, - ) def post(self, request): """Handle POST request for one-click unsubscribe (RFC 8058).""" return self._process_unsubscribe(request) @@ -103,6 +71,7 @@ class UnsubscribeView(APIView): ) +@extend_schema_view(**TRACKING_SCHEMA) class TrackingView(APIView): """ Endpoint for tracking email opens and clicks. @@ -113,22 +82,6 @@ class TrackingView(APIView): permission_classes = [AllowAny] authentication_classes = [] - @extend_schema( - summary="Track email open", - description="Track when a campaign email is opened.", - parameters=[ - OpenApiParameter( - name="tid", - description="Tracking ID from the email", - required=True, - type=str, - ), - ], - responses={ - 200: {"description": "Tracking recorded"}, - 404: {"description": "Invalid tracking ID"}, - }, - ) def get(self, request): """Track email open via tracking pixel.""" from django.utils import timezone diff --git a/pyproject.toml b/pyproject.toml index 430d5aa8..0a19e31d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,10 +11,10 @@ dependencies = [ "channels==4.3.2", "channels-redis==4.3.0", "colorlog==6.10.1", - "coverage==7.13.2", + "coverage==7.13.3", "click==8.3.1", - "cryptography==46.0.3", - "django==5.2.9", + "cryptography==46.0.4", + "django==5.2.11", "django-cacheops==7.2", "django-constance==4.3.4", "django-cors-headers==4.9.0", @@ -22,7 +22,7 @@ dependencies = [ "django-elasticsearch-dsl==8.2", "django-extensions==4.1", "django-filter==25.2", - "django-health-check==3.20.8", + "django-health-check==3.23.3", "django-import-export[all]==4.4.0", "django-json-widget==2.1.1", "django-model-utils==5.0.0", @@ -33,16 +33,16 @@ dependencies = [ "django-redis==6.0.0", "django-ratelimit==4.1.0", "django-storages==1.14.6", - "django-unfold==0.76.0", + "django-unfold==0.78.1", "django-widget-tweaks==1.5.1", "djangorestframework==3.16.1", "djangorestframework-recursive==0.1.2", "djangorestframework-simplejwt[crypto]==5.5.1", "djangorestframework-xml==2.0.0", "djangorestframework-yaml==2.0.0", - "djangoql==0.18.1", + "djangoql==0.19.1", "docutils==0.22.4", - "drf-spectacular[sidecar]==0.29.0", + "drf-spectacular==0.29.0", "drf-spectacular-websocket==1.3.1", "drf-orjson-renderer==1.8.0", "elasticsearch-dsl==8.18.0", @@ -53,17 +53,17 @@ dependencies = [ "httpx==0.28.1", "paramiko==4.0.0", "pillow==12.1.0", - "pip==25.3", + "pip==26.0.1", "polib==1.2.0", - "PyJWT==2.10.1", + "PyJWT==2.11.0", "pytest==9.0.2", "pytest-django==4.11.1", "python-slugify==8.0.4", - "psutil==7.2.1", - "psycopg[binary]==3.2.9", + "psutil==7.2.2", + "psycopg[binary]==3.3.2", "redis==7.1.0", "requests==2.32.5", - "sentry-sdk[django,celery,opentelemetry]==2.50.0", + "sentry-sdk[django,celery,opentelemetry]==2.52.0", "six==1.17.0", "swapper==1.4.0", "uvicorn==0.40.0", @@ -79,20 +79,20 @@ worker = [ "django-celery-results==2.6.0", ] linting = [ - "ty==0.0.13", - "ruff==0.14.14", + "ty==0.0.15", + "ruff==0.15.0", "celery-types==0.24.0", "django-stubs==5.2.9", - "djangorestframework-stubs==3.16.7", + "djangorestframework-stubs==3.16.8", "types-requests==2.32.4.20260107", "types-redis==4.6.0.20241004", "types-paramiko==4.0.0.20250822", - "types-psutil==7.2.1.20260116", + "types-psutil==7.2.2.20260130", "types-pillow==10.2.0.20240822", "types-docutils==0.22.3.20251115", "types-six==1.17.0.20251009", ] -openai = ["openai==2.15.0"] +openai = ["openai==2.16.0"] jupyter = ["jupyter==1.1.1"] [tool.uv] diff --git a/schon/settings/drf.py b/schon/settings/drf.py index 84727a4f..dd0d96e7 100644 --- a/schon/settings/drf.py +++ b/schon/settings/drf.py @@ -117,21 +117,13 @@ SPECTACULAR_SETTINGS = { "TITLE": f"{PROJECT_NAME} API", "DESCRIPTION": SPECTACULAR_DESCRIPTION, "VERSION": SCHON_VERSION, # noqa: F405 - "TOS": "https://schon.wiseless.xyz/terms-of-service", - "SWAGGER_UI_DIST": "SIDECAR", + "TOS": "https://schon.fureunoir.com/terms-of-service", "CAMELIZE_NAMES": True, "POSTPROCESSING_HOOKS": [ "schon.utils.renderers.camelize_serializer_fields", "drf_spectacular.hooks.postprocess_schema_enums", ], - "REDOC_DIST": "SIDECAR", "ENABLE_DJANGO_DEPLOY_CHECK": not DEBUG, # noqa: F405 - "SWAGGER_UI_FAVICON_HREF": r"/static/favicon.png", - "SWAGGER_UI_SETTINGS": { - "connectSocket": False, - "socketMaxMessages": 8, - "socketMessagesInitialOpened": False, - }, "SERVERS": [ { "url": f"https://api.{BASE_DOMAIN}/", diff --git a/schon/settings/unfold.py b/schon/settings/unfold.py index 3e6387a9..b7e20926 100644 --- a/schon/settings/unfold.py +++ b/schon/settings/unfold.py @@ -116,14 +116,9 @@ UNFOLD: dict[str, Any] = { "link": reverse_lazy("core:sitemap-index"), }, { - "title": "Swagger", - "icon": "integration_instructions", - "link": reverse_lazy("swagger-ui-platform"), - }, - { - "title": "Redoc", - "icon": "integration_instructions", - "link": reverse_lazy("redoc-ui-platform"), + "title": "API Docs", + "icon": "api", + "link": reverse_lazy("rapidoc-platform"), }, { "title": "GraphQL", diff --git a/schon/urls.py b/schon/urls.py index c6ef2a26..380d3613 100644 --- a/schon/urls.py +++ b/schon/urls.py @@ -7,9 +7,8 @@ from django.views.decorators.csrf import csrf_exempt from engine.core.graphene.schema import schema from engine.core.views import ( CustomGraphQLView, - CustomRedocView, CustomSpectacularAPIView, - CustomSwaggerView, + RapiDocView, favicon_view, index, ) @@ -55,19 +54,14 @@ urlpatterns = [ ### DOCUMENTATION URLS ### path( r"docs/", + RapiDocView.as_view(), + name="rapidoc-platform", + ), + path( + r"docs/schema/", CustomSpectacularAPIView.as_view(urlconf="schon.urls"), name="schema-platform", ), - path( - r"docs/swagger/", - CustomSwaggerView.as_view(url_name="schema-platform"), - name="swagger-ui-platform", - ), - path( - r"docs/redoc/", - CustomRedocView.as_view(url_name="schema-platform"), - name="redoc-ui-platform", - ), ### ENGINE APPS URLS ### path( r"b2b/", diff --git a/uv.lock b/uv.lock index d1f02e1d..448d00d8 100644 --- a/uv.lock +++ b/uv.lock @@ -210,11 +210,11 @@ wheels = [ [[package]] name = "asgiref" -version = "3.11.0" +version = "3.11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/b9/4db2509eabd14b4a8c71d1b24c8d5734c52b8560a7b1e1a8b56c8d25568b/asgiref-3.11.0.tar.gz", hash = "sha256:13acff32519542a1736223fb79a715acdebe24286d98e8b164a73085f40da2c4", size = 37969, upload-time = "2025-11-19T15:32:20.106Z" } +sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/91/be/317c2c55b8bbec407257d45f5c8d1b6867abc76d12043f2d3d58c538a4ea/asgiref-3.11.0-py3-none-any.whl", hash = "sha256:1db9021efadb0d9512ce8ffaf72fcef601c7b73a8807a1bb2ef143dc6b14846d", size = 24096, upload-time = "2025-11-19T15:32:19.004Z" }, + { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" }, ] [[package]] @@ -255,11 +255,11 @@ wheels = [ [[package]] name = "babel" -version = "2.17.0" +version = "2.18.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] [[package]] @@ -580,50 +580,50 @@ wheels = [ [[package]] name = "coverage" -version = "7.13.2" +version = "7.13.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ad/49/349848445b0e53660e258acbcc9b0d014895b6739237920886672240f84b/coverage-7.13.2.tar.gz", hash = "sha256:044c6951ec37146b72a50cc81ef02217d27d4c3640efd2640311393cbbf143d3", size = 826523, upload-time = "2026-01-25T13:00:04.889Z" } +sdist = { url = "https://files.pythonhosted.org/packages/11/43/3e4ac666cc35f231fa70c94e9f38459299de1a152813f9d2f60fc5f3ecaf/coverage-7.13.3.tar.gz", hash = "sha256:f7f6182d3dfb8802c1747eacbfe611b669455b69b7c037484bb1efbbb56711ac", size = 826832, upload-time = "2026-02-03T14:02:30.944Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/39/e92a35f7800222d3f7b2cbb7bbc3b65672ae8d501cb31801b2d2bd7acdf1/coverage-7.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f106b2af193f965d0d3234f3f83fc35278c7fb935dfbde56ae2da3dd2c03b84d", size = 219142, upload-time = "2026-01-25T12:58:00.448Z" }, - { url = "https://files.pythonhosted.org/packages/45/7a/8bf9e9309c4c996e65c52a7c5a112707ecdd9fbaf49e10b5a705a402bbb4/coverage-7.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:78f45d21dc4d5d6bd29323f0320089ef7eae16e4bef712dff79d184fa7330af3", size = 219503, upload-time = "2026-01-25T12:58:02.451Z" }, - { url = "https://files.pythonhosted.org/packages/87/93/17661e06b7b37580923f3f12406ac91d78aeed293fb6da0b69cc7957582f/coverage-7.13.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:fae91dfecd816444c74531a9c3d6ded17a504767e97aa674d44f638107265b99", size = 251006, upload-time = "2026-01-25T12:58:04.059Z" }, - { url = "https://files.pythonhosted.org/packages/12/f0/f9e59fb8c310171497f379e25db060abef9fa605e09d63157eebec102676/coverage-7.13.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:264657171406c114787b441484de620e03d8f7202f113d62fcd3d9688baa3e6f", size = 253750, upload-time = "2026-01-25T12:58:05.574Z" }, - { url = "https://files.pythonhosted.org/packages/e5/b1/1935e31add2232663cf7edd8269548b122a7d100047ff93475dbaaae673e/coverage-7.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae47d8dcd3ded0155afbb59c62bd8ab07ea0fd4902e1c40567439e6db9dcaf2f", size = 254862, upload-time = "2026-01-25T12:58:07.647Z" }, - { url = "https://files.pythonhosted.org/packages/af/59/b5e97071ec13df5f45da2b3391b6cdbec78ba20757bc92580a5b3d5fa53c/coverage-7.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8a0b33e9fd838220b007ce8f299114d406c1e8edb21336af4c97a26ecfd185aa", size = 251420, upload-time = "2026-01-25T12:58:09.309Z" }, - { url = "https://files.pythonhosted.org/packages/3f/75/9495932f87469d013dc515fb0ce1aac5fa97766f38f6b1a1deb1ee7b7f3a/coverage-7.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b3becbea7f3ce9a2d4d430f223ec15888e4deb31395840a79e916368d6004cce", size = 252786, upload-time = "2026-01-25T12:58:10.909Z" }, - { url = "https://files.pythonhosted.org/packages/6a/59/af550721f0eb62f46f7b8cb7e6f1860592189267b1c411a4e3a057caacee/coverage-7.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f819c727a6e6eeb8711e4ce63d78c620f69630a2e9d53bc95ca5379f57b6ba94", size = 250928, upload-time = "2026-01-25T12:58:12.449Z" }, - { url = "https://files.pythonhosted.org/packages/9b/b1/21b4445709aae500be4ab43bbcfb4e53dc0811c3396dcb11bf9f23fd0226/coverage-7.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:4f7b71757a3ab19f7ba286e04c181004c1d61be921795ee8ba6970fd0ec91da5", size = 250496, upload-time = "2026-01-25T12:58:14.047Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b1/0f5d89dfe0392990e4f3980adbde3eb34885bc1effb2dc369e0bf385e389/coverage-7.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b7fc50d2afd2e6b4f6f2f403b70103d280a8e0cb35320cbbe6debcda02a1030b", size = 252373, upload-time = "2026-01-25T12:58:15.976Z" }, - { url = "https://files.pythonhosted.org/packages/01/c9/0cf1a6a57a9968cc049a6b896693faa523c638a5314b1fc374eb2b2ac904/coverage-7.13.2-cp312-cp312-win32.whl", hash = "sha256:292250282cf9bcf206b543d7608bda17ca6fc151f4cbae949fc7e115112fbd41", size = 221696, upload-time = "2026-01-25T12:58:17.517Z" }, - { url = "https://files.pythonhosted.org/packages/4d/05/d7540bf983f09d32803911afed135524570f8c47bb394bf6206c1dc3a786/coverage-7.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:eeea10169fac01549a7921d27a3e517194ae254b542102267bef7a93ed38c40e", size = 222504, upload-time = "2026-01-25T12:58:19.115Z" }, - { url = "https://files.pythonhosted.org/packages/15/8b/1a9f037a736ced0a12aacf6330cdaad5008081142a7070bc58b0f7930cbc/coverage-7.13.2-cp312-cp312-win_arm64.whl", hash = "sha256:2a5b567f0b635b592c917f96b9a9cb3dbd4c320d03f4bf94e9084e494f2e8894", size = 221120, upload-time = "2026-01-25T12:58:21.334Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f0/3d3eac7568ab6096ff23791a526b0048a1ff3f49d0e236b2af6fb6558e88/coverage-7.13.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ed75de7d1217cf3b99365d110975f83af0528c849ef5180a12fd91b5064df9d6", size = 219168, upload-time = "2026-01-25T12:58:23.376Z" }, - { url = "https://files.pythonhosted.org/packages/a3/a6/f8b5cfeddbab95fdef4dcd682d82e5dcff7a112ced57a959f89537ee9995/coverage-7.13.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:97e596de8fa9bada4d88fde64a3f4d37f1b6131e4faa32bad7808abc79887ddc", size = 219537, upload-time = "2026-01-25T12:58:24.932Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e6/8d8e6e0c516c838229d1e41cadcec91745f4b1031d4db17ce0043a0423b4/coverage-7.13.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:68c86173562ed4413345410c9480a8d64864ac5e54a5cda236748031e094229f", size = 250528, upload-time = "2026-01-25T12:58:26.567Z" }, - { url = "https://files.pythonhosted.org/packages/8e/78/befa6640f74092b86961f957f26504c8fba3d7da57cc2ab7407391870495/coverage-7.13.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7be4d613638d678b2b3773b8f687537b284d7074695a43fe2fbbfc0e31ceaed1", size = 253132, upload-time = "2026-01-25T12:58:28.251Z" }, - { url = "https://files.pythonhosted.org/packages/9d/10/1630db1edd8ce675124a2ee0f7becc603d2bb7b345c2387b4b95c6907094/coverage-7.13.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7f63ce526a96acd0e16c4af8b50b64334239550402fb1607ce6a584a6d62ce9", size = 254374, upload-time = "2026-01-25T12:58:30.294Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1d/0d9381647b1e8e6d310ac4140be9c428a0277330991e0c35bdd751e338a4/coverage-7.13.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:406821f37f864f968e29ac14c3fccae0fec9fdeba48327f0341decf4daf92d7c", size = 250762, upload-time = "2026-01-25T12:58:32.036Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5636dfc9a7c871ee8776af83ee33b4c26bc508ad6cee1e89b6419a366582/coverage-7.13.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ee68e5a4e3e5443623406b905db447dceddffee0dceb39f4e0cd9ec2a35004b5", size = 252502, upload-time = "2026-01-25T12:58:33.961Z" }, - { url = "https://files.pythonhosted.org/packages/02/2a/7ff2884d79d420cbb2d12fed6fff727b6d0ef27253140d3cdbbd03187ee0/coverage-7.13.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2ee0e58cca0c17dd9c6c1cdde02bb705c7b3fbfa5f3b0b5afeda20d4ebff8ef4", size = 250463, upload-time = "2026-01-25T12:58:35.529Z" }, - { url = "https://files.pythonhosted.org/packages/91/c0/ba51087db645b6c7261570400fc62c89a16278763f36ba618dc8657a187b/coverage-7.13.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:6e5bbb5018bf76a56aabdb64246b5288d5ae1b7d0dd4d0534fe86df2c2992d1c", size = 250288, upload-time = "2026-01-25T12:58:37.226Z" }, - { url = "https://files.pythonhosted.org/packages/03/07/44e6f428551c4d9faf63ebcefe49b30e5c89d1be96f6a3abd86a52da9d15/coverage-7.13.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a55516c68ef3e08e134e818d5e308ffa6b1337cc8b092b69b24287bf07d38e31", size = 252063, upload-time = "2026-01-25T12:58:38.821Z" }, - { url = "https://files.pythonhosted.org/packages/c2/67/35b730ad7e1859dd57e834d1bc06080d22d2f87457d53f692fce3f24a5a9/coverage-7.13.2-cp313-cp313-win32.whl", hash = "sha256:5b20211c47a8abf4abc3319d8ce2464864fa9f30c5fcaf958a3eed92f4f1fef8", size = 221716, upload-time = "2026-01-25T12:58:40.484Z" }, - { url = "https://files.pythonhosted.org/packages/0d/82/e5fcf5a97c72f45fc14829237a6550bf49d0ab882ac90e04b12a69db76b4/coverage-7.13.2-cp313-cp313-win_amd64.whl", hash = "sha256:14f500232e521201cf031549fb1ebdfc0a40f401cf519157f76c397e586c3beb", size = 222522, upload-time = "2026-01-25T12:58:43.247Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f1/25d7b2f946d239dd2d6644ca2cc060d24f97551e2af13b6c24c722ae5f97/coverage-7.13.2-cp313-cp313-win_arm64.whl", hash = "sha256:9779310cb5a9778a60c899f075a8514c89fa6d10131445c2207fc893e0b14557", size = 221145, upload-time = "2026-01-25T12:58:45Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f7/080376c029c8f76fadfe43911d0daffa0cbdc9f9418a0eead70c56fb7f4b/coverage-7.13.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e64fa5a1e41ce5df6b547cbc3d3699381c9e2c2c369c67837e716ed0f549d48e", size = 219861, upload-time = "2026-01-25T12:58:46.586Z" }, - { url = "https://files.pythonhosted.org/packages/42/11/0b5e315af5ab35f4c4a70e64d3314e4eec25eefc6dec13be3a7d5ffe8ac5/coverage-7.13.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b01899e82a04085b6561eb233fd688474f57455e8ad35cd82286463ba06332b7", size = 220207, upload-time = "2026-01-25T12:58:48.277Z" }, - { url = "https://files.pythonhosted.org/packages/b2/0c/0874d0318fb1062117acbef06a09cf8b63f3060c22265adaad24b36306b7/coverage-7.13.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:838943bea48be0e2768b0cf7819544cdedc1bbb2f28427eabb6eb8c9eb2285d3", size = 261504, upload-time = "2026-01-25T12:58:49.904Z" }, - { url = "https://files.pythonhosted.org/packages/83/5e/1cd72c22ecb30751e43a72f40ba50fcef1b7e93e3ea823bd9feda8e51f9a/coverage-7.13.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:93d1d25ec2b27e90bcfef7012992d1f5121b51161b8bffcda756a816cf13c2c3", size = 263582, upload-time = "2026-01-25T12:58:51.582Z" }, - { url = "https://files.pythonhosted.org/packages/9b/da/8acf356707c7a42df4d0657020308e23e5a07397e81492640c186268497c/coverage-7.13.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93b57142f9621b0d12349c43fc7741fe578e4bc914c1e5a54142856cfc0bf421", size = 266008, upload-time = "2026-01-25T12:58:53.234Z" }, - { url = "https://files.pythonhosted.org/packages/41/41/ea1730af99960309423c6ea8d6a4f1fa5564b2d97bd1d29dda4b42611f04/coverage-7.13.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f06799ae1bdfff7ccb8665d75f8291c69110ba9585253de254688aa8a1ccc6c5", size = 260762, upload-time = "2026-01-25T12:58:55.372Z" }, - { url = "https://files.pythonhosted.org/packages/22/fa/02884d2080ba71db64fdc127b311db60e01fe6ba797d9c8363725e39f4d5/coverage-7.13.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7f9405ab4f81d490811b1d91c7a20361135a2df4c170e7f0b747a794da5b7f23", size = 263571, upload-time = "2026-01-25T12:58:57.52Z" }, - { url = "https://files.pythonhosted.org/packages/d2/6b/4083aaaeba9b3112f55ac57c2ce7001dc4d8fa3fcc228a39f09cc84ede27/coverage-7.13.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f9ab1d5b86f8fbc97a5b3cd6280a3fd85fef3b028689d8a2c00918f0d82c728c", size = 261200, upload-time = "2026-01-25T12:58:59.255Z" }, - { url = "https://files.pythonhosted.org/packages/e9/d2/aea92fa36d61955e8c416ede9cf9bf142aa196f3aea214bb67f85235a050/coverage-7.13.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:f674f59712d67e841525b99e5e2b595250e39b529c3bda14764e4f625a3fa01f", size = 260095, upload-time = "2026-01-25T12:59:01.066Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ae/04ffe96a80f107ea21b22b2367175c621da920063260a1c22f9452fd7866/coverage-7.13.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c6cadac7b8ace1ba9144feb1ae3cb787a6065ba6d23ffc59a934b16406c26573", size = 262284, upload-time = "2026-01-25T12:59:02.802Z" }, - { url = "https://files.pythonhosted.org/packages/1c/7a/6f354dcd7dfc41297791d6fb4e0d618acb55810bde2c1fd14b3939e05c2b/coverage-7.13.2-cp313-cp313t-win32.whl", hash = "sha256:14ae4146465f8e6e6253eba0cccd57423e598a4cb925958b240c805300918343", size = 222389, upload-time = "2026-01-25T12:59:04.563Z" }, - { url = "https://files.pythonhosted.org/packages/8d/d5/080ad292a4a3d3daf411574be0a1f56d6dee2c4fdf6b005342be9fac807f/coverage-7.13.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9074896edd705a05769e3de0eac0a8388484b503b68863dd06d5e473f874fd47", size = 223450, upload-time = "2026-01-25T12:59:06.677Z" }, - { url = "https://files.pythonhosted.org/packages/88/96/df576fbacc522e9fb8d1c4b7a7fc62eb734be56e2cba1d88d2eabe08ea3f/coverage-7.13.2-cp313-cp313t-win_arm64.whl", hash = "sha256:69e526e14f3f854eda573d3cf40cffd29a1a91c684743d904c33dbdcd0e0f3e7", size = 221707, upload-time = "2026-01-25T12:59:08.363Z" }, - { url = "https://files.pythonhosted.org/packages/d2/db/d291e30fdf7ea617a335531e72294e0c723356d7fdde8fba00610a76bda9/coverage-7.13.2-py3-none-any.whl", hash = "sha256:40ce1ea1e25125556d8e76bd0b61500839a07944cc287ac21d5626f3e620cad5", size = 210943, upload-time = "2026-01-25T13:00:02.388Z" }, + { url = "https://files.pythonhosted.org/packages/94/44/330f8e83b143f6668778ed61d17ece9dc48459e9e74669177de02f45fec5/coverage-7.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ed48b4170caa2c4420e0cd27dc977caaffc7eecc317355751df8373dddcef595", size = 219441, upload-time = "2026-02-03T14:00:22.585Z" }, + { url = "https://files.pythonhosted.org/packages/08/e7/29db05693562c2e65bdf6910c0af2fd6f9325b8f43caf7a258413f369e30/coverage-7.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8f2adf4bcffbbec41f366f2e6dffb9d24e8172d16e91da5799c9b7ed6b5716e6", size = 219801, upload-time = "2026-02-03T14:00:24.186Z" }, + { url = "https://files.pythonhosted.org/packages/90/ae/7f8a78249b02b0818db46220795f8ac8312ea4abd1d37d79ea81db5cae81/coverage-7.13.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01119735c690786b6966a1e9f098da4cd7ca9174c4cfe076d04e653105488395", size = 251306, upload-time = "2026-02-03T14:00:25.798Z" }, + { url = "https://files.pythonhosted.org/packages/62/71/a18a53d1808e09b2e9ebd6b47dad5e92daf4c38b0686b4c4d1b2f3e42b7f/coverage-7.13.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8bb09e83c603f152d855f666d70a71765ca8e67332e5829e62cb9466c176af23", size = 254051, upload-time = "2026-02-03T14:00:27.474Z" }, + { url = "https://files.pythonhosted.org/packages/4a/0a/eb30f6455d04c5a3396d0696cad2df0269ae7444bb322f86ffe3376f7bf9/coverage-7.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b607a40cba795cfac6d130220d25962931ce101f2f478a29822b19755377fb34", size = 255160, upload-time = "2026-02-03T14:00:29.024Z" }, + { url = "https://files.pythonhosted.org/packages/7b/7e/a45baac86274ce3ed842dbb84f14560c673ad30535f397d89164ec56c5df/coverage-7.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:44f14a62f5da2e9aedf9080e01d2cda61df39197d48e323538ec037336d68da8", size = 251709, upload-time = "2026-02-03T14:00:30.641Z" }, + { url = "https://files.pythonhosted.org/packages/c0/df/dd0dc12f30da11349993f3e218901fdf82f45ee44773596050c8f5a1fb25/coverage-7.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:debf29e0b157769843dff0981cc76f79e0ed04e36bb773c6cac5f6029054bd8a", size = 253083, upload-time = "2026-02-03T14:00:32.14Z" }, + { url = "https://files.pythonhosted.org/packages/ab/32/fc764c8389a8ce95cb90eb97af4c32f392ab0ac23ec57cadeefb887188d3/coverage-7.13.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:824bb95cd71604031ae9a48edb91fd6effde669522f960375668ed21b36e3ec4", size = 251227, upload-time = "2026-02-03T14:00:34.721Z" }, + { url = "https://files.pythonhosted.org/packages/dd/ca/d025e9da8f06f24c34d2da9873957cfc5f7e0d67802c3e34d0caa8452130/coverage-7.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8f1010029a5b52dc427c8e2a8dbddb2303ddd180b806687d1acd1bb1d06649e7", size = 250794, upload-time = "2026-02-03T14:00:36.278Z" }, + { url = "https://files.pythonhosted.org/packages/45/c7/76bf35d5d488ec8f68682eb8e7671acc50a6d2d1c1182de1d2b6d4ffad3b/coverage-7.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cd5dee4fd7659d8306ffa79eeaaafd91fa30a302dac3af723b9b469e549247e0", size = 252671, upload-time = "2026-02-03T14:00:38.368Z" }, + { url = "https://files.pythonhosted.org/packages/bf/10/1921f1a03a7c209e1cb374f81a6b9b68b03cdb3ecc3433c189bc90e2a3d5/coverage-7.13.3-cp312-cp312-win32.whl", hash = "sha256:f7f153d0184d45f3873b3ad3ad22694fd73aadcb8cdbc4337ab4b41ea6b4dff1", size = 221986, upload-time = "2026-02-03T14:00:40.442Z" }, + { url = "https://files.pythonhosted.org/packages/3c/7c/f5d93297f8e125a80c15545edc754d93e0ed8ba255b65e609b185296af01/coverage-7.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:03a6e5e1e50819d6d7436f5bc40c92ded7e484e400716886ac921e35c133149d", size = 222793, upload-time = "2026-02-03T14:00:42.106Z" }, + { url = "https://files.pythonhosted.org/packages/43/59/c86b84170015b4555ebabca8649bdf9f4a1f737a73168088385ed0f947c4/coverage-7.13.3-cp312-cp312-win_arm64.whl", hash = "sha256:51c4c42c0e7d09a822b08b6cf79b3c4db8333fffde7450da946719ba0d45730f", size = 221410, upload-time = "2026-02-03T14:00:43.726Z" }, + { url = "https://files.pythonhosted.org/packages/81/f3/4c333da7b373e8c8bfb62517e8174a01dcc373d7a9083698e3b39d50d59c/coverage-7.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:853c3d3c79ff0db65797aad79dee6be020efd218ac4510f15a205f1e8d13ce25", size = 219468, upload-time = "2026-02-03T14:00:45.829Z" }, + { url = "https://files.pythonhosted.org/packages/d6/31/0714337b7d23630c8de2f4d56acf43c65f8728a45ed529b34410683f7217/coverage-7.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f75695e157c83d374f88dcc646a60cb94173304a9258b2e74ba5a66b7614a51a", size = 219839, upload-time = "2026-02-03T14:00:47.407Z" }, + { url = "https://files.pythonhosted.org/packages/12/99/bd6f2a2738144c98945666f90cae446ed870cecf0421c767475fcf42cdbe/coverage-7.13.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2d098709621d0819039f3f1e471ee554f55a0b2ac0d816883c765b14129b5627", size = 250828, upload-time = "2026-02-03T14:00:49.029Z" }, + { url = "https://files.pythonhosted.org/packages/6f/99/97b600225fbf631e6f5bfd3ad5bcaf87fbb9e34ff87492e5a572ff01bbe2/coverage-7.13.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16d23d6579cf80a474ad160ca14d8b319abaa6db62759d6eef53b2fc979b58c8", size = 253432, upload-time = "2026-02-03T14:00:50.655Z" }, + { url = "https://files.pythonhosted.org/packages/5f/5c/abe2b3490bda26bd4f5e3e799be0bdf00bd81edebedc2c9da8d3ef288fa8/coverage-7.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00d34b29a59d2076e6f318b30a00a69bf63687e30cd882984ed444e753990cc1", size = 254672, upload-time = "2026-02-03T14:00:52.757Z" }, + { url = "https://files.pythonhosted.org/packages/31/ba/5d1957c76b40daff53971fe0adb84d9c2162b614280031d1d0653dd010c1/coverage-7.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ab6d72bffac9deb6e6cb0f61042e748de3f9f8e98afb0375a8e64b0b6e11746b", size = 251050, upload-time = "2026-02-03T14:00:54.332Z" }, + { url = "https://files.pythonhosted.org/packages/69/dc/dffdf3bfe9d32090f047d3c3085378558cb4eb6778cda7de414ad74581ed/coverage-7.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e129328ad1258e49cae0123a3b5fcb93d6c2fa90d540f0b4c7cdcdc019aaa3dc", size = 252801, upload-time = "2026-02-03T14:00:56.121Z" }, + { url = "https://files.pythonhosted.org/packages/87/51/cdf6198b0f2746e04511a30dc9185d7b8cdd895276c07bdb538e37f1cd50/coverage-7.13.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2213a8d88ed35459bda71597599d4eec7c2ebad201c88f0bfc2c26fd9b0dd2ea", size = 250763, upload-time = "2026-02-03T14:00:58.719Z" }, + { url = "https://files.pythonhosted.org/packages/d7/1a/596b7d62218c1d69f2475b69cc6b211e33c83c902f38ee6ae9766dd422da/coverage-7.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:00dd3f02de6d5f5c9c3d95e3e036c3c2e2a669f8bf2d3ceb92505c4ce7838f67", size = 250587, upload-time = "2026-02-03T14:01:01.197Z" }, + { url = "https://files.pythonhosted.org/packages/f7/46/52330d5841ff660f22c130b75f5e1dd3e352c8e7baef5e5fef6b14e3e991/coverage-7.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9bada7bc660d20b23d7d312ebe29e927b655cf414dadcdb6335a2075695bd86", size = 252358, upload-time = "2026-02-03T14:01:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/36/8a/e69a5be51923097ba7d5cff9724466e74fe486e9232020ba97c809a8b42b/coverage-7.13.3-cp313-cp313-win32.whl", hash = "sha256:75b3c0300f3fa15809bd62d9ca8b170eb21fcf0100eb4b4154d6dc8b3a5bbd43", size = 222007, upload-time = "2026-02-03T14:01:04.876Z" }, + { url = "https://files.pythonhosted.org/packages/0a/09/a5a069bcee0d613bdd48ee7637fa73bc09e7ed4342b26890f2df97cc9682/coverage-7.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:a2f7589c6132c44c53f6e705e1a6677e2b7821378c22f7703b2cf5388d0d4587", size = 222812, upload-time = "2026-02-03T14:01:07.296Z" }, + { url = "https://files.pythonhosted.org/packages/3d/4f/d62ad7dfe32f9e3d4a10c178bb6f98b10b083d6e0530ca202b399371f6c1/coverage-7.13.3-cp313-cp313-win_arm64.whl", hash = "sha256:123ceaf2b9d8c614f01110f908a341e05b1b305d6b2ada98763b9a5a59756051", size = 221433, upload-time = "2026-02-03T14:01:09.156Z" }, + { url = "https://files.pythonhosted.org/packages/04/b2/4876c46d723d80b9c5b695f1a11bf5f7c3dabf540ec00d6edc076ff025e6/coverage-7.13.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:cc7fd0f726795420f3678ac82ff882c7fc33770bd0074463b5aef7293285ace9", size = 220162, upload-time = "2026-02-03T14:01:11.409Z" }, + { url = "https://files.pythonhosted.org/packages/fc/04/9942b64a0e0bdda2c109f56bda42b2a59d9d3df4c94b85a323c1cae9fc77/coverage-7.13.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d358dc408edc28730aed5477a69338e444e62fba0b7e9e4a131c505fadad691e", size = 220510, upload-time = "2026-02-03T14:01:13.038Z" }, + { url = "https://files.pythonhosted.org/packages/5a/82/5cfe1e81eae525b74669f9795f37eb3edd4679b873d79d1e6c1c14ee6c1c/coverage-7.13.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5d67b9ed6f7b5527b209b24b3df9f2e5bf0198c1bbf99c6971b0e2dcb7e2a107", size = 261801, upload-time = "2026-02-03T14:01:14.674Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ec/a553d7f742fd2cd12e36a16a7b4b3582d5934b496ef2b5ea8abeb10903d4/coverage-7.13.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59224bfb2e9b37c1335ae35d00daa3a5b4e0b1a20f530be208fff1ecfa436f43", size = 263882, upload-time = "2026-02-03T14:01:16.343Z" }, + { url = "https://files.pythonhosted.org/packages/e1/58/8f54a2a93e3d675635bc406de1c9ac8d551312142ff52c9d71b5e533ad45/coverage-7.13.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9306b5299e31e31e0d3b908c66bcb6e7e3ddca143dea0266e9ce6c667346d3", size = 266306, upload-time = "2026-02-03T14:01:18.02Z" }, + { url = "https://files.pythonhosted.org/packages/1a/be/e593399fd6ea1f00aee79ebd7cc401021f218d34e96682a92e1bae092ff6/coverage-7.13.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:343aaeb5f8bb7bcd38620fd7bc56e6ee8207847d8c6103a1e7b72322d381ba4a", size = 261051, upload-time = "2026-02-03T14:01:19.757Z" }, + { url = "https://files.pythonhosted.org/packages/5c/e5/e9e0f6138b21bcdebccac36fbfde9cf15eb1bbcea9f5b1f35cd1f465fb91/coverage-7.13.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2182129f4c101272ff5f2f18038d7b698db1bf8e7aa9e615cb48440899ad32e", size = 263868, upload-time = "2026-02-03T14:01:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/9a/bf/de72cfebb69756f2d4a2dde35efcc33c47d85cd3ebdf844b3914aac2ef28/coverage-7.13.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:94d2ac94bd0cc57c5626f52f8c2fffed1444b5ae8c9fc68320306cc2b255e155", size = 261498, upload-time = "2026-02-03T14:01:23.097Z" }, + { url = "https://files.pythonhosted.org/packages/f2/91/4a2d313a70fc2e98ca53afd1c8ce67a89b1944cd996589a5b1fe7fbb3e5c/coverage-7.13.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:65436cde5ecabe26fb2f0bf598962f0a054d3f23ad529361326ac002c61a2a1e", size = 260394, upload-time = "2026-02-03T14:01:24.949Z" }, + { url = "https://files.pythonhosted.org/packages/40/83/25113af7cf6941e779eb7ed8de2a677865b859a07ccee9146d4cc06a03e3/coverage-7.13.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:db83b77f97129813dbd463a67e5335adc6a6a91db652cc085d60c2d512746f96", size = 262579, upload-time = "2026-02-03T14:01:26.703Z" }, + { url = "https://files.pythonhosted.org/packages/1e/19/a5f2b96262977e82fb9aabbe19b4d83561f5d063f18dde3e72f34ffc3b2f/coverage-7.13.3-cp313-cp313t-win32.whl", hash = "sha256:dfb428e41377e6b9ba1b0a32df6db5409cb089a0ed1d0a672dc4953ec110d84f", size = 222679, upload-time = "2026-02-03T14:01:28.553Z" }, + { url = "https://files.pythonhosted.org/packages/81/82/ef1747b88c87a5c7d7edc3704799ebd650189a9158e680a063308b6125ef/coverage-7.13.3-cp313-cp313t-win_amd64.whl", hash = "sha256:5badd7e596e6b0c89aa8ec6d37f4473e4357f982ce57f9a2942b0221cd9cf60c", size = 223740, upload-time = "2026-02-03T14:01:30.776Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4c/a67c7bb5b560241c22736a9cb2f14c5034149ffae18630323fde787339e4/coverage-7.13.3-cp313-cp313t-win_arm64.whl", hash = "sha256:989aa158c0eb19d83c76c26f4ba00dbb272485c56e452010a3450bdbc9daafd9", size = 221996, upload-time = "2026-02-03T14:01:32.495Z" }, + { url = "https://files.pythonhosted.org/packages/7d/fb/70af542d2d938c778c9373ce253aa4116dbe7c0a5672f78b2b2ae0e1b94b/coverage-7.13.3-py3-none-any.whl", hash = "sha256:90a8af9dba6429b2573199622d72e0ebf024d6276f16abce394ad4d181bb0910", size = 211237, upload-time = "2026-02-03T14:02:27.986Z" }, ] [[package]] @@ -640,60 +640,58 @@ wheels = [ [[package]] name = "cryptography" -version = "46.0.3" +version = "46.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/19/f748958276519adf6a0c1e79e7b8860b4830dda55ccdf29f2719b5fc499c/cryptography-46.0.4.tar.gz", hash = "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59", size = 749301, upload-time = "2026-01-28T00:24:37.379Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, - { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, - { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, - { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, - { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, - { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, - { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, - { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, - { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, - { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, - { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, - { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, - { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, - { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, - { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, - { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, - { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, - { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, - { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, - { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, - { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, - { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, - { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, - { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, - { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/8d/99/157aae7949a5f30d51fcb1a9851e8ebd5c74bf99b5285d8bb4b8b9ee641e/cryptography-46.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485", size = 7173686, upload-time = "2026-01-28T00:23:07.515Z" }, + { url = "https://files.pythonhosted.org/packages/87/91/874b8910903159043b5c6a123b7e79c4559ddd1896e38967567942635778/cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc", size = 4275871, upload-time = "2026-01-28T00:23:09.439Z" }, + { url = "https://files.pythonhosted.org/packages/c0/35/690e809be77896111f5b195ede56e4b4ed0435b428c2f2b6d35046fbb5e8/cryptography-46.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0", size = 4423124, upload-time = "2026-01-28T00:23:11.529Z" }, + { url = "https://files.pythonhosted.org/packages/1a/5b/a26407d4f79d61ca4bebaa9213feafdd8806dc69d3d290ce24996d3cfe43/cryptography-46.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa", size = 4277090, upload-time = "2026-01-28T00:23:13.123Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d8/4bb7aec442a9049827aa34cee1aa83803e528fa55da9a9d45d01d1bb933e/cryptography-46.0.4-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81", size = 4947652, upload-time = "2026-01-28T00:23:14.554Z" }, + { url = "https://files.pythonhosted.org/packages/2b/08/f83e2e0814248b844265802d081f2fac2f1cbe6cd258e72ba14ff006823a/cryptography-46.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255", size = 4455157, upload-time = "2026-01-28T00:23:16.443Z" }, + { url = "https://files.pythonhosted.org/packages/0a/05/19d849cf4096448779d2dcc9bb27d097457dac36f7273ffa875a93b5884c/cryptography-46.0.4-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e", size = 3981078, upload-time = "2026-01-28T00:23:17.838Z" }, + { url = "https://files.pythonhosted.org/packages/e6/89/f7bac81d66ba7cde867a743ea5b37537b32b5c633c473002b26a226f703f/cryptography-46.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c", size = 4276213, upload-time = "2026-01-28T00:23:19.257Z" }, + { url = "https://files.pythonhosted.org/packages/da/9f/7133e41f24edd827020ad21b068736e792bc68eecf66d93c924ad4719fb3/cryptography-46.0.4-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32", size = 4912190, upload-time = "2026-01-28T00:23:21.244Z" }, + { url = "https://files.pythonhosted.org/packages/a6/f7/6d43cbaddf6f65b24816e4af187d211f0bc536a29961f69faedc48501d8e/cryptography-46.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616", size = 4454641, upload-time = "2026-01-28T00:23:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4f/ebd0473ad656a0ac912a16bd07db0f5d85184924e14fc88feecae2492834/cryptography-46.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0", size = 4405159, upload-time = "2026-01-28T00:23:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f7/7923886f32dc47e27adeff8246e976d77258fd2aa3efdd1754e4e323bf49/cryptography-46.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0", size = 4666059, upload-time = "2026-01-28T00:23:26.766Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a7/0fca0fd3591dffc297278a61813d7f661a14243dd60f499a7a5b48acb52a/cryptography-46.0.4-cp311-abi3-win32.whl", hash = "sha256:82a62483daf20b8134f6e92898da70d04d0ef9a75829d732ea1018678185f4f5", size = 3026378, upload-time = "2026-01-28T00:23:28.317Z" }, + { url = "https://files.pythonhosted.org/packages/2d/12/652c84b6f9873f0909374864a57b003686c642ea48c84d6c7e2c515e6da5/cryptography-46.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:6225d3ebe26a55dbc8ead5ad1265c0403552a63336499564675b29eb3184c09b", size = 3478614, upload-time = "2026-01-28T00:23:30.275Z" }, + { url = "https://files.pythonhosted.org/packages/56/f7/f648fdbb61d0d45902d3f374217451385edc7e7768d1b03ff1d0e5ffc17b/cryptography-46.0.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a9556ba711f7c23f77b151d5798f3ac44a13455cc68db7697a1096e6d0563cab", size = 7169583, upload-time = "2026-01-28T00:23:56.558Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cc/8f3224cbb2a928de7298d6ed4790f5ebc48114e02bdc9559196bfb12435d/cryptography-46.0.4-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef", size = 4275419, upload-time = "2026-01-28T00:23:58.364Z" }, + { url = "https://files.pythonhosted.org/packages/17/43/4a18faa7a872d00e4264855134ba82d23546c850a70ff209e04ee200e76f/cryptography-46.0.4-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d", size = 4419058, upload-time = "2026-01-28T00:23:59.867Z" }, + { url = "https://files.pythonhosted.org/packages/ee/64/6651969409821d791ba12346a124f55e1b76f66a819254ae840a965d4b9c/cryptography-46.0.4-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973", size = 4278151, upload-time = "2026-01-28T00:24:01.731Z" }, + { url = "https://files.pythonhosted.org/packages/20/0b/a7fce65ee08c3c02f7a8310cc090a732344066b990ac63a9dfd0a655d321/cryptography-46.0.4-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4", size = 4939441, upload-time = "2026-01-28T00:24:03.175Z" }, + { url = "https://files.pythonhosted.org/packages/db/a7/20c5701e2cd3e1dfd7a19d2290c522a5f435dd30957d431dcb531d0f1413/cryptography-46.0.4-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af", size = 4451617, upload-time = "2026-01-28T00:24:05.403Z" }, + { url = "https://files.pythonhosted.org/packages/00/dc/3e16030ea9aa47b63af6524c354933b4fb0e352257c792c4deeb0edae367/cryptography-46.0.4-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263", size = 3977774, upload-time = "2026-01-28T00:24:06.851Z" }, + { url = "https://files.pythonhosted.org/packages/42/c8/ad93f14118252717b465880368721c963975ac4b941b7ef88f3c56bf2897/cryptography-46.0.4-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095", size = 4277008, upload-time = "2026-01-28T00:24:08.926Z" }, + { url = "https://files.pythonhosted.org/packages/00/cf/89c99698151c00a4631fbfcfcf459d308213ac29e321b0ff44ceeeac82f1/cryptography-46.0.4-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b", size = 4903339, upload-time = "2026-01-28T00:24:12.009Z" }, + { url = "https://files.pythonhosted.org/packages/03/c3/c90a2cb358de4ac9309b26acf49b2a100957e1ff5cc1e98e6c4996576710/cryptography-46.0.4-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019", size = 4451216, upload-time = "2026-01-28T00:24:13.975Z" }, + { url = "https://files.pythonhosted.org/packages/96/2c/8d7f4171388a10208671e181ca43cdc0e596d8259ebacbbcfbd16de593da/cryptography-46.0.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4", size = 4404299, upload-time = "2026-01-28T00:24:16.169Z" }, + { url = "https://files.pythonhosted.org/packages/e9/23/cbb2036e450980f65c6e0a173b73a56ff3bccd8998965dea5cc9ddd424a5/cryptography-46.0.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b", size = 4664837, upload-time = "2026-01-28T00:24:17.629Z" }, + { url = "https://files.pythonhosted.org/packages/0a/21/f7433d18fe6d5845329cbdc597e30caf983229c7a245bcf54afecc555938/cryptography-46.0.4-cp38-abi3-win32.whl", hash = "sha256:0563655cb3c6d05fb2afe693340bc050c30f9f34e15763361cf08e94749401fc", size = 3009779, upload-time = "2026-01-28T00:24:20.198Z" }, + { url = "https://files.pythonhosted.org/packages/3a/6a/bd2e7caa2facffedf172a45c1a02e551e6d7d4828658c9a245516a598d94/cryptography-46.0.4-cp38-abi3-win_amd64.whl", hash = "sha256:fa0900b9ef9c49728887d1576fd8d9e7e3ea872fa9b25ef9b64888adc434e976", size = 3466633, upload-time = "2026-01-28T00:24:21.851Z" }, ] [[package]] name = "debugpy" -version = "1.8.19" +version = "1.8.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/75/9e12d4d42349b817cd545b89247696c67917aab907012ae5b64bbfea3199/debugpy-1.8.19.tar.gz", hash = "sha256:eea7e5987445ab0b5ed258093722d5ecb8bb72217c5c9b1e21f64efe23ddebdb", size = 1644590, upload-time = "2025-12-15T21:53:28.044Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207, upload-time = "2026-01-29T23:03:28.199Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/15/d762e5263d9e25b763b78be72dc084c7a32113a0bac119e2f7acae7700ed/debugpy-1.8.19-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:bccb1540a49cde77edc7ce7d9d075c1dbeb2414751bc0048c7a11e1b597a4c2e", size = 2549995, upload-time = "2025-12-15T21:53:43.773Z" }, - { url = "https://files.pythonhosted.org/packages/a7/88/f7d25c68b18873b7c53d7c156ca7a7ffd8e77073aa0eac170a9b679cf786/debugpy-1.8.19-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:e9c68d9a382ec754dc05ed1d1b4ed5bd824b9f7c1a8cd1083adb84b3c93501de", size = 4309891, upload-time = "2025-12-15T21:53:45.26Z" }, - { url = "https://files.pythonhosted.org/packages/c5/4f/a65e973aba3865794da65f71971dca01ae66666132c7b2647182d5be0c5f/debugpy-1.8.19-cp312-cp312-win32.whl", hash = "sha256:6599cab8a783d1496ae9984c52cb13b7c4a3bd06a8e6c33446832a5d97ce0bee", size = 5286355, upload-time = "2025-12-15T21:53:46.763Z" }, - { url = "https://files.pythonhosted.org/packages/d8/3a/d3d8b48fec96e3d824e404bf428276fb8419dfa766f78f10b08da1cb2986/debugpy-1.8.19-cp312-cp312-win_amd64.whl", hash = "sha256:66e3d2fd8f2035a8f111eb127fa508469dfa40928a89b460b41fd988684dc83d", size = 5328239, upload-time = "2025-12-15T21:53:48.868Z" }, - { url = "https://files.pythonhosted.org/packages/71/3d/388035a31a59c26f1ecc8d86af607d0c42e20ef80074147cd07b180c4349/debugpy-1.8.19-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:91e35db2672a0abaf325f4868fcac9c1674a0d9ad9bb8a8c849c03a5ebba3e6d", size = 2538859, upload-time = "2025-12-15T21:53:50.478Z" }, - { url = "https://files.pythonhosted.org/packages/4a/19/c93a0772d0962294f083dbdb113af1a7427bb632d36e5314297068f55db7/debugpy-1.8.19-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:85016a73ab84dea1c1f1dcd88ec692993bcbe4532d1b49ecb5f3c688ae50c606", size = 4292575, upload-time = "2025-12-15T21:53:51.821Z" }, - { url = "https://files.pythonhosted.org/packages/5c/56/09e48ab796b0a77e3d7dc250f95251832b8bf6838c9632f6100c98bdf426/debugpy-1.8.19-cp313-cp313-win32.whl", hash = "sha256:b605f17e89ba0ecee994391194285fada89cee111cfcd29d6f2ee11cbdc40976", size = 5286209, upload-time = "2025-12-15T21:53:53.602Z" }, - { url = "https://files.pythonhosted.org/packages/fb/4e/931480b9552c7d0feebe40c73725dd7703dcc578ba9efc14fe0e6d31cfd1/debugpy-1.8.19-cp313-cp313-win_amd64.whl", hash = "sha256:c30639998a9f9cd9699b4b621942c0179a6527f083c72351f95c6ab1728d5b73", size = 5328206, upload-time = "2025-12-15T21:53:55.433Z" }, - { url = "https://files.pythonhosted.org/packages/25/3e/e27078370414ef35fafad2c06d182110073daaeb5d3bf734b0b1eeefe452/debugpy-1.8.19-py2.py3-none-any.whl", hash = "sha256:360ffd231a780abbc414ba0f005dad409e71c78637efe8f2bd75837132a41d38", size = 5292321, upload-time = "2025-12-15T21:54:16.024Z" }, + { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686, upload-time = "2026-01-29T23:03:42.023Z" }, + { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588, upload-time = "2026-01-29T23:03:43.314Z" }, + { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372, upload-time = "2026-01-29T23:03:45.526Z" }, + { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835, upload-time = "2026-01-29T23:03:47.245Z" }, + { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560, upload-time = "2026-01-29T23:03:48.738Z" }, + { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272, upload-time = "2026-01-29T23:03:50.169Z" }, + { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208, upload-time = "2026-01-29T23:03:51.547Z" }, + { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930, upload-time = "2026-01-29T23:03:53.585Z" }, + { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658, upload-time = "2026-01-29T23:04:17.404Z" }, ] [[package]] @@ -734,16 +732,16 @@ wheels = [ [[package]] name = "django" -version = "5.2.9" +version = "5.2.11" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/1c/188ce85ee380f714b704283013434976df8d3a2df8e735221a02605b6794/django-5.2.9.tar.gz", hash = "sha256:16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495", size = 10848762, upload-time = "2025-12-02T14:01:08.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/17/f2/3e57ef696b95067e05ae206171e47a8e53b9c84eec56198671ef9eaa51a6/django-5.2.11.tar.gz", hash = "sha256:7f2d292ad8b9ee35e405d965fbbad293758b858c34bbf7f3df551aeeac6f02d3", size = 10885017, upload-time = "2026-02-03T13:52:50.554Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/b0/7f42bfc38b8f19b78546d47147e083ed06e12fc29c42da95655e0962c6c2/django-5.2.9-py3-none-any.whl", hash = "sha256:3a4ea88a70370557ab1930b332fd2887a9f48654261cdffda663fef5976bb00a", size = 8290652, upload-time = "2025-12-02T14:01:03.485Z" }, + { url = "https://files.pythonhosted.org/packages/91/a7/2b112ab430575bf3135b8304ac372248500d99c352f777485f53fdb9537e/django-5.2.11-py3-none-any.whl", hash = "sha256:e7130df33ada9ab5e5e929bc19346a20fe383f5454acb2cc004508f242ee92c0", size = 8291375, upload-time = "2026-02-03T13:52:42.47Z" }, ] [[package]] @@ -863,14 +861,15 @@ wheels = [ [[package]] name = "django-health-check" -version = "3.20.8" +version = "3.23.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, + { name = "psutil" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/03/e4/6700a587b75c89ea3ba14240be5d5412b825dcb6ec0b1f76e60a310daafb/django_health_check-3.20.8.tar.gz", hash = "sha256:bbb7286af4b4e2079d262eeb3e68014c8980f8fcfbd295bca1ec31cbf827b83c", size = 15664, upload-time = "2025-12-22T23:58:58.78Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/9b/fd280bb8a70fd649a1ac97a51a936086cead496b0fb4b2e9ad29d1635681/django_health_check-3.23.3.tar.gz", hash = "sha256:7b5e6e6c8b2254190a65cf497c292a4af407a3d52b316f4c801601ce2b20de94", size = 20653, upload-time = "2026-02-03T22:09:20.259Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/1f/6f508be8c39d45cff06c4fda7f50a137c627a2fbe970cef451111c6199f2/django_health_check-3.20.8-py3-none-any.whl", hash = "sha256:89f06fd3ecfefb13a8444cbc49508c76f1f49c816624026f720a28e0e67a458c", size = 29522, upload-time = "2025-12-22T23:58:57.226Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a7/2512ca5ad1dd31e3d1c9ab0faebbb08864527464ab25de6f5abd1f063ad9/django_health_check-3.23.3-py3-none-any.whl", hash = "sha256:3055971ff8cbd361b736dcf4551769f9ba28d3aca5462679dd50e4ef193de8d0", size = 37699, upload-time = "2026-02-03T22:09:18.654Z" }, ] [[package]] @@ -1051,14 +1050,14 @@ wheels = [ [[package]] name = "django-unfold" -version = "0.76.0" +version = "0.78.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/dc/041d8144fb4503dea02bd73059c842395dfc8b6e7e14e9c7e16b65a43696/django_unfold-0.76.0.tar.gz", hash = "sha256:26d556aaf0f14980f102ea680af27887ac8508085a56c5c797da28c7ca165ec8", size = 1103435, upload-time = "2026-01-12T12:10:11.943Z" } +sdist = { url = "https://files.pythonhosted.org/packages/47/ca/c1148935fd0753fb70ddad19b7b7180dd94eabd267024dd65611a2c4388f/django_unfold-0.78.1.tar.gz", hash = "sha256:1de8537f0037b48e84d72b30229259060140ac84fc30d79eb69b5c9de6c5e51d", size = 1109404, upload-time = "2026-02-03T10:11:08.838Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/17/9da3c6fd822dfe9bd1ef3e2486d4994df1456cf21de91594b79b982511a6/django_unfold-0.76.0-py3-none-any.whl", hash = "sha256:4323222ec06c73f9210196646447e90d4bc7464c2c5fd16bcf722fdc9c8ed4a7", size = 1219446, upload-time = "2026-01-12T12:10:10.118Z" }, + { url = "https://files.pythonhosted.org/packages/79/0b/4dd387462f0d7e705c477da8c761303591fccd66f0a6b5d6ba2ddc0f7855/django_unfold-0.78.1-py3-none-any.whl", hash = "sha256:6b557030d3ad6c8275ecacb69260b03a7ed3de972cb2e60ef2dea6d3363d515c", size = 1224742, upload-time = "2026-02-03T10:11:07.057Z" }, ] [[package]] @@ -1075,13 +1074,14 @@ wheels = [ [[package]] name = "djangoql" -version = "0.18.1" +version = "0.19.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "ply" }, ] +sdist = { url = "https://files.pythonhosted.org/packages/9b/95/c4747b92a55e48abcfde05cc1309fe7223998f8fe3bb2e435bb16256738f/djangoql-0.19.1.tar.gz", hash = "sha256:bce09d52857857b22744f93241f16d5c62a1b118a7834e1c8afa14bebb964eee", size = 233831, upload-time = "2026-01-27T03:47:38.743Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/0a/83cdb7b9d3b854b98941363153945f6c051b3bc50cd61108a85677c98c3a/djangoql-0.18.1-py2.py3-none-any.whl", hash = "sha256:51b3085a805627ebb43cfd0aa861137cdf8f69cc3c9244699718fe04a6c8e26d", size = 218209, upload-time = "2024-01-08T14:10:47.915Z" }, + { url = "https://files.pythonhosted.org/packages/59/86/4455346b3c3cd7e5abe74a9c6abc97ceda2d597e73dd9eb77bd3bd558086/djangoql-0.19.1-py2.py3-none-any.whl", hash = "sha256:70cf53218b15557ed02baaace1387de1caffb6809cdfb3c633e4fd4e53a36111", size = 218813, upload-time = "2026-01-27T03:47:36.522Z" }, ] [[package]] @@ -1130,17 +1130,16 @@ crypto = [ [[package]] name = "djangorestframework-stubs" -version = "3.16.7" +version = "3.16.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django-stubs" }, { name = "types-pyyaml" }, - { name = "types-requests" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/50/889b1121dc0831aa9f6ece8409d41a5f4667da2a963172516841f343fd35/djangorestframework_stubs-3.16.7.tar.gz", hash = "sha256:e53bc346e9950ebdd1bb2bbc19d7e5c8b7acc894e381df55da69248f47ab78ff", size = 32296, upload-time = "2026-01-13T11:42:48.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/d5/87166a827833eb39703856ef957ca0fb4e9d15285331251186a2e738c20c/djangorestframework_stubs-3.16.8.tar.gz", hash = "sha256:f6d464b54fa2f929610e957446c04e6ac29558265418e0a2d9f653a4cdd410b5", size = 32312, upload-time = "2026-02-03T22:35:53.182Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/99/7c969728d66388e22fdaba94e1a9c56490954e2f12f598416e380a53b26d/djangorestframework_stubs-3.16.7-py3-none-any.whl", hash = "sha256:70f80050144875f80ce8ac823ff8628f6e3eb7336495394bb9803251721d9358", size = 56522, upload-time = "2026-01-13T11:42:46.118Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e9/d9c363b08d07d975c21793fe821b2020dfd3627ac4ce19c5c12df94ce9d0/djangorestframework_stubs-3.16.8-py3-none-any.whl", hash = "sha256:c5bf61def0f330a071dd5f470f05710189d06c467b3f3e186b32c5a23d4952fb", size = 56517, upload-time = "2026-02-03T22:35:50.67Z" }, ] [[package]] @@ -1207,11 +1206,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d9/502c56fc3ca960075d00956283f1c44e8cafe433dada03f9ed2821f3073b/drf_spectacular-0.29.0-py3-none-any.whl", hash = "sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a", size = 105433, upload-time = "2025-11-02T03:40:24.823Z" }, ] -[package.optional-dependencies] -sidecar = [ - { name = "drf-spectacular-sidecar" }, -] - [[package]] name = "drf-spectacular-sidecar" version = "2024.4.1" @@ -1578,7 +1572,7 @@ wheels = [ [[package]] name = "ipython" -version = "9.9.0" +version = "9.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -1592,9 +1586,9 @@ dependencies = [ { name = "stack-data" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/46/dd/fb08d22ec0c27e73c8bc8f71810709870d51cadaf27b7ddd3f011236c100/ipython-9.9.0.tar.gz", hash = "sha256:48fbed1b2de5e2c7177eefa144aba7fcb82dac514f09b57e2ac9da34ddb54220", size = 4425043, upload-time = "2026-01-05T12:36:46.233Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/60/2111715ea11f39b1535bed6024b7dec7918b71e5e5d30855a5b503056b50/ipython-9.10.0.tar.gz", hash = "sha256:cd9e656be97618a0676d058134cd44e6dc7012c0e5cb36a9ce96a8c904adaf77", size = 4426526, upload-time = "2026-02-02T10:00:33.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/92/162cfaee4ccf370465c5af1ce36a9eacec1becb552f2033bb3584e6f640a/ipython-9.9.0-py3-none-any.whl", hash = "sha256:b457fe9165df2b84e8ec909a97abcf2ed88f565970efba16b1f7229c283d252b", size = 621431, upload-time = "2026-01-05T12:36:44.669Z" }, + { url = "https://files.pythonhosted.org/packages/3d/aa/898dec789a05731cd5a9f50605b7b44a72bd198fd0d4528e11fc610177cc/ipython-9.10.0-py3-none-any.whl", hash = "sha256:c6ab68cc23bba8c7e18e9b932797014cc61ea7fd6f19de180ab9ba73e65ee58d", size = 622774, upload-time = "2026-02-02T10:00:31.503Z" }, ] [[package]] @@ -1672,45 +1666,45 @@ wheels = [ [[package]] name = "jiter" -version = "0.12.0" +version = "0.13.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/9d/e0660989c1370e25848bb4c52d061c71837239738ad937e83edca174c273/jiter-0.12.0.tar.gz", hash = "sha256:64dfcd7d5c168b38d3f9f8bba7fc639edb3418abcc74f22fdbe6b8938293f30b", size = 168294, upload-time = "2025-11-09T20:49:23.302Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/92/c9/5b9f7b4983f1b542c64e84165075335e8a236fa9e2ea03a0c79780062be8/jiter-0.12.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:305e061fa82f4680607a775b2e8e0bcb071cd2205ac38e6ef48c8dd5ebe1cf37", size = 314449, upload-time = "2025-11-09T20:47:22.999Z" }, - { url = "https://files.pythonhosted.org/packages/98/6e/e8efa0e78de00db0aee82c0cf9e8b3f2027efd7f8a71f859d8f4be8e98ef/jiter-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c1860627048e302a528333c9307c818c547f214d8659b0705d2195e1a94b274", size = 319855, upload-time = "2025-11-09T20:47:24.779Z" }, - { url = "https://files.pythonhosted.org/packages/20/26/894cd88e60b5d58af53bec5c6759d1292bd0b37a8b5f60f07abf7a63ae5f/jiter-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df37577a4f8408f7e0ec3205d2a8f87672af8f17008358063a4d6425b6081ce3", size = 350171, upload-time = "2025-11-09T20:47:26.469Z" }, - { url = "https://files.pythonhosted.org/packages/f5/27/a7b818b9979ac31b3763d25f3653ec3a954044d5e9f5d87f2f247d679fd1/jiter-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fdd787356c1c13a4f40b43c2156276ef7a71eb487d98472476476d803fb2cf", size = 365590, upload-time = "2025-11-09T20:47:27.918Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7e/e46195801a97673a83746170b17984aa8ac4a455746354516d02ca5541b4/jiter-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eb5db8d9c65b112aacf14fcd0faae9913d07a8afea5ed06ccdd12b724e966a1", size = 479462, upload-time = "2025-11-09T20:47:29.654Z" }, - { url = "https://files.pythonhosted.org/packages/ca/75/f833bfb009ab4bd11b1c9406d333e3b4357709ed0570bb48c7c06d78c7dd/jiter-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73c568cc27c473f82480abc15d1301adf333a7ea4f2e813d6a2c7d8b6ba8d0df", size = 378983, upload-time = "2025-11-09T20:47:31.026Z" }, - { url = "https://files.pythonhosted.org/packages/71/b3/7a69d77943cc837d30165643db753471aff5df39692d598da880a6e51c24/jiter-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4321e8a3d868919bcb1abb1db550d41f2b5b326f72df29e53b2df8b006eb9403", size = 361328, upload-time = "2025-11-09T20:47:33.286Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ac/a78f90caf48d65ba70d8c6efc6f23150bc39dc3389d65bbec2a95c7bc628/jiter-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a51bad79f8cc9cac2b4b705039f814049142e0050f30d91695a2d9a6611f126", size = 386740, upload-time = "2025-11-09T20:47:34.703Z" }, - { url = "https://files.pythonhosted.org/packages/39/b6/5d31c2cc8e1b6a6bcf3c5721e4ca0a3633d1ab4754b09bc7084f6c4f5327/jiter-0.12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2a67b678f6a5f1dd6c36d642d7db83e456bc8b104788262aaefc11a22339f5a9", size = 520875, upload-time = "2025-11-09T20:47:36.058Z" }, - { url = "https://files.pythonhosted.org/packages/30/b5/4df540fae4e9f68c54b8dab004bd8c943a752f0b00efd6e7d64aa3850339/jiter-0.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efe1a211fe1fd14762adea941e3cfd6c611a136e28da6c39272dbb7a1bbe6a86", size = 511457, upload-time = "2025-11-09T20:47:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/07/65/86b74010e450a1a77b2c1aabb91d4a91dd3cd5afce99f34d75fd1ac64b19/jiter-0.12.0-cp312-cp312-win32.whl", hash = "sha256:d779d97c834b4278276ec703dc3fc1735fca50af63eb7262f05bdb4e62203d44", size = 204546, upload-time = "2025-11-09T20:47:40.47Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c7/6659f537f9562d963488e3e55573498a442503ced01f7e169e96a6110383/jiter-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8269062060212b373316fe69236096aaf4c49022d267c6736eebd66bbbc60bb", size = 205196, upload-time = "2025-11-09T20:47:41.794Z" }, - { url = "https://files.pythonhosted.org/packages/21/f4/935304f5169edadfec7f9c01eacbce4c90bb9a82035ac1de1f3bd2d40be6/jiter-0.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:06cb970936c65de926d648af0ed3d21857f026b1cf5525cb2947aa5e01e05789", size = 186100, upload-time = "2025-11-09T20:47:43.007Z" }, - { url = "https://files.pythonhosted.org/packages/3d/a6/97209693b177716e22576ee1161674d1d58029eb178e01866a0422b69224/jiter-0.12.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:6cc49d5130a14b732e0612bc76ae8db3b49898732223ef8b7599aa8d9810683e", size = 313658, upload-time = "2025-11-09T20:47:44.424Z" }, - { url = "https://files.pythonhosted.org/packages/06/4d/125c5c1537c7d8ee73ad3d530a442d6c619714b95027143f1b61c0b4dfe0/jiter-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:37f27a32ce36364d2fa4f7fdc507279db604d27d239ea2e044c8f148410defe1", size = 318605, upload-time = "2025-11-09T20:47:45.973Z" }, - { url = "https://files.pythonhosted.org/packages/99/bf/a840b89847885064c41a5f52de6e312e91fa84a520848ee56c97e4fa0205/jiter-0.12.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbc0944aa3d4b4773e348cda635252824a78f4ba44328e042ef1ff3f6080d1cf", size = 349803, upload-time = "2025-11-09T20:47:47.535Z" }, - { url = "https://files.pythonhosted.org/packages/8a/88/e63441c28e0db50e305ae23e19c1d8fae012d78ed55365da392c1f34b09c/jiter-0.12.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:da25c62d4ee1ffbacb97fac6dfe4dcd6759ebdc9015991e92a6eae5816287f44", size = 365120, upload-time = "2025-11-09T20:47:49.284Z" }, - { url = "https://files.pythonhosted.org/packages/0a/7c/49b02714af4343970eb8aca63396bc1c82fa01197dbb1e9b0d274b550d4e/jiter-0.12.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:048485c654b838140b007390b8182ba9774621103bd4d77c9c3f6f117474ba45", size = 479918, upload-time = "2025-11-09T20:47:50.807Z" }, - { url = "https://files.pythonhosted.org/packages/69/ba/0a809817fdd5a1db80490b9150645f3aae16afad166960bcd562be194f3b/jiter-0.12.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:635e737fbb7315bef0037c19b88b799143d2d7d3507e61a76751025226b3ac87", size = 379008, upload-time = "2025-11-09T20:47:52.211Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c3/c9fc0232e736c8877d9e6d83d6eeb0ba4e90c6c073835cc2e8f73fdeef51/jiter-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e017c417b1ebda911bd13b1e40612704b1f5420e30695112efdbed8a4b389ed", size = 361785, upload-time = "2025-11-09T20:47:53.512Z" }, - { url = "https://files.pythonhosted.org/packages/96/61/61f69b7e442e97ca6cd53086ddc1cf59fb830549bc72c0a293713a60c525/jiter-0.12.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:89b0bfb8b2bf2351fba36bb211ef8bfceba73ef58e7f0c68fb67b5a2795ca2f9", size = 386108, upload-time = "2025-11-09T20:47:54.893Z" }, - { url = "https://files.pythonhosted.org/packages/e9/2e/76bb3332f28550c8f1eba3bf6e5efe211efda0ddbbaf24976bc7078d42a5/jiter-0.12.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:f5aa5427a629a824a543672778c9ce0c5e556550d1569bb6ea28a85015287626", size = 519937, upload-time = "2025-11-09T20:47:56.253Z" }, - { url = "https://files.pythonhosted.org/packages/84/d6/fa96efa87dc8bff2094fb947f51f66368fa56d8d4fc9e77b25d7fbb23375/jiter-0.12.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed53b3d6acbcb0fd0b90f20c7cb3b24c357fe82a3518934d4edfa8c6898e498c", size = 510853, upload-time = "2025-11-09T20:47:58.32Z" }, - { url = "https://files.pythonhosted.org/packages/8a/28/93f67fdb4d5904a708119a6ab58a8f1ec226ff10a94a282e0215402a8462/jiter-0.12.0-cp313-cp313-win32.whl", hash = "sha256:4747de73d6b8c78f2e253a2787930f4fffc68da7fa319739f57437f95963c4de", size = 204699, upload-time = "2025-11-09T20:47:59.686Z" }, - { url = "https://files.pythonhosted.org/packages/c4/1f/30b0eb087045a0abe2a5c9c0c0c8da110875a1d3be83afd4a9a4e548be3c/jiter-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:e25012eb0c456fcc13354255d0338cd5397cce26c77b2832b3c4e2e255ea5d9a", size = 204258, upload-time = "2025-11-09T20:48:01.01Z" }, - { url = "https://files.pythonhosted.org/packages/2c/f4/2b4daf99b96bce6fc47971890b14b2a36aef88d7beb9f057fafa032c6141/jiter-0.12.0-cp313-cp313-win_arm64.whl", hash = "sha256:c97b92c54fe6110138c872add030a1f99aea2401ddcdaa21edf74705a646dd60", size = 185503, upload-time = "2025-11-09T20:48:02.35Z" }, - { url = "https://files.pythonhosted.org/packages/39/ca/67bb15a7061d6fe20b9b2a2fd783e296a1e0f93468252c093481a2f00efa/jiter-0.12.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:53839b35a38f56b8be26a7851a48b89bc47e5d88e900929df10ed93b95fea3d6", size = 317965, upload-time = "2025-11-09T20:48:03.783Z" }, - { url = "https://files.pythonhosted.org/packages/18/af/1788031cd22e29c3b14bc6ca80b16a39a0b10e611367ffd480c06a259831/jiter-0.12.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94f669548e55c91ab47fef8bddd9c954dab1938644e715ea49d7e117015110a4", size = 345831, upload-time = "2025-11-09T20:48:05.55Z" }, - { url = "https://files.pythonhosted.org/packages/05/17/710bf8472d1dff0d3caf4ced6031060091c1320f84ee7d5dcbed1f352417/jiter-0.12.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:351d54f2b09a41600ffea43d081522d792e81dcfb915f6d2d242744c1cc48beb", size = 361272, upload-time = "2025-11-09T20:48:06.951Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f1/1dcc4618b59761fef92d10bcbb0b038b5160be653b003651566a185f1a5c/jiter-0.12.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2a5e90604620f94bf62264e7c2c038704d38217b7465b863896c6d7c902b06c7", size = 204604, upload-time = "2025-11-09T20:48:08.328Z" }, - { url = "https://files.pythonhosted.org/packages/d9/32/63cb1d9f1c5c6632a783c0052cde9ef7ba82688f7065e2f0d5f10a7e3edb/jiter-0.12.0-cp313-cp313t-win_arm64.whl", hash = "sha256:88ef757017e78d2860f96250f9393b7b577b06a956ad102c29c8237554380db3", size = 185628, upload-time = "2025-11-09T20:48:09.572Z" }, - { url = "https://files.pythonhosted.org/packages/cb/f5/12efb8ada5f5c9edc1d4555fe383c1fb2eac05ac5859258a72d61981d999/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:e8547883d7b96ef2e5fe22b88f8a4c8725a56e7f4abafff20fd5272d634c7ecb", size = 309974, upload-time = "2025-11-09T20:49:17.187Z" }, - { url = "https://files.pythonhosted.org/packages/85/15/d6eb3b770f6a0d332675141ab3962fd4a7c270ede3515d9f3583e1d28276/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:89163163c0934854a668ed783a2546a0617f71706a2551a4a0666d91ab365d6b", size = 304233, upload-time = "2025-11-09T20:49:18.734Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3e/e7e06743294eea2cf02ced6aa0ff2ad237367394e37a0e2b4a1108c67a36/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d96b264ab7d34bbb2312dedc47ce07cd53f06835eacbc16dde3761f47c3a9e7f", size = 338537, upload-time = "2025-11-09T20:49:20.317Z" }, - { url = "https://files.pythonhosted.org/packages/2f/9c/6753e6522b8d0ef07d3a3d239426669e984fb0eba15a315cdbc1253904e4/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24e864cb30ab82311c6425655b0cdab0a98c5d973b065c66a3f020740c2324c", size = 346110, upload-time = "2025-11-09T20:49:21.817Z" }, + { url = "https://files.pythonhosted.org/packages/2e/30/7687e4f87086829955013ca12a9233523349767f69653ebc27036313def9/jiter-0.13.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0a2bd69fc1d902e89925fc34d1da51b2128019423d7b339a45d9e99c894e0663", size = 307958, upload-time = "2026-02-02T12:35:57.165Z" }, + { url = "https://files.pythonhosted.org/packages/c3/27/e57f9a783246ed95481e6749cc5002a8a767a73177a83c63ea71f0528b90/jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f917a04240ef31898182f76a332f508f2cc4b57d2b4d7ad2dbfebbfe167eb505", size = 318597, upload-time = "2026-02-02T12:35:58.591Z" }, + { url = "https://files.pythonhosted.org/packages/cf/52/e5719a60ac5d4d7c5995461a94ad5ef962a37c8bf5b088390e6fad59b2ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e2b199f446d3e82246b4fd9236d7cb502dc2222b18698ba0d986d2fecc6152", size = 348821, upload-time = "2026-02-02T12:36:00.093Z" }, + { url = "https://files.pythonhosted.org/packages/61/db/c1efc32b8ba4c740ab3fc2d037d8753f67685f475e26b9d6536a4322bcdd/jiter-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04670992b576fa65bd056dbac0c39fe8bd67681c380cb2b48efa885711d9d726", size = 364163, upload-time = "2026-02-02T12:36:01.937Z" }, + { url = "https://files.pythonhosted.org/packages/55/8a/fb75556236047c8806995671a18e4a0ad646ed255276f51a20f32dceaeec/jiter-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a1aff1fbdb803a376d4d22a8f63f8e7ccbce0b4890c26cc7af9e501ab339ef0", size = 483709, upload-time = "2026-02-02T12:36:03.41Z" }, + { url = "https://files.pythonhosted.org/packages/7e/16/43512e6ee863875693a8e6f6d532e19d650779d6ba9a81593ae40a9088ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b3fb8c2053acaef8580809ac1d1f7481a0a0bdc012fd7f5d8b18fb696a5a089", size = 370480, upload-time = "2026-02-02T12:36:04.791Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4c/09b93e30e984a187bc8aaa3510e1ec8dcbdcd71ca05d2f56aac0492453aa/jiter-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdaba7d87e66f26a2c45d8cbadcbfc4bf7884182317907baf39cfe9775bb4d93", size = 360735, upload-time = "2026-02-02T12:36:06.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/1b/46c5e349019874ec5dfa508c14c37e29864ea108d376ae26d90bee238cd7/jiter-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b88d649135aca526da172e48083da915ec086b54e8e73a425ba50999468cc08", size = 391814, upload-time = "2026-02-02T12:36:08.368Z" }, + { url = "https://files.pythonhosted.org/packages/15/9e/26184760e85baee7162ad37b7912797d2077718476bf91517641c92b3639/jiter-0.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e404ea551d35438013c64b4f357b0474c7abf9f781c06d44fcaf7a14c69ff9e2", size = 513990, upload-time = "2026-02-02T12:36:09.993Z" }, + { url = "https://files.pythonhosted.org/packages/e9/34/2c9355247d6debad57a0a15e76ab1566ab799388042743656e566b3b7de1/jiter-0.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f4748aad1b4a93c8bdd70f604d0f748cdc0e8744c5547798acfa52f10e79228", size = 548021, upload-time = "2026-02-02T12:36:11.376Z" }, + { url = "https://files.pythonhosted.org/packages/ac/4a/9f2c23255d04a834398b9c2e0e665382116911dc4d06b795710503cdad25/jiter-0.13.0-cp312-cp312-win32.whl", hash = "sha256:0bf670e3b1445fc4d31612199f1744f67f889ee1bbae703c4b54dc097e5dd394", size = 203024, upload-time = "2026-02-02T12:36:12.682Z" }, + { url = "https://files.pythonhosted.org/packages/09/ee/f0ae675a957ae5a8f160be3e87acea6b11dc7b89f6b7ab057e77b2d2b13a/jiter-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:15db60e121e11fe186c0b15236bd5d18381b9ddacdcf4e659feb96fc6c969c92", size = 205424, upload-time = "2026-02-02T12:36:13.93Z" }, + { url = "https://files.pythonhosted.org/packages/1b/02/ae611edf913d3cbf02c97cdb90374af2082c48d7190d74c1111dde08bcdd/jiter-0.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:41f92313d17989102f3cb5dd533a02787cdb99454d494344b0361355da52fcb9", size = 186818, upload-time = "2026-02-02T12:36:15.308Z" }, + { url = "https://files.pythonhosted.org/packages/91/9c/7ee5a6ff4b9991e1a45263bfc46731634c4a2bde27dfda6c8251df2d958c/jiter-0.13.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1f8a55b848cbabf97d861495cd65f1e5c590246fabca8b48e1747c4dfc8f85bf", size = 306897, upload-time = "2026-02-02T12:36:16.748Z" }, + { url = "https://files.pythonhosted.org/packages/7c/02/be5b870d1d2be5dd6a91bdfb90f248fbb7dcbd21338f092c6b89817c3dbf/jiter-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f556aa591c00f2c45eb1b89f68f52441a016034d18b65da60e2d2875bbbf344a", size = 317507, upload-time = "2026-02-02T12:36:18.351Z" }, + { url = "https://files.pythonhosted.org/packages/da/92/b25d2ec333615f5f284f3a4024f7ce68cfa0604c322c6808b2344c7f5d2b/jiter-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7e1d61da332ec412350463891923f960c3073cf1aae93b538f0bb4c8cd46efb", size = 350560, upload-time = "2026-02-02T12:36:19.746Z" }, + { url = "https://files.pythonhosted.org/packages/be/ec/74dcb99fef0aca9fbe56b303bf79f6bd839010cb18ad41000bf6cc71eec0/jiter-0.13.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3097d665a27bc96fd9bbf7f86178037db139f319f785e4757ce7ccbf390db6c2", size = 363232, upload-time = "2026-02-02T12:36:21.243Z" }, + { url = "https://files.pythonhosted.org/packages/1b/37/f17375e0bb2f6a812d4dd92d7616e41917f740f3e71343627da9db2824ce/jiter-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d01ecc3a8cbdb6f25a37bd500510550b64ddf9f7d64a107d92f3ccb25035d0f", size = 483727, upload-time = "2026-02-02T12:36:22.688Z" }, + { url = "https://files.pythonhosted.org/packages/77/d2/a71160a5ae1a1e66c1395b37ef77da67513b0adba73b993a27fbe47eb048/jiter-0.13.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed9bbc30f5d60a3bdf63ae76beb3f9db280d7f195dfcfa61af792d6ce912d159", size = 370799, upload-time = "2026-02-02T12:36:24.106Z" }, + { url = "https://files.pythonhosted.org/packages/01/99/ed5e478ff0eb4e8aa5fd998f9d69603c9fd3f32de3bd16c2b1194f68361c/jiter-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fbafb6e88256f4454de33c1f40203d09fc33ed19162a68b3b257b29ca7f663", size = 359120, upload-time = "2026-02-02T12:36:25.519Z" }, + { url = "https://files.pythonhosted.org/packages/16/be/7ffd08203277a813f732ba897352797fa9493faf8dc7995b31f3d9cb9488/jiter-0.13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5467696f6b827f1116556cb0db620440380434591e93ecee7fd14d1a491b6daa", size = 390664, upload-time = "2026-02-02T12:36:26.866Z" }, + { url = "https://files.pythonhosted.org/packages/d1/84/e0787856196d6d346264d6dcccb01f741e5f0bd014c1d9a2ebe149caf4f3/jiter-0.13.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2d08c9475d48b92892583df9da592a0e2ac49bcd41fae1fec4f39ba6cf107820", size = 513543, upload-time = "2026-02-02T12:36:28.217Z" }, + { url = "https://files.pythonhosted.org/packages/65/50/ecbd258181c4313cf79bca6c88fb63207d04d5bf5e4f65174114d072aa55/jiter-0.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:aed40e099404721d7fcaf5b89bd3b4568a4666358bcac7b6b15c09fb6252ab68", size = 547262, upload-time = "2026-02-02T12:36:29.678Z" }, + { url = "https://files.pythonhosted.org/packages/27/da/68f38d12e7111d2016cd198161b36e1f042bd115c169255bcb7ec823a3bf/jiter-0.13.0-cp313-cp313-win32.whl", hash = "sha256:36ebfbcffafb146d0e6ffb3e74d51e03d9c35ce7c625c8066cdbfc7b953bdc72", size = 200630, upload-time = "2026-02-02T12:36:31.808Z" }, + { url = "https://files.pythonhosted.org/packages/25/65/3bd1a972c9a08ecd22eb3b08a95d1941ebe6938aea620c246cf426ae09c2/jiter-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:8d76029f077379374cf0dbc78dbe45b38dec4a2eb78b08b5194ce836b2517afc", size = 202602, upload-time = "2026-02-02T12:36:33.679Z" }, + { url = "https://files.pythonhosted.org/packages/15/fe/13bd3678a311aa67686bb303654792c48206a112068f8b0b21426eb6851e/jiter-0.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:bb7613e1a427cfcb6ea4544f9ac566b93d5bf67e0d48c787eca673ff9c9dff2b", size = 185939, upload-time = "2026-02-02T12:36:35.065Z" }, + { url = "https://files.pythonhosted.org/packages/49/19/a929ec002ad3228bc97ca01dbb14f7632fffdc84a95ec92ceaf4145688ae/jiter-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fa476ab5dd49f3bf3a168e05f89358c75a17608dbabb080ef65f96b27c19ab10", size = 316616, upload-time = "2026-02-02T12:36:36.579Z" }, + { url = "https://files.pythonhosted.org/packages/52/56/d19a9a194afa37c1728831e5fb81b7722c3de18a3109e8f282bfc23e587a/jiter-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade8cb6ff5632a62b7dbd4757d8c5573f7a2e9ae285d6b5b841707d8363205ef", size = 346850, upload-time = "2026-02-02T12:36:38.058Z" }, + { url = "https://files.pythonhosted.org/packages/36/4a/94e831c6bf287754a8a019cb966ed39ff8be6ab78cadecf08df3bb02d505/jiter-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9950290340acc1adaded363edd94baebcee7dabdfa8bee4790794cd5cfad2af6", size = 358551, upload-time = "2026-02-02T12:36:39.417Z" }, + { url = "https://files.pythonhosted.org/packages/a2/ec/a4c72c822695fa80e55d2b4142b73f0012035d9fcf90eccc56bc060db37c/jiter-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2b4972c6df33731aac0742b64fd0d18e0a69bc7d6e03108ce7d40c85fd9e3e6d", size = 201950, upload-time = "2026-02-02T12:36:40.791Z" }, + { url = "https://files.pythonhosted.org/packages/b6/00/393553ec27b824fbc29047e9c7cd4a3951d7fbe4a76743f17e44034fa4e4/jiter-0.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:701a1e77d1e593c1b435315ff625fd071f0998c5f02792038a5ca98899261b7d", size = 185852, upload-time = "2026-02-02T12:36:42.077Z" }, + { url = "https://files.pythonhosted.org/packages/80/60/e50fa45dd7e2eae049f0ce964663849e897300433921198aef94b6ffa23a/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:3d744a6061afba08dd7ae375dcde870cffb14429b7477e10f67e9e6d68772a0a", size = 305169, upload-time = "2026-02-02T12:37:50.376Z" }, + { url = "https://files.pythonhosted.org/packages/d2/73/a009f41c5eed71c49bec53036c4b33555afcdee70682a18c6f66e396c039/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:ff732bd0a0e778f43d5009840f20b935e79087b4dc65bd36f1cd0f9b04b8ff7f", size = 303808, upload-time = "2026-02-02T12:37:52.092Z" }, + { url = "https://files.pythonhosted.org/packages/c4/10/528b439290763bff3d939268085d03382471b442f212dca4ff5f12802d43/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab44b178f7981fcaea7e0a5df20e773c663d06ffda0198f1a524e91b2fde7e59", size = 337384, upload-time = "2026-02-02T12:37:53.582Z" }, + { url = "https://files.pythonhosted.org/packages/67/8a/a342b2f0251f3dac4ca17618265d93bf244a2a4d089126e81e4c1056ac50/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb00b6d26db67a05fe3e12c76edc75f32077fb51deed13822dc648fa373bc19", size = 343768, upload-time = "2026-02-02T12:37:55.055Z" }, ] [[package]] @@ -2223,7 +2217,7 @@ wheels = [ [[package]] name = "nbconvert" -version = "7.16.6" +version = "7.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, @@ -2241,9 +2235,9 @@ dependencies = [ { name = "pygments" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } +sdist = { url = "https://files.pythonhosted.org/packages/38/47/81f886b699450d0569f7bc551df2b1673d18df7ff25cc0c21ca36ed8a5ff/nbconvert-7.17.0.tar.gz", hash = "sha256:1b2696f1b5be12309f6c7d707c24af604b87dfaf6d950794c7b07acab96dda78", size = 862855, upload-time = "2026-01-29T16:37:48.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4b/8d5f796a792f8a25f6925a96032f098789f448571eb92011df1ae59e8ea8/nbconvert-7.17.0-py3-none-any.whl", hash = "sha256:4f99a63b337b9a23504347afdab24a11faa7d86b405e5c8f9881cd313336d518", size = 261510, upload-time = "2026-01-29T16:37:46.322Z" }, ] [[package]] @@ -2300,42 +2294,42 @@ wheels = [ [[package]] name = "numpy" -version = "2.4.1" +version = "2.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/24/62/ae72ff66c0f1fd959925b4c11f8c2dea61f47f6acaea75a08512cdfe3fed/numpy-2.4.1.tar.gz", hash = "sha256:a1ceafc5042451a858231588a104093474c6a5c57dcc724841f5c888d237d690", size = 20721320, upload-time = "2026-01-10T06:44:59.619Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/7f/ec53e32bf10c813604edf07a3682616bd931d026fcde7b6d13195dfb684a/numpy-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d3703409aac693fa82c0aee023a1ae06a6e9d065dba10f5e8e80f642f1e9d0a2", size = 16656888, upload-time = "2026-01-10T06:42:40.913Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e0/1f9585d7dae8f14864e948fd7fa86c6cb72dee2676ca2748e63b1c5acfe0/numpy-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7211b95ca365519d3596a1d8688a95874cc94219d417504d9ecb2df99fa7bfa8", size = 12373956, upload-time = "2026-01-10T06:42:43.091Z" }, - { url = "https://files.pythonhosted.org/packages/8e/43/9762e88909ff2326f5e7536fa8cb3c49fb03a7d92705f23e6e7f553d9cb3/numpy-2.4.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5adf01965456a664fc727ed69cc71848f28d063217c63e1a0e200a118d5eec9a", size = 5202567, upload-time = "2026-01-10T06:42:45.107Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ee/34b7930eb61e79feb4478800a4b95b46566969d837546aa7c034c742ef98/numpy-2.4.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:26f0bcd9c79a00e339565b303badc74d3ea2bd6d52191eeca5f95936cad107d0", size = 6549459, upload-time = "2026-01-10T06:42:48.152Z" }, - { url = "https://files.pythonhosted.org/packages/79/e3/5f115fae982565771be994867c89bcd8d7208dbfe9469185497d70de5ddf/numpy-2.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0093e85df2960d7e4049664b26afc58b03236e967fb942354deef3208857a04c", size = 14404859, upload-time = "2026-01-10T06:42:49.947Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7d/9c8a781c88933725445a859cac5d01b5871588a15969ee6aeb618ba99eee/numpy-2.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad270f438cbdd402c364980317fb6b117d9ec5e226fff5b4148dd9aa9fc6e02", size = 16371419, upload-time = "2026-01-10T06:42:52.409Z" }, - { url = "https://files.pythonhosted.org/packages/a6/d2/8aa084818554543f17cf4162c42f162acbd3bb42688aefdba6628a859f77/numpy-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:297c72b1b98100c2e8f873d5d35fb551fce7040ade83d67dd51d38c8d42a2162", size = 16182131, upload-time = "2026-01-10T06:42:54.694Z" }, - { url = "https://files.pythonhosted.org/packages/60/db/0425216684297c58a8df35f3284ef56ec4a043e6d283f8a59c53562caf1b/numpy-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cf6470d91d34bf669f61d515499859fa7a4c2f7c36434afb70e82df7217933f9", size = 18295342, upload-time = "2026-01-10T06:42:56.991Z" }, - { url = "https://files.pythonhosted.org/packages/31/4c/14cb9d86240bd8c386c881bafbe43f001284b7cce3bc01623ac9475da163/numpy-2.4.1-cp312-cp312-win32.whl", hash = "sha256:b6bcf39112e956594b3331316d90c90c90fb961e39696bda97b89462f5f3943f", size = 5959015, upload-time = "2026-01-10T06:42:59.631Z" }, - { url = "https://files.pythonhosted.org/packages/51/cf/52a703dbeb0c65807540d29699fef5fda073434ff61846a564d5c296420f/numpy-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:e1a27bb1b2dee45a2a53f5ca6ff2d1a7f135287883a1689e930d44d1ff296c87", size = 12310730, upload-time = "2026-01-10T06:43:01.627Z" }, - { url = "https://files.pythonhosted.org/packages/69/80/a828b2d0ade5e74a9fe0f4e0a17c30fdc26232ad2bc8c9f8b3197cf7cf18/numpy-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:0e6e8f9d9ecf95399982019c01223dc130542960a12edfa8edd1122dfa66a8a8", size = 10312166, upload-time = "2026-01-10T06:43:03.673Z" }, - { url = "https://files.pythonhosted.org/packages/04/68/732d4b7811c00775f3bd522a21e8dd5a23f77eb11acdeb663e4a4ebf0ef4/numpy-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d797454e37570cfd61143b73b8debd623c3c0952959adb817dd310a483d58a1b", size = 16652495, upload-time = "2026-01-10T06:43:06.283Z" }, - { url = "https://files.pythonhosted.org/packages/20/ca/857722353421a27f1465652b2c66813eeeccea9d76d5f7b74b99f298e60e/numpy-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82c55962006156aeef1629b953fd359064aa47e4d82cfc8e67f0918f7da3344f", size = 12368657, upload-time = "2026-01-10T06:43:09.094Z" }, - { url = "https://files.pythonhosted.org/packages/81/0d/2377c917513449cc6240031a79d30eb9a163d32a91e79e0da47c43f2c0c8/numpy-2.4.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:71abbea030f2cfc3092a0ff9f8c8fdefdc5e0bf7d9d9c99663538bb0ecdac0b9", size = 5197256, upload-time = "2026-01-10T06:43:13.634Z" }, - { url = "https://files.pythonhosted.org/packages/17/39/569452228de3f5de9064ac75137082c6214be1f5c532016549a7923ab4b5/numpy-2.4.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5b55aa56165b17aaf15520beb9cbd33c9039810e0d9643dd4379e44294c7303e", size = 6545212, upload-time = "2026-01-10T06:43:15.661Z" }, - { url = "https://files.pythonhosted.org/packages/8c/a4/77333f4d1e4dac4395385482557aeecf4826e6ff517e32ca48e1dafbe42a/numpy-2.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0faba4a331195bfa96f93dd9dfaa10b2c7aa8cda3a02b7fd635e588fe821bf5", size = 14402871, upload-time = "2026-01-10T06:43:17.324Z" }, - { url = "https://files.pythonhosted.org/packages/ba/87/d341e519956273b39d8d47969dd1eaa1af740615394fe67d06f1efa68773/numpy-2.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e3087f53e2b4428766b54932644d148613c5a595150533ae7f00dab2f319a8", size = 16359305, upload-time = "2026-01-10T06:43:19.376Z" }, - { url = "https://files.pythonhosted.org/packages/32/91/789132c6666288eaa20ae8066bb99eba1939362e8f1a534949a215246e97/numpy-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:49e792ec351315e16da54b543db06ca8a86985ab682602d90c60ef4ff4db2a9c", size = 16181909, upload-time = "2026-01-10T06:43:21.808Z" }, - { url = "https://files.pythonhosted.org/packages/cf/b8/090b8bd27b82a844bb22ff8fdf7935cb1980b48d6e439ae116f53cdc2143/numpy-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:79e9e06c4c2379db47f3f6fc7a8652e7498251789bf8ff5bd43bf478ef314ca2", size = 18284380, upload-time = "2026-01-10T06:43:23.957Z" }, - { url = "https://files.pythonhosted.org/packages/67/78/722b62bd31842ff029412271556a1a27a98f45359dea78b1548a3a9996aa/numpy-2.4.1-cp313-cp313-win32.whl", hash = "sha256:3d1a100e48cb266090a031397863ff8a30050ceefd798f686ff92c67a486753d", size = 5957089, upload-time = "2026-01-10T06:43:27.535Z" }, - { url = "https://files.pythonhosted.org/packages/da/a6/cf32198b0b6e18d4fbfa9a21a992a7fca535b9bb2b0cdd217d4a3445b5ca/numpy-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:92a0e65272fd60bfa0d9278e0484c2f52fe03b97aedc02b357f33fe752c52ffb", size = 12307230, upload-time = "2026-01-10T06:43:29.298Z" }, - { url = "https://files.pythonhosted.org/packages/44/6c/534d692bfb7d0afe30611320c5fb713659dcb5104d7cc182aff2aea092f5/numpy-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:20d4649c773f66cc2fc36f663e091f57c3b7655f936a4c681b4250855d1da8f5", size = 10313125, upload-time = "2026-01-10T06:43:31.782Z" }, - { url = "https://files.pythonhosted.org/packages/da/a1/354583ac5c4caa566de6ddfbc42744409b515039e085fab6e0ff942e0df5/numpy-2.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f93bc6892fe7b0663e5ffa83b61aab510aacffd58c16e012bb9352d489d90cb7", size = 12496156, upload-time = "2026-01-10T06:43:34.237Z" }, - { url = "https://files.pythonhosted.org/packages/51/b0/42807c6e8cce58c00127b1dc24d365305189991f2a7917aa694a109c8d7d/numpy-2.4.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:178de8f87948163d98a4c9ab5bee4ce6519ca918926ec8df195af582de28544d", size = 5324663, upload-time = "2026-01-10T06:43:36.211Z" }, - { url = "https://files.pythonhosted.org/packages/fe/55/7a621694010d92375ed82f312b2f28017694ed784775269115323e37f5e2/numpy-2.4.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:98b35775e03ab7f868908b524fc0a84d38932d8daf7b7e1c3c3a1b6c7a2c9f15", size = 6645224, upload-time = "2026-01-10T06:43:37.884Z" }, - { url = "https://files.pythonhosted.org/packages/50/96/9fa8635ed9d7c847d87e30c834f7109fac5e88549d79ef3324ab5c20919f/numpy-2.4.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:941c2a93313d030f219f3a71fd3d91a728b82979a5e8034eb2e60d394a2b83f9", size = 14462352, upload-time = "2026-01-10T06:43:39.479Z" }, - { url = "https://files.pythonhosted.org/packages/03/d1/8cf62d8bb2062da4fb82dd5d49e47c923f9c0738032f054e0a75342faba7/numpy-2.4.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:529050522e983e00a6c1c6b67411083630de8b57f65e853d7b03d9281b8694d2", size = 16407279, upload-time = "2026-01-10T06:43:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/86/1c/95c86e17c6b0b31ce6ef219da00f71113b220bcb14938c8d9a05cee0ff53/numpy-2.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2302dc0224c1cbc49bb94f7064f3f923a971bfae45c33870dcbff63a2a550505", size = 16248316, upload-time = "2026-01-10T06:43:44.121Z" }, - { url = "https://files.pythonhosted.org/packages/30/b4/e7f5ff8697274c9d0fa82398b6a372a27e5cef069b37df6355ccb1f1db1a/numpy-2.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9171a42fcad32dcf3fa86f0a4faa5e9f8facefdb276f54b8b390d90447cff4e2", size = 18329884, upload-time = "2026-01-10T06:43:46.613Z" }, - { url = "https://files.pythonhosted.org/packages/37/a4/b073f3e9d77f9aec8debe8ca7f9f6a09e888ad1ba7488f0c3b36a94c03ac/numpy-2.4.1-cp313-cp313t-win32.whl", hash = "sha256:382ad67d99ef49024f11d1ce5dcb5ad8432446e4246a4b014418ba3a1175a1f4", size = 6081138, upload-time = "2026-01-10T06:43:48.854Z" }, - { url = "https://files.pythonhosted.org/packages/16/16/af42337b53844e67752a092481ab869c0523bc95c4e5c98e4dac4e9581ac/numpy-2.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:62fea415f83ad8fdb6c20840578e5fbaf5ddd65e0ec6c3c47eda0f69da172510", size = 12447478, upload-time = "2026-01-10T06:43:50.476Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f8/fa85b2eac68ec631d0b631abc448552cb17d39afd17ec53dcbcc3537681a/numpy-2.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a7870e8c5fc11aef57d6fea4b4085e537a3a60ad2cdd14322ed531fdca68d261", size = 10382981, upload-time = "2026-01-10T06:43:52.575Z" }, + { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, + { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, + { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, + { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, + { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, + { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, + { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, + { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, + { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, + { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, + { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, + { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, + { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, + { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, + { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, + { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, + { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, + { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, + { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, + { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, + { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, + { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, + { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, + { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, + { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, + { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, + { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, + { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, ] [[package]] @@ -2349,7 +2343,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/97/73/8ade73f6749177003 [[package]] name = "openai" -version = "2.15.0" +version = "2.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2361,9 +2355,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/f4/4690ecb5d70023ce6bfcfeabfe717020f654bde59a775058ec6ac4692463/openai-2.15.0.tar.gz", hash = "sha256:42eb8cbb407d84770633f31bf727d4ffb4138711c670565a41663d9439174fba", size = 627383, upload-time = "2026-01-09T22:10:08.603Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/6c/e4c964fcf1d527fdf4739e7cc940c60075a4114d50d03871d5d5b1e13a88/openai-2.16.0.tar.gz", hash = "sha256:42eaa22ca0d8ded4367a77374104d7a2feafee5bd60a107c3c11b5243a11cd12", size = 629649, upload-time = "2026-01-27T23:28:02.579Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/df/c306f7375d42bafb379934c2df4c2fa3964656c8c782bac75ee10c102818/openai-2.15.0-py3-none-any.whl", hash = "sha256:6ae23b932cd7230f7244e52954daa6602716d6b9bf235401a107af731baea6c3", size = 1067879, upload-time = "2026-01-09T22:10:06.446Z" }, + { url = "https://files.pythonhosted.org/packages/16/83/0315bf2cfd75a2ce8a7e54188e9456c60cec6c0cf66728ed07bd9859ff26/openai-2.16.0-py3-none-any.whl", hash = "sha256:5f46643a8f42899a84e80c38838135d7038e7718333ce61396994f887b09a59b", size = 1068612, upload-time = "2026-01-27T23:28:00.356Z" }, ] [[package]] @@ -2449,40 +2443,40 @@ wheels = [ [[package]] name = "orjson" -version = "3.11.5" +version = "3.11.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/b8/333fdb27840f3bf04022d21b654a35f58e15407183aeb16f3b41aa053446/orjson-3.11.5.tar.gz", hash = "sha256:82393ab47b4fe44ffd0a7659fa9cfaacc717eb617c93cde83795f14af5c2e9d5", size = 5972347, upload-time = "2025-12-06T15:55:39.458Z" } +sdist = { url = "https://files.pythonhosted.org/packages/53/45/b268004f745ede84e5798b48ee12b05129d19235d0e15267aa57dcdb400b/orjson-3.11.7.tar.gz", hash = "sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49", size = 6144992, upload-time = "2026-02-02T15:38:49.29Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/a4/8052a029029b096a78955eadd68ab594ce2197e24ec50e6b6d2ab3f4e33b/orjson-3.11.5-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:334e5b4bff9ad101237c2d799d9fd45737752929753bf4faf4b207335a416b7d", size = 245347, upload-time = "2025-12-06T15:54:22.061Z" }, - { url = "https://files.pythonhosted.org/packages/64/67/574a7732bd9d9d79ac620c8790b4cfe0717a3d5a6eb2b539e6e8995e24a0/orjson-3.11.5-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:ff770589960a86eae279f5d8aa536196ebda8273a2a07db2a54e82b93bc86626", size = 129435, upload-time = "2025-12-06T15:54:23.615Z" }, - { url = "https://files.pythonhosted.org/packages/52/8d/544e77d7a29d90cf4d9eecd0ae801c688e7f3d1adfa2ebae5e1e94d38ab9/orjson-3.11.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed24250e55efbcb0b35bed7caaec8cedf858ab2f9f2201f17b8938c618c8ca6f", size = 132074, upload-time = "2025-12-06T15:54:24.694Z" }, - { url = "https://files.pythonhosted.org/packages/6e/57/b9f5b5b6fbff9c26f77e785baf56ae8460ef74acdb3eae4931c25b8f5ba9/orjson-3.11.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a66d7769e98a08a12a139049aac2f0ca3adae989817f8c43337455fbc7669b85", size = 130520, upload-time = "2025-12-06T15:54:26.185Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6d/d34970bf9eb33f9ec7c979a262cad86076814859e54eb9a059a52f6dc13d/orjson-3.11.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86cfc555bfd5794d24c6a1903e558b50644e5e68e6471d66502ce5cb5fdef3f9", size = 136209, upload-time = "2025-12-06T15:54:27.264Z" }, - { url = "https://files.pythonhosted.org/packages/e7/39/bc373b63cc0e117a105ea12e57280f83ae52fdee426890d57412432d63b3/orjson-3.11.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a230065027bc2a025e944f9d4714976a81e7ecfa940923283bca7bbc1f10f626", size = 139837, upload-time = "2025-12-06T15:54:28.75Z" }, - { url = "https://files.pythonhosted.org/packages/cb/aa/7c4818c8d7d324da220f4f1af55c343956003aa4d1ce1857bdc1d396ba69/orjson-3.11.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b29d36b60e606df01959c4b982729c8845c69d1963f88686608be9ced96dbfaa", size = 137307, upload-time = "2025-12-06T15:54:29.856Z" }, - { url = "https://files.pythonhosted.org/packages/46/bf/0993b5a056759ba65145effe3a79dd5a939d4a070eaa5da2ee3180fbb13f/orjson-3.11.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c74099c6b230d4261fdc3169d50efc09abf38ace1a42ea2f9994b1d79153d477", size = 139020, upload-time = "2025-12-06T15:54:31.024Z" }, - { url = "https://files.pythonhosted.org/packages/65/e8/83a6c95db3039e504eda60fc388f9faedbb4f6472f5aba7084e06552d9aa/orjson-3.11.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e697d06ad57dd0c7a737771d470eedc18e68dfdefcdd3b7de7f33dfda5b6212e", size = 141099, upload-time = "2025-12-06T15:54:32.196Z" }, - { url = "https://files.pythonhosted.org/packages/b9/b4/24fdc024abfce31c2f6812973b0a693688037ece5dc64b7a60c1ce69e2f2/orjson-3.11.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e08ca8a6c851e95aaecc32bc44a5aa75d0ad26af8cdac7c77e4ed93acf3d5b69", size = 413540, upload-time = "2025-12-06T15:54:33.361Z" }, - { url = "https://files.pythonhosted.org/packages/d9/37/01c0ec95d55ed0c11e4cae3e10427e479bba40c77312b63e1f9665e0737d/orjson-3.11.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e8b5f96c05fce7d0218df3fdfeb962d6b8cfff7e3e20264306b46dd8b217c0f3", size = 151530, upload-time = "2025-12-06T15:54:34.6Z" }, - { url = "https://files.pythonhosted.org/packages/f9/d4/f9ebc57182705bb4bbe63f5bbe14af43722a2533135e1d2fb7affa0c355d/orjson-3.11.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ddbfdb5099b3e6ba6d6ea818f61997bb66de14b411357d24c4612cf1ebad08ca", size = 141863, upload-time = "2025-12-06T15:54:35.801Z" }, - { url = "https://files.pythonhosted.org/packages/0d/04/02102b8d19fdcb009d72d622bb5781e8f3fae1646bf3e18c53d1bc8115b5/orjson-3.11.5-cp312-cp312-win32.whl", hash = "sha256:9172578c4eb09dbfcf1657d43198de59b6cef4054de385365060ed50c458ac98", size = 135255, upload-time = "2025-12-06T15:54:37.209Z" }, - { url = "https://files.pythonhosted.org/packages/d4/fb/f05646c43d5450492cb387de5549f6de90a71001682c17882d9f66476af5/orjson-3.11.5-cp312-cp312-win_amd64.whl", hash = "sha256:2b91126e7b470ff2e75746f6f6ee32b9ab67b7a93c8ba1d15d3a0caaf16ec875", size = 133252, upload-time = "2025-12-06T15:54:38.401Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a6/7b8c0b26ba18c793533ac1cd145e131e46fcf43952aa94c109b5b913c1f0/orjson-3.11.5-cp312-cp312-win_arm64.whl", hash = "sha256:acbc5fac7e06777555b0722b8ad5f574739e99ffe99467ed63da98f97f9ca0fe", size = 126777, upload-time = "2025-12-06T15:54:39.515Z" }, - { url = "https://files.pythonhosted.org/packages/10/43/61a77040ce59f1569edf38f0b9faadc90c8cf7e9bec2e0df51d0132c6bb7/orjson-3.11.5-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3b01799262081a4c47c035dd77c1301d40f568f77cc7ec1bb7db5d63b0a01629", size = 245271, upload-time = "2025-12-06T15:54:40.878Z" }, - { url = "https://files.pythonhosted.org/packages/55/f9/0f79be617388227866d50edd2fd320cb8fb94dc1501184bb1620981a0aba/orjson-3.11.5-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:61de247948108484779f57a9f406e4c84d636fa5a59e411e6352484985e8a7c3", size = 129422, upload-time = "2025-12-06T15:54:42.403Z" }, - { url = "https://files.pythonhosted.org/packages/77/42/f1bf1549b432d4a78bfa95735b79b5dac75b65b5bb815bba86ad406ead0a/orjson-3.11.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:894aea2e63d4f24a7f04a1908307c738d0dce992e9249e744b8f4e8dd9197f39", size = 132060, upload-time = "2025-12-06T15:54:43.531Z" }, - { url = "https://files.pythonhosted.org/packages/25/49/825aa6b929f1a6ed244c78acd7b22c1481fd7e5fda047dc8bf4c1a807eb6/orjson-3.11.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ddc21521598dbe369d83d4d40338e23d4101dad21dae0e79fa20465dbace019f", size = 130391, upload-time = "2025-12-06T15:54:45.059Z" }, - { url = "https://files.pythonhosted.org/packages/42/ec/de55391858b49e16e1aa8f0bbbb7e5997b7345d8e984a2dec3746d13065b/orjson-3.11.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cce16ae2f5fb2c53c3eafdd1706cb7b6530a67cc1c17abe8ec747f5cd7c0c51", size = 135964, upload-time = "2025-12-06T15:54:46.576Z" }, - { url = "https://files.pythonhosted.org/packages/1c/40/820bc63121d2d28818556a2d0a09384a9f0262407cf9fa305e091a8048df/orjson-3.11.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e46c762d9f0e1cfb4ccc8515de7f349abbc95b59cb5a2bd68df5973fdef913f8", size = 139817, upload-time = "2025-12-06T15:54:48.084Z" }, - { url = "https://files.pythonhosted.org/packages/09/c7/3a445ca9a84a0d59d26365fd8898ff52bdfcdcb825bcc6519830371d2364/orjson-3.11.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7345c759276b798ccd6d77a87136029e71e66a8bbf2d2755cbdde1d82e78706", size = 137336, upload-time = "2025-12-06T15:54:49.426Z" }, - { url = "https://files.pythonhosted.org/packages/9a/b3/dc0d3771f2e5d1f13368f56b339c6782f955c6a20b50465a91acb79fe961/orjson-3.11.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75bc2e59e6a2ac1dd28901d07115abdebc4563b5b07dd612bf64260a201b1c7f", size = 138993, upload-time = "2025-12-06T15:54:50.939Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a2/65267e959de6abe23444659b6e19c888f242bf7725ff927e2292776f6b89/orjson-3.11.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:54aae9b654554c3b4edd61896b978568c6daa16af96fa4681c9b5babd469f863", size = 141070, upload-time = "2025-12-06T15:54:52.414Z" }, - { url = "https://files.pythonhosted.org/packages/63/c9/da44a321b288727a322c6ab17e1754195708786a04f4f9d2220a5076a649/orjson-3.11.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4bdd8d164a871c4ec773f9de0f6fe8769c2d6727879c37a9666ba4183b7f8228", size = 413505, upload-time = "2025-12-06T15:54:53.67Z" }, - { url = "https://files.pythonhosted.org/packages/7f/17/68dc14fa7000eefb3d4d6d7326a190c99bb65e319f02747ef3ebf2452f12/orjson-3.11.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a261fef929bcf98a60713bf5e95ad067cea16ae345d9a35034e73c3990e927d2", size = 151342, upload-time = "2025-12-06T15:54:55.113Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c5/ccee774b67225bed630a57478529fc026eda33d94fe4c0eac8fe58d4aa52/orjson-3.11.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c028a394c766693c5c9909dec76b24f37e6a1b91999e8d0c0d5feecbe93c3e05", size = 141823, upload-time = "2025-12-06T15:54:56.331Z" }, - { url = "https://files.pythonhosted.org/packages/67/80/5d00e4155d0cd7390ae2087130637671da713959bb558db9bac5e6f6b042/orjson-3.11.5-cp313-cp313-win32.whl", hash = "sha256:2cc79aaad1dfabe1bd2d50ee09814a1253164b3da4c00a78c458d82d04b3bdef", size = 135236, upload-time = "2025-12-06T15:54:57.507Z" }, - { url = "https://files.pythonhosted.org/packages/95/fe/792cc06a84808dbdc20ac6eab6811c53091b42f8e51ecebf14b540e9cfe4/orjson-3.11.5-cp313-cp313-win_amd64.whl", hash = "sha256:ff7877d376add4e16b274e35a3f58b7f37b362abf4aa31863dadacdd20e3a583", size = 133167, upload-time = "2025-12-06T15:54:58.71Z" }, - { url = "https://files.pythonhosted.org/packages/46/2c/d158bd8b50e3b1cfdcf406a7e463f6ffe3f0d167b99634717acdaf5e299f/orjson-3.11.5-cp313-cp313-win_arm64.whl", hash = "sha256:59ac72ea775c88b163ba8d21b0177628bd015c5dd060647bbab6e22da3aad287", size = 126712, upload-time = "2025-12-06T15:54:59.892Z" }, + { url = "https://files.pythonhosted.org/packages/80/bf/76f4f1665f6983385938f0e2a5d7efa12a58171b8456c252f3bae8a4cf75/orjson-3.11.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f", size = 228545, upload-time = "2026-02-02T15:37:46.376Z" }, + { url = "https://files.pythonhosted.org/packages/79/53/6c72c002cb13b5a978a068add59b25a8bdf2800ac1c9c8ecdb26d6d97064/orjson-3.11.7-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b", size = 125224, upload-time = "2026-02-02T15:37:47.697Z" }, + { url = "https://files.pythonhosted.org/packages/2c/83/10e48852865e5dd151bdfe652c06f7da484578ed02c5fca938e3632cb0b8/orjson-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a", size = 128154, upload-time = "2026-02-02T15:37:48.954Z" }, + { url = "https://files.pythonhosted.org/packages/6e/52/a66e22a2b9abaa374b4a081d410edab6d1e30024707b87eab7c734afe28d/orjson-3.11.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10", size = 123548, upload-time = "2026-02-02T15:37:50.187Z" }, + { url = "https://files.pythonhosted.org/packages/de/38/605d371417021359f4910c496f764c48ceb8997605f8c25bf1dfe58c0ebe/orjson-3.11.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa", size = 129000, upload-time = "2026-02-02T15:37:51.426Z" }, + { url = "https://files.pythonhosted.org/packages/44/98/af32e842b0ffd2335c89714d48ca4e3917b42f5d6ee5537832e069a4b3ac/orjson-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8", size = 141686, upload-time = "2026-02-02T15:37:52.607Z" }, + { url = "https://files.pythonhosted.org/packages/96/0b/fc793858dfa54be6feee940c1463370ece34b3c39c1ca0aa3845f5ba9892/orjson-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f", size = 130812, upload-time = "2026-02-02T15:37:53.944Z" }, + { url = "https://files.pythonhosted.org/packages/dc/91/98a52415059db3f374757d0b7f0f16e3b5cd5976c90d1c2b56acaea039e6/orjson-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad", size = 133440, upload-time = "2026-02-02T15:37:55.615Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b6/cb540117bda61791f46381f8c26c8f93e802892830a6055748d3bb1925ab/orjson-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867", size = 138386, upload-time = "2026-02-02T15:37:56.814Z" }, + { url = "https://files.pythonhosted.org/packages/63/1a/50a3201c334a7f17c231eee5f841342190723794e3b06293f26e7cf87d31/orjson-3.11.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d", size = 408853, upload-time = "2026-02-02T15:37:58.291Z" }, + { url = "https://files.pythonhosted.org/packages/87/cd/8de1c67d0be44fdc22701e5989c0d015a2adf391498ad42c4dc589cd3013/orjson-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab", size = 144130, upload-time = "2026-02-02T15:38:00.163Z" }, + { url = "https://files.pythonhosted.org/packages/0f/fe/d605d700c35dd55f51710d159fc54516a280923cd1b7e47508982fbb387d/orjson-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2", size = 134818, upload-time = "2026-02-02T15:38:01.507Z" }, + { url = "https://files.pythonhosted.org/packages/e4/e4/15ecc67edb3ddb3e2f46ae04475f2d294e8b60c1825fbe28a428b93b3fbd/orjson-3.11.7-cp312-cp312-win32.whl", hash = "sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f", size = 127923, upload-time = "2026-02-02T15:38:02.75Z" }, + { url = "https://files.pythonhosted.org/packages/34/70/2e0855361f76198a3965273048c8e50a9695d88cd75811a5b46444895845/orjson-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74", size = 125007, upload-time = "2026-02-02T15:38:04.032Z" }, + { url = "https://files.pythonhosted.org/packages/68/40/c2051bd19fc467610fed469dc29e43ac65891571138f476834ca192bc290/orjson-3.11.7-cp312-cp312-win_arm64.whl", hash = "sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5", size = 126089, upload-time = "2026-02-02T15:38:05.297Z" }, + { url = "https://files.pythonhosted.org/packages/89/25/6e0e52cac5aab51d7b6dcd257e855e1dec1c2060f6b28566c509b4665f62/orjson-3.11.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733", size = 228390, upload-time = "2026-02-02T15:38:06.8Z" }, + { url = "https://files.pythonhosted.org/packages/a5/29/a77f48d2fc8a05bbc529e5ff481fb43d914f9e383ea2469d4f3d51df3d00/orjson-3.11.7-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4", size = 125189, upload-time = "2026-02-02T15:38:08.181Z" }, + { url = "https://files.pythonhosted.org/packages/89/25/0a16e0729a0e6a1504f9d1a13cdd365f030068aab64cec6958396b9969d7/orjson-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785", size = 128106, upload-time = "2026-02-02T15:38:09.41Z" }, + { url = "https://files.pythonhosted.org/packages/66/da/a2e505469d60666a05ab373f1a6322eb671cb2ba3a0ccfc7d4bc97196787/orjson-3.11.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539", size = 123363, upload-time = "2026-02-02T15:38:10.73Z" }, + { url = "https://files.pythonhosted.org/packages/23/bf/ed73f88396ea35c71b38961734ea4a4746f7ca0768bf28fd551d37e48dd0/orjson-3.11.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1", size = 129007, upload-time = "2026-02-02T15:38:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/73/3c/b05d80716f0225fc9008fbf8ab22841dcc268a626aa550561743714ce3bf/orjson-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1", size = 141667, upload-time = "2026-02-02T15:38:13.398Z" }, + { url = "https://files.pythonhosted.org/packages/61/e8/0be9b0addd9bf86abfc938e97441dcd0375d494594b1c8ad10fe57479617/orjson-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705", size = 130832, upload-time = "2026-02-02T15:38:14.698Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ec/c68e3b9021a31d9ec15a94931db1410136af862955854ed5dd7e7e4f5bff/orjson-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace", size = 133373, upload-time = "2026-02-02T15:38:16.109Z" }, + { url = "https://files.pythonhosted.org/packages/d2/45/f3466739aaafa570cc8e77c6dbb853c48bf56e3b43738020e2661e08b0ac/orjson-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b", size = 138307, upload-time = "2026-02-02T15:38:17.453Z" }, + { url = "https://files.pythonhosted.org/packages/e1/84/9f7f02288da1ffb31405c1be07657afd1eecbcb4b64ee2817b6fe0f785fa/orjson-3.11.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157", size = 408695, upload-time = "2026-02-02T15:38:18.831Z" }, + { url = "https://files.pythonhosted.org/packages/18/07/9dd2f0c0104f1a0295ffbe912bc8d63307a539b900dd9e2c48ef7810d971/orjson-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3", size = 144099, upload-time = "2026-02-02T15:38:20.28Z" }, + { url = "https://files.pythonhosted.org/packages/a5/66/857a8e4a3292e1f7b1b202883bcdeb43a91566cf59a93f97c53b44bd6801/orjson-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223", size = 134806, upload-time = "2026-02-02T15:38:22.186Z" }, + { url = "https://files.pythonhosted.org/packages/0a/5b/6ebcf3defc1aab3a338ca777214966851e92efb1f30dc7fc8285216e6d1b/orjson-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3", size = 127914, upload-time = "2026-02-02T15:38:23.511Z" }, + { url = "https://files.pythonhosted.org/packages/00/04/c6f72daca5092e3117840a1b1e88dfc809cc1470cf0734890d0366b684a1/orjson-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757", size = 124986, upload-time = "2026-02-02T15:38:24.836Z" }, + { url = "https://files.pythonhosted.org/packages/03/ba/077a0f6f1085d6b806937246860fafbd5b17f3919c70ee3f3d8d9c713f38/orjson-3.11.7-cp313-cp313-win_arm64.whl", hash = "sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539", size = 126045, upload-time = "2026-02-02T15:38:26.216Z" }, ] [[package]] @@ -2621,11 +2615,11 @@ wheels = [ [[package]] name = "pip" -version = "25.3" +version = "26.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/6e/74a3f0179a4a73a53d66ce57fdb4de0080a8baa1de0063de206d6167acc2/pip-25.3.tar.gz", hash = "sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343", size = 1803014, upload-time = "2025-10-25T00:55:41.394Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/83/0d7d4e9efe3344b8e2fe25d93be44f64b65364d3c8d7bc6dc90198d5422e/pip-26.0.1.tar.gz", hash = "sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8", size = 1812747, upload-time = "2026-02-05T02:20:18.702Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/3c/d717024885424591d5376220b5e836c2d5293ce2011523c9de23ff7bf068/pip-25.3-py3-none-any.whl", hash = "sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd", size = 1778622, upload-time = "2025-10-25T00:55:39.247Z" }, + { url = "https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl", hash = "sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b", size = 1787723, upload-time = "2026-02-05T02:20:16.416Z" }, ] [[package]] @@ -2750,37 +2744,37 @@ wheels = [ [[package]] name = "psutil" -version = "7.2.1" +version = "7.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/cb/09e5184fb5fc0358d110fc3ca7f6b1d033800734d34cac10f4136cfac10e/psutil-7.2.1.tar.gz", hash = "sha256:f7583aec590485b43ca601dd9cea0dcd65bd7bb21d30ef4ddbf4ea6b5ed1bdd3", size = 490253, upload-time = "2025-12-29T08:26:00.169Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/8e/f0c242053a368c2aa89584ecd1b054a18683f13d6e5a318fc9ec36582c94/psutil-7.2.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9f33bb525b14c3ea563b2fd521a84d2fa214ec59e3e6a2858f78d0844dd60d", size = 129624, upload-time = "2025-12-29T08:26:04.255Z" }, - { url = "https://files.pythonhosted.org/packages/26/97/a58a4968f8990617decee234258a2b4fc7cd9e35668387646c1963e69f26/psutil-7.2.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:81442dac7abfc2f4f4385ea9e12ddf5a796721c0f6133260687fec5c3780fa49", size = 130132, upload-time = "2025-12-29T08:26:06.228Z" }, - { url = "https://files.pythonhosted.org/packages/db/6d/ed44901e830739af5f72a85fa7ec5ff1edea7f81bfbf4875e409007149bd/psutil-7.2.1-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea46c0d060491051d39f0d2cff4f98d5c72b288289f57a21556cc7d504db37fc", size = 180612, upload-time = "2025-12-29T08:26:08.276Z" }, - { url = "https://files.pythonhosted.org/packages/c7/65/b628f8459bca4efbfae50d4bf3feaab803de9a160b9d5f3bd9295a33f0c2/psutil-7.2.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35630d5af80d5d0d49cfc4d64c1c13838baf6717a13effb35869a5919b854cdf", size = 183201, upload-time = "2025-12-29T08:26:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/fb/23/851cadc9764edcc18f0effe7d0bf69f727d4cf2442deb4a9f78d4e4f30f2/psutil-7.2.1-cp313-cp313t-win_amd64.whl", hash = "sha256:923f8653416604e356073e6e0bccbe7c09990acef442def2f5640dd0faa9689f", size = 139081, upload-time = "2025-12-29T08:26:12.483Z" }, - { url = "https://files.pythonhosted.org/packages/59/82/d63e8494ec5758029f31c6cb06d7d161175d8281e91d011a4a441c8a43b5/psutil-7.2.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cfbe6b40ca48019a51827f20d830887b3107a74a79b01ceb8cc8de4ccb17b672", size = 134767, upload-time = "2025-12-29T08:26:14.528Z" }, - { url = "https://files.pythonhosted.org/packages/c5/cf/5180eb8c8bdf6a503c6919f1da28328bd1e6b3b1b5b9d5b01ae64f019616/psutil-7.2.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b2e953fcfaedcfbc952b44744f22d16575d3aa78eb4f51ae74165b4e96e55f42", size = 128137, upload-time = "2025-12-29T08:26:27.759Z" }, - { url = "https://files.pythonhosted.org/packages/c5/2c/78e4a789306a92ade5000da4f5de3255202c534acdadc3aac7b5458fadef/psutil-7.2.1-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:05cc68dbb8c174828624062e73078e7e35406f4ca2d0866c272c2410d8ef06d1", size = 128947, upload-time = "2025-12-29T08:26:29.548Z" }, - { url = "https://files.pythonhosted.org/packages/29/f8/40e01c350ad9a2b3cb4e6adbcc8a83b17ee50dd5792102b6142385937db5/psutil-7.2.1-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e38404ca2bb30ed7267a46c02f06ff842e92da3bb8c5bfdadbd35a5722314d8", size = 154694, upload-time = "2025-12-29T08:26:32.147Z" }, - { url = "https://files.pythonhosted.org/packages/06/e4/b751cdf839c011a9714a783f120e6a86b7494eb70044d7d81a25a5cd295f/psutil-7.2.1-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab2b98c9fc19f13f59628d94df5cc4cc4844bc572467d113a8b517d634e362c6", size = 156136, upload-time = "2025-12-29T08:26:34.079Z" }, - { url = "https://files.pythonhosted.org/packages/44/ad/bbf6595a8134ee1e94a4487af3f132cef7fce43aef4a93b49912a48c3af7/psutil-7.2.1-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f78baafb38436d5a128f837fab2d92c276dfb48af01a240b861ae02b2413ada8", size = 148108, upload-time = "2025-12-29T08:26:36.225Z" }, - { url = "https://files.pythonhosted.org/packages/1c/15/dd6fd869753ce82ff64dcbc18356093471a5a5adf4f77ed1f805d473d859/psutil-7.2.1-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:99a4cd17a5fdd1f3d014396502daa70b5ec21bf4ffe38393e152f8e449757d67", size = 147402, upload-time = "2025-12-29T08:26:39.21Z" }, - { url = "https://files.pythonhosted.org/packages/34/68/d9317542e3f2b180c4306e3f45d3c922d7e86d8ce39f941bb9e2e9d8599e/psutil-7.2.1-cp37-abi3-win_amd64.whl", hash = "sha256:b1b0671619343aa71c20ff9767eced0483e4fc9e1f489d50923738caf6a03c17", size = 136938, upload-time = "2025-12-29T08:26:41.036Z" }, - { url = "https://files.pythonhosted.org/packages/3e/73/2ce007f4198c80fcf2cb24c169884f833fe93fbc03d55d302627b094ee91/psutil-7.2.1-cp37-abi3-win_arm64.whl", hash = "sha256:0d67c1822c355aa6f7314d92018fb4268a76668a536f133599b91edd48759442", size = 133836, upload-time = "2025-12-29T08:26:43.086Z" }, + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, ] [[package]] name = "psycopg" -version = "3.2.9" +version = "3.3.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.13'" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/27/4a/93a6ab570a8d1a4ad171a1f4256e205ce48d828781312c0bbaff36380ecb/psycopg-3.2.9.tar.gz", hash = "sha256:2fbb46fcd17bc81f993f28c47f1ebea38d66ae97cc2dbc3cad73b37cefbff700", size = 158122, upload-time = "2025-05-13T16:11:15.533Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/1a/7d9ef4fdc13ef7f15b934c393edc97a35c281bb7d3c3329fbfcbe915a7c2/psycopg-3.3.2.tar.gz", hash = "sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7", size = 165630, upload-time = "2025-12-06T17:34:53.899Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/b0/a73c195a56eb6b92e937a5ca58521a5c3346fb233345adc80fd3e2f542e2/psycopg-3.2.9-py3-none-any.whl", hash = "sha256:01a8dadccdaac2123c916208c96e06631641c0566b22005493f09663c7a8d3b6", size = 202705, upload-time = "2025-05-13T16:06:26.584Z" }, + { url = "https://files.pythonhosted.org/packages/8c/51/2779ccdf9305981a06b21a6b27e8547c948d85c41c76ff434192784a4c93/psycopg-3.3.2-py3-none-any.whl", hash = "sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b", size = 212774, upload-time = "2025-12-06T17:31:41.414Z" }, ] [package.optional-dependencies] @@ -2790,31 +2784,31 @@ binary = [ [[package]] name = "psycopg-binary" -version = "3.2.9" +version = "3.3.2" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/29/6f/ec9957e37a606cd7564412e03f41f1b3c3637a5be018d0849914cb06e674/psycopg_binary-3.2.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be7d650a434921a6b1ebe3fff324dbc2364393eb29d7672e638ce3e21076974e", size = 4022205, upload-time = "2025-05-13T16:07:48.195Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ba/497b8bea72b20a862ac95a94386967b745a472d9ddc88bc3f32d5d5f0d43/psycopg_binary-3.2.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a76b4722a529390683c0304501f238b365a46b1e5fb6b7249dbc0ad6fea51a0", size = 4083795, upload-time = "2025-05-13T16:07:50.917Z" }, - { url = "https://files.pythonhosted.org/packages/42/07/af9503e8e8bdad3911fd88e10e6a29240f9feaa99f57d6fac4a18b16f5a0/psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96a551e4683f1c307cfc3d9a05fec62c00a7264f320c9962a67a543e3ce0d8ff", size = 4655043, upload-time = "2025-05-13T16:07:54.857Z" }, - { url = "https://files.pythonhosted.org/packages/28/ed/aff8c9850df1648cc6a5cc7a381f11ee78d98a6b807edd4a5ae276ad60ad/psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61d0a6ceed8f08c75a395bc28cb648a81cf8dee75ba4650093ad1a24a51c8724", size = 4477972, upload-time = "2025-05-13T16:07:57.925Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bd/8e9d1b77ec1a632818fe2f457c3a65af83c68710c4c162d6866947d08cc5/psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad280bbd409bf598683dda82232f5215cfc5f2b1bf0854e409b4d0c44a113b1d", size = 4737516, upload-time = "2025-05-13T16:08:01.616Z" }, - { url = "https://files.pythonhosted.org/packages/46/ec/222238f774cd5a0881f3f3b18fb86daceae89cc410f91ef6a9fb4556f236/psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76eddaf7fef1d0994e3d536ad48aa75034663d3a07f6f7e3e601105ae73aeff6", size = 4436160, upload-time = "2025-05-13T16:08:04.278Z" }, - { url = "https://files.pythonhosted.org/packages/37/78/af5af2a1b296eeca54ea7592cd19284739a844974c9747e516707e7b3b39/psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:52e239cd66c4158e412318fbe028cd94b0ef21b0707f56dcb4bdc250ee58fd40", size = 3753518, upload-time = "2025-05-13T16:08:07.567Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ac/8a3ed39ea069402e9e6e6a2f79d81a71879708b31cc3454283314994b1ae/psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08bf9d5eabba160dd4f6ad247cf12f229cc19d2458511cab2eb9647f42fa6795", size = 3313598, upload-time = "2025-05-13T16:08:09.999Z" }, - { url = "https://files.pythonhosted.org/packages/da/43/26549af068347c808fbfe5f07d2fa8cef747cfff7c695136172991d2378b/psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1b2cf018168cad87580e67bdde38ff5e51511112f1ce6ce9a8336871f465c19a", size = 3407289, upload-time = "2025-05-13T16:08:12.66Z" }, - { url = "https://files.pythonhosted.org/packages/67/55/ea8d227c77df8e8aec880ded398316735add8fda5eb4ff5cc96fac11e964/psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:14f64d1ac6942ff089fc7e926440f7a5ced062e2ed0949d7d2d680dc5c00e2d4", size = 3472493, upload-time = "2025-05-13T16:08:15.672Z" }, - { url = "https://files.pythonhosted.org/packages/3c/02/6ff2a5bc53c3cd653d281666728e29121149179c73fddefb1e437024c192/psycopg_binary-3.2.9-cp312-cp312-win_amd64.whl", hash = "sha256:7a838852e5afb6b4126f93eb409516a8c02a49b788f4df8b6469a40c2157fa21", size = 2927400, upload-time = "2025-05-13T16:08:18.652Z" }, - { url = "https://files.pythonhosted.org/packages/28/0b/f61ff4e9f23396aca674ed4d5c9a5b7323738021d5d72d36d8b865b3deaf/psycopg_binary-3.2.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:98bbe35b5ad24a782c7bf267596638d78aa0e87abc7837bdac5b2a2ab954179e", size = 4017127, upload-time = "2025-05-13T16:08:21.391Z" }, - { url = "https://files.pythonhosted.org/packages/bc/00/7e181fb1179fbfc24493738b61efd0453d4b70a0c4b12728e2b82db355fd/psycopg_binary-3.2.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:72691a1615ebb42da8b636c5ca9f2b71f266be9e172f66209a361c175b7842c5", size = 4080322, upload-time = "2025-05-13T16:08:24.049Z" }, - { url = "https://files.pythonhosted.org/packages/58/fd/94fc267c1d1392c4211e54ccb943be96ea4032e761573cf1047951887494/psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ab464bfba8c401f5536d5aa95f0ca1dd8257b5202eede04019b4415f491351", size = 4655097, upload-time = "2025-05-13T16:08:27.376Z" }, - { url = "https://files.pythonhosted.org/packages/41/17/31b3acf43de0b2ba83eac5878ff0dea5a608ca2a5c5dd48067999503a9de/psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e8aeefebe752f46e3c4b769e53f1d4ad71208fe1150975ef7662c22cca80fab", size = 4482114, upload-time = "2025-05-13T16:08:30.781Z" }, - { url = "https://files.pythonhosted.org/packages/85/78/b4d75e5fd5a85e17f2beb977abbba3389d11a4536b116205846b0e1cf744/psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7e4e4dd177a8665c9ce86bc9caae2ab3aa9360b7ce7ec01827ea1baea9ff748", size = 4737693, upload-time = "2025-05-13T16:08:34.625Z" }, - { url = "https://files.pythonhosted.org/packages/3b/95/7325a8550e3388b00b5e54f4ced5e7346b531eb4573bf054c3dbbfdc14fe/psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fc2915949e5c1ea27a851f7a472a7da7d0a40d679f0a31e42f1022f3c562e87", size = 4437423, upload-time = "2025-05-13T16:08:37.444Z" }, - { url = "https://files.pythonhosted.org/packages/1a/db/cef77d08e59910d483df4ee6da8af51c03bb597f500f1fe818f0f3b925d3/psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a1fa38a4687b14f517f049477178093c39c2a10fdcced21116f47c017516498f", size = 3758667, upload-time = "2025-05-13T16:08:40.116Z" }, - { url = "https://files.pythonhosted.org/packages/95/3e/252fcbffb47189aa84d723b54682e1bb6d05c8875fa50ce1ada914ae6e28/psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5be8292d07a3ab828dc95b5ee6b69ca0a5b2e579a577b39671f4f5b47116dfd2", size = 3320576, upload-time = "2025-05-13T16:08:43.243Z" }, - { url = "https://files.pythonhosted.org/packages/1c/cd/9b5583936515d085a1bec32b45289ceb53b80d9ce1cea0fef4c782dc41a7/psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:778588ca9897b6c6bab39b0d3034efff4c5438f5e3bd52fda3914175498202f9", size = 3411439, upload-time = "2025-05-13T16:08:47.321Z" }, - { url = "https://files.pythonhosted.org/packages/45/6b/6f1164ea1634c87956cdb6db759e0b8c5827f989ee3cdff0f5c70e8331f2/psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f0d5b3af045a187aedbd7ed5fc513bd933a97aaff78e61c3745b330792c4345b", size = 3477477, upload-time = "2025-05-13T16:08:51.166Z" }, - { url = "https://files.pythonhosted.org/packages/7b/1d/bf54cfec79377929da600c16114f0da77a5f1670f45e0c3af9fcd36879bc/psycopg_binary-3.2.9-cp313-cp313-win_amd64.whl", hash = "sha256:2290bc146a1b6a9730350f695e8b670e1d1feb8446597bed0bbe7c3c30e0abcb", size = 2928009, upload-time = "2025-05-13T16:08:53.67Z" }, + { url = "https://files.pythonhosted.org/packages/4e/1e/8614b01c549dd7e385dacdcd83fe194f6b3acb255a53cc67154ee6bf00e7/psycopg_binary-3.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9387ab615f929e71ef0f4a8a51e986fa06236ccfa9f3ec98a88f60fbf230634", size = 4579832, upload-time = "2025-12-06T17:33:01.388Z" }, + { url = "https://files.pythonhosted.org/packages/26/97/0bb093570fae2f4454d42c1ae6000f15934391867402f680254e4a7def54/psycopg_binary-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3ff7489df5e06c12d1829544eaec64970fe27fe300f7cf04c8495fe682064688", size = 4658786, upload-time = "2025-12-06T17:33:05.022Z" }, + { url = "https://files.pythonhosted.org/packages/61/20/1d9383e3f2038826900a14137b0647d755f67551aab316e1021443105ed5/psycopg_binary-3.3.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9742580ecc8e1ac45164e98d32ca6df90da509c2d3ff26be245d94c430f92db4", size = 5454896, upload-time = "2025-12-06T17:33:09.023Z" }, + { url = "https://files.pythonhosted.org/packages/a6/62/513c80ad8bbb545e364f7737bf2492d34a4c05eef4f7b5c16428dc42260d/psycopg_binary-3.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d45acedcaa58619355f18e0f42af542fcad3fd84ace4b8355d3a5dea23318578", size = 5132731, upload-time = "2025-12-06T17:33:12.519Z" }, + { url = "https://files.pythonhosted.org/packages/f3/28/ddf5f5905f088024bccb19857949467407c693389a14feb527d6171d8215/psycopg_binary-3.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d88f32ff8c47cb7f4e7e7a9d1747dcee6f3baa19ed9afa9e5694fd2fb32b61ed", size = 6724495, upload-time = "2025-12-06T17:33:16.624Z" }, + { url = "https://files.pythonhosted.org/packages/6e/93/a1157ebcc650960b264542b547f7914d87a42ff0cc15a7584b29d5807e6b/psycopg_binary-3.3.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:59d0163c4617a2c577cb34afbed93d7a45b8c8364e54b2bd2020ff25d5f5f860", size = 4964979, upload-time = "2025-12-06T17:33:20.179Z" }, + { url = "https://files.pythonhosted.org/packages/0e/27/65939ba6798f9c5be4a5d9cd2061ebaf0851798525c6811d347821c8132d/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e750afe74e6c17b2c7046d2c3e3173b5a3f6080084671c8aa327215323df155b", size = 4493648, upload-time = "2025-12-06T17:33:23.464Z" }, + { url = "https://files.pythonhosted.org/packages/8a/c4/5e9e4b9b1c1e27026e43387b0ba4aaf3537c7806465dd3f1d5bde631752a/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f26f113013c4dcfbfe9ced57b5bad2035dda1a7349f64bf726021968f9bccad3", size = 4173392, upload-time = "2025-12-06T17:33:26.88Z" }, + { url = "https://files.pythonhosted.org/packages/c6/81/cf43fb76993190cee9af1cbcfe28afb47b1928bdf45a252001017e5af26e/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8309ee4569dced5e81df5aa2dcd48c7340c8dee603a66430f042dfbd2878edca", size = 3909241, upload-time = "2025-12-06T17:33:30.092Z" }, + { url = "https://files.pythonhosted.org/packages/9d/20/c6377a0d17434674351627489deca493ea0b137c522b99c81d3a106372c8/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c6464150e25b68ae3cb04c4e57496ea11ebfaae4d98126aea2f4702dd43e3c12", size = 4219746, upload-time = "2025-12-06T17:33:33.097Z" }, + { url = "https://files.pythonhosted.org/packages/25/32/716c57b28eefe02a57a4c9d5bf956849597f5ea476c7010397199e56cfde/psycopg_binary-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:716a586f99bbe4f710dc58b40069fcb33c7627e95cc6fc936f73c9235e07f9cf", size = 3537494, upload-time = "2025-12-06T17:33:35.82Z" }, + { url = "https://files.pythonhosted.org/packages/14/73/7ca7cb22b9ac7393fb5de7d28ca97e8347c375c8498b3bff2c99c1f38038/psycopg_binary-3.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc5a189e89cbfff174588665bb18d28d2d0428366cc9dae5864afcaa2e57380b", size = 4579068, upload-time = "2025-12-06T17:33:39.303Z" }, + { url = "https://files.pythonhosted.org/packages/f5/42/0cf38ff6c62c792fc5b55398a853a77663210ebd51ed6f0c4a05b06f95a6/psycopg_binary-3.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:083c2e182be433f290dc2c516fd72b9b47054fcd305cce791e0a50d9e93e06f2", size = 4657520, upload-time = "2025-12-06T17:33:42.536Z" }, + { url = "https://files.pythonhosted.org/packages/3b/60/df846bc84cbf2231e01b0fff48b09841fe486fa177665e50f4995b1bfa44/psycopg_binary-3.3.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:ac230e3643d1c436a2dfb59ca84357dfc6862c9f372fc5dbd96bafecae581f9f", size = 5452086, upload-time = "2025-12-06T17:33:46.54Z" }, + { url = "https://files.pythonhosted.org/packages/ab/85/30c846a00db86b1b53fd5bfd4b4edfbd0c00de8f2c75dd105610bd7568fc/psycopg_binary-3.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d8c899a540f6c7585cee53cddc929dd4d2db90fd828e37f5d4017b63acbc1a5d", size = 5131125, upload-time = "2025-12-06T17:33:50.413Z" }, + { url = "https://files.pythonhosted.org/packages/6d/15/9968732013373f36f8a2a3fb76104dffc8efd9db78709caa5ae1a87b1f80/psycopg_binary-3.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50ff10ab8c0abdb5a5451b9315538865b50ba64c907742a1385fdf5f5772b73e", size = 6722914, upload-time = "2025-12-06T17:33:54.544Z" }, + { url = "https://files.pythonhosted.org/packages/b2/ba/29e361fe02143ac5ff5a1ca3e45697344cfbebe2eaf8c4e7eec164bff9a0/psycopg_binary-3.3.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:23d2594af848c1fd3d874a9364bef50730124e72df7bb145a20cb45e728c50ed", size = 4966081, upload-time = "2025-12-06T17:33:58.477Z" }, + { url = "https://files.pythonhosted.org/packages/99/45/1be90c8f1a1a237046903e91202fb06708745c179f220b361d6333ed7641/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea4fe6b4ead3bbbe27244ea224fcd1f53cb119afc38b71a2f3ce570149a03e30", size = 4493332, upload-time = "2025-12-06T17:34:02.011Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b5/bbdc07d5f0a5e90c617abd624368182aa131485e18038b2c6c85fc054aed/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:742ce48cde825b8e52fb1a658253d6d1ff66d152081cbc76aa45e2986534858d", size = 4170781, upload-time = "2025-12-06T17:34:05.298Z" }, + { url = "https://files.pythonhosted.org/packages/d1/2a/0d45e4f4da2bd78c3237ffa03475ef3751f69a81919c54a6e610eb1a7c96/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e22bf6b54df994aff37ab52695d635f1ef73155e781eee1f5fa75bc08b58c8da", size = 3910544, upload-time = "2025-12-06T17:34:08.251Z" }, + { url = "https://files.pythonhosted.org/packages/3a/62/a8e0f092f4dbef9a94b032fb71e214cf0a375010692fbe7493a766339e47/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8db9034cde3bcdafc66980f0130813f5c5d19e74b3f2a19fb3cfbc25ad113121", size = 4220070, upload-time = "2025-12-06T17:34:11.392Z" }, + { url = "https://files.pythonhosted.org/packages/09/e6/5fc8d8aff8afa114bb4a94a0341b9309311e8bf3ab32d816032f8b984d4e/psycopg_binary-3.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:df65174c7cf6b05ea273ce955927d3270b3a6e27b0b12762b009ce6082b8d3fc", size = 3540922, upload-time = "2025-12-06T17:34:14.88Z" }, ] [[package]] @@ -2913,11 +2907,11 @@ wheels = [ [[package]] name = "pyjwt" -version = "2.10.1" +version = "2.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e7/46/bd74733ff231675599650d3e47f361794b22ef3e3770998dda30d3b63726/pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953", size = 87785, upload-time = "2024-11-28T03:43:29.933Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5a/b46fa56bf322901eee5b0454a34343cdbdae202cd421775a8ee4e42fd519/pyjwt-2.11.0.tar.gz", hash = "sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623", size = 98019, upload-time = "2026-01-30T19:59:55.694Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb", size = 22997, upload-time = "2024-11-28T03:43:27.893Z" }, + { url = "https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl", hash = "sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469", size = 28224, upload-time = "2026-01-30T19:59:54.539Z" }, ] [[package]] @@ -3024,13 +3018,16 @@ wheels = [ [[package]] name = "pywinpty" -version = "3.0.2" +version = "3.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/bb/a7cc2967c5c4eceb6cc49cfe39447d4bfc56e6c865e7c2249b6eb978935f/pywinpty-3.0.2.tar.gz", hash = "sha256:1505cc4cb248af42cb6285a65c9c2086ee9e7e574078ee60933d5d7fa86fb004", size = 30669, upload-time = "2025-10-03T21:16:29.205Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f579235049dc26cd2c5e657d2a943e01820844ffc81f32176/pywinpty-3.0.3.tar.gz", hash = "sha256:523441dc34d231fb361b4b00f8c99d3f16de02f5005fd544a0183112bcc22412", size = 31309, upload-time = "2026-02-04T21:51:09.524Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/4e/1098484e042c9485f56f16eb2b69b43b874bd526044ee401512234cf9e04/pywinpty-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:99fdd9b455f0ad6419aba6731a7a0d2f88ced83c3c94a80ff9533d95fa8d8a9e", size = 2050391, upload-time = "2025-10-03T21:19:01.642Z" }, - { url = "https://files.pythonhosted.org/packages/fc/19/b757fe28008236a4a713e813283721b8a40aa60cd7d3f83549f2e25a3155/pywinpty-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:18f78b81e4cfee6aabe7ea8688441d30247b73e52cd9657138015c5f4ee13a51", size = 2050057, upload-time = "2025-10-03T21:19:26.732Z" }, - { url = "https://files.pythonhosted.org/packages/cb/44/cbae12ecf6f4fa4129c36871fd09c6bef4f98d5f625ecefb5e2449765508/pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b", size = 2049874, upload-time = "2025-10-03T21:18:53.923Z" }, + { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098, upload-time = "2026-02-04T21:54:37.711Z" }, + { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901, upload-time = "2026-02-04T21:53:31.35Z" }, + { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686, upload-time = "2026-02-04T21:52:03.035Z" }, + { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591, upload-time = "2026-02-04T21:52:29.821Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360, upload-time = "2026-02-04T21:55:33.397Z" }, + { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107, upload-time = "2026-02-04T21:51:45.455Z" }, ] [[package]] @@ -3243,28 +3240,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.14" +version = "0.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2e/06/f71e3a86b2df0dfa2d2f72195941cd09b44f87711cb7fa5193732cb9a5fc/ruff-0.14.14.tar.gz", hash = "sha256:2d0f819c9a90205f3a867dbbd0be083bee9912e170fd7d9704cc8ae45824896b", size = 4515732, upload-time = "2026-01-22T22:30:17.527Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/39/5cee96809fbca590abea6b46c6d1c586b49663d1d2830a751cc8fc42c666/ruff-0.15.0.tar.gz", hash = "sha256:6bdea47cdbea30d40f8f8d7d69c0854ba7c15420ec75a26f463290949d7f7e9a", size = 4524893, upload-time = "2026-02-03T17:53:35.357Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/89/20a12e97bc6b9f9f68343952da08a8099c57237aef953a56b82711d55edd/ruff-0.14.14-py3-none-linux_armv6l.whl", hash = "sha256:7cfe36b56e8489dee8fbc777c61959f60ec0f1f11817e8f2415f429552846aed", size = 10467650, upload-time = "2026-01-22T22:30:08.578Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b1/c5de3fd2d5a831fcae21beda5e3589c0ba67eec8202e992388e4b17a6040/ruff-0.14.14-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6006a0082336e7920b9573ef8a7f52eec837add1265cc74e04ea8a4368cd704c", size = 10883245, upload-time = "2026-01-22T22:30:04.155Z" }, - { url = "https://files.pythonhosted.org/packages/b8/7c/3c1db59a10e7490f8f6f8559d1db8636cbb13dccebf18686f4e3c9d7c772/ruff-0.14.14-py3-none-macosx_11_0_arm64.whl", hash = "sha256:026c1d25996818f0bf498636686199d9bd0d9d6341c9c2c3b62e2a0198b758de", size = 10231273, upload-time = "2026-01-22T22:30:34.642Z" }, - { url = "https://files.pythonhosted.org/packages/a1/6e/5e0e0d9674be0f8581d1f5e0f0a04761203affce3232c1a1189d0e3b4dad/ruff-0.14.14-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f666445819d31210b71e0a6d1c01e24447a20b85458eea25a25fe8142210ae0e", size = 10585753, upload-time = "2026-01-22T22:30:31.781Z" }, - { url = "https://files.pythonhosted.org/packages/23/09/754ab09f46ff1884d422dc26d59ba18b4e5d355be147721bb2518aa2a014/ruff-0.14.14-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c0f18b922c6d2ff9a5e6c3ee16259adc513ca775bcf82c67ebab7cbd9da5bc8", size = 10286052, upload-time = "2026-01-22T22:30:24.827Z" }, - { url = "https://files.pythonhosted.org/packages/c8/cc/e71f88dd2a12afb5f50733851729d6b571a7c3a35bfdb16c3035132675a0/ruff-0.14.14-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1629e67489c2dea43e8658c3dba659edbfd87361624b4040d1df04c9740ae906", size = 11043637, upload-time = "2026-01-22T22:30:13.239Z" }, - { url = "https://files.pythonhosted.org/packages/67/b2/397245026352494497dac935d7f00f1468c03a23a0c5db6ad8fc49ca3fb2/ruff-0.14.14-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:27493a2131ea0f899057d49d303e4292b2cae2bb57253c1ed1f256fbcd1da480", size = 12194761, upload-time = "2026-01-22T22:30:22.542Z" }, - { url = "https://files.pythonhosted.org/packages/5b/06/06ef271459f778323112c51b7587ce85230785cd64e91772034ddb88f200/ruff-0.14.14-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ff589aab3f5b539e35db38425da31a57521efd1e4ad1ae08fc34dbe30bd7df", size = 12005701, upload-time = "2026-01-22T22:30:20.499Z" }, - { url = "https://files.pythonhosted.org/packages/41/d6/99364514541cf811ccc5ac44362f88df66373e9fec1b9d1c4cc830593fe7/ruff-0.14.14-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc12d74eef0f29f51775f5b755913eb523546b88e2d733e1d701fe65144e89b", size = 11282455, upload-time = "2026-01-22T22:29:59.679Z" }, - { url = "https://files.pythonhosted.org/packages/ca/71/37daa46f89475f8582b7762ecd2722492df26421714a33e72ccc9a84d7a5/ruff-0.14.14-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb8481604b7a9e75eff53772496201690ce2687067e038b3cc31aaf16aa0b974", size = 11215882, upload-time = "2026-01-22T22:29:57.032Z" }, - { url = "https://files.pythonhosted.org/packages/2c/10/a31f86169ec91c0705e618443ee74ede0bdd94da0a57b28e72db68b2dbac/ruff-0.14.14-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:14649acb1cf7b5d2d283ebd2f58d56b75836ed8c6f329664fa91cdea19e76e66", size = 11180549, upload-time = "2026-01-22T22:30:27.175Z" }, - { url = "https://files.pythonhosted.org/packages/fd/1e/c723f20536b5163adf79bdd10c5f093414293cdf567eed9bdb7b83940f3f/ruff-0.14.14-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e8058d2145566510790eab4e2fad186002e288dec5e0d343a92fe7b0bc1b3e13", size = 10543416, upload-time = "2026-01-22T22:30:01.964Z" }, - { url = "https://files.pythonhosted.org/packages/3e/34/8a84cea7e42c2d94ba5bde1d7a4fae164d6318f13f933d92da6d7c2041ff/ruff-0.14.14-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e651e977a79e4c758eb807f0481d673a67ffe53cfa92209781dfa3a996cf8412", size = 10285491, upload-time = "2026-01-22T22:30:29.51Z" }, - { url = "https://files.pythonhosted.org/packages/55/ef/b7c5ea0be82518906c978e365e56a77f8de7678c8bb6651ccfbdc178c29f/ruff-0.14.14-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cc8b22da8d9d6fdd844a68ae937e2a0adf9b16514e9a97cc60355e2d4b219fc3", size = 10733525, upload-time = "2026-01-22T22:30:06.499Z" }, - { url = "https://files.pythonhosted.org/packages/6a/5b/aaf1dfbcc53a2811f6cc0a1759de24e4b03e02ba8762daabd9b6bd8c59e3/ruff-0.14.14-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:16bc890fb4cc9781bb05beb5ab4cd51be9e7cb376bf1dd3580512b24eb3fda2b", size = 11315626, upload-time = "2026-01-22T22:30:36.848Z" }, - { url = "https://files.pythonhosted.org/packages/2c/aa/9f89c719c467dfaf8ad799b9bae0df494513fb21d31a6059cb5870e57e74/ruff-0.14.14-py3-none-win32.whl", hash = "sha256:b530c191970b143375b6a68e6f743800b2b786bbcf03a7965b06c4bf04568167", size = 10502442, upload-time = "2026-01-22T22:30:38.93Z" }, - { url = "https://files.pythonhosted.org/packages/87/44/90fa543014c45560cae1fffc63ea059fb3575ee6e1cb654562197e5d16fb/ruff-0.14.14-py3-none-win_amd64.whl", hash = "sha256:3dde1435e6b6fe5b66506c1dff67a421d0b7f6488d466f651c07f4cab3bf20fd", size = 11630486, upload-time = "2026-01-22T22:30:10.852Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" }, + { url = "https://files.pythonhosted.org/packages/bc/88/3fd1b0aa4b6330d6aaa63a285bc96c9f71970351579152d231ed90914586/ruff-0.15.0-py3-none-linux_armv6l.whl", hash = "sha256:aac4ebaa612a82b23d45964586f24ae9bc23ca101919f5590bdb368d74ad5455", size = 10354332, upload-time = "2026-02-03T17:52:54.892Z" }, + { url = "https://files.pythonhosted.org/packages/72/f6/62e173fbb7eb75cc29fe2576a1e20f0a46f671a2587b5f604bfb0eaf5f6f/ruff-0.15.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dcd4be7cc75cfbbca24a98d04d0b9b36a270d0833241f776b788d59f4142b14d", size = 10767189, upload-time = "2026-02-03T17:53:19.778Z" }, + { url = "https://files.pythonhosted.org/packages/99/e4/968ae17b676d1d2ff101d56dc69cf333e3a4c985e1ec23803df84fc7bf9e/ruff-0.15.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d747e3319b2bce179c7c1eaad3d884dc0a199b5f4d5187620530adf9105268ce", size = 10075384, upload-time = "2026-02-03T17:53:29.241Z" }, + { url = "https://files.pythonhosted.org/packages/a2/bf/9843c6044ab9e20af879c751487e61333ca79a2c8c3058b15722386b8cae/ruff-0.15.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:650bd9c56ae03102c51a5e4b554d74d825ff3abe4db22b90fd32d816c2e90621", size = 10481363, upload-time = "2026-02-03T17:52:43.332Z" }, + { url = "https://files.pythonhosted.org/packages/55/d9/4ada5ccf4cd1f532db1c8d44b6f664f2208d3d93acbeec18f82315e15193/ruff-0.15.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6664b7eac559e3048223a2da77769c2f92b43a6dfd4720cef42654299a599c9", size = 10187736, upload-time = "2026-02-03T17:53:00.522Z" }, + { url = "https://files.pythonhosted.org/packages/86/e2/f25eaecd446af7bb132af0a1d5b135a62971a41f5366ff41d06d25e77a91/ruff-0.15.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f811f97b0f092b35320d1556f3353bf238763420ade5d9e62ebd2b73f2ff179", size = 10968415, upload-time = "2026-02-03T17:53:15.705Z" }, + { url = "https://files.pythonhosted.org/packages/e7/dc/f06a8558d06333bf79b497d29a50c3a673d9251214e0d7ec78f90b30aa79/ruff-0.15.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761ec0a66680fab6454236635a39abaf14198818c8cdf691e036f4bc0f406b2d", size = 11809643, upload-time = "2026-02-03T17:53:23.031Z" }, + { url = "https://files.pythonhosted.org/packages/dd/45/0ece8db2c474ad7df13af3a6d50f76e22a09d078af63078f005057ca59eb/ruff-0.15.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:940f11c2604d317e797b289f4f9f3fa5555ffe4fb574b55ed006c3d9b6f0eb78", size = 11234787, upload-time = "2026-02-03T17:52:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/8a/d9/0e3a81467a120fd265658d127db648e4d3acfe3e4f6f5d4ea79fac47e587/ruff-0.15.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcbca3d40558789126da91d7ef9a7c87772ee107033db7191edefa34e2c7f1b4", size = 11112797, upload-time = "2026-02-03T17:52:49.274Z" }, + { url = "https://files.pythonhosted.org/packages/b2/cb/8c0b3b0c692683f8ff31351dfb6241047fa873a4481a76df4335a8bff716/ruff-0.15.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9a121a96db1d75fa3eb39c4539e607f628920dd72ff1f7c5ee4f1b768ac62d6e", size = 11033133, upload-time = "2026-02-03T17:53:33.105Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5e/23b87370cf0f9081a8c89a753e69a4e8778805b8802ccfe175cc410e50b9/ruff-0.15.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5298d518e493061f2eabd4abd067c7e4fb89e2f63291c94332e35631c07c3662", size = 10442646, upload-time = "2026-02-03T17:53:06.278Z" }, + { url = "https://files.pythonhosted.org/packages/e1/9a/3c94de5ce642830167e6d00b5c75aacd73e6347b4c7fc6828699b150a5ee/ruff-0.15.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:afb6e603d6375ff0d6b0cee563fa21ab570fd15e65c852cb24922cef25050cf1", size = 10195750, upload-time = "2026-02-03T17:53:26.084Z" }, + { url = "https://files.pythonhosted.org/packages/30/15/e396325080d600b436acc970848d69df9c13977942fb62bb8722d729bee8/ruff-0.15.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77e515f6b15f828b94dc17d2b4ace334c9ddb7d9468c54b2f9ed2b9c1593ef16", size = 10676120, upload-time = "2026-02-03T17:53:09.363Z" }, + { url = "https://files.pythonhosted.org/packages/8d/c9/229a23d52a2983de1ad0fb0ee37d36e0257e6f28bfd6b498ee2c76361874/ruff-0.15.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6f6e80850a01eb13b3e42ee0ebdf6e4497151b48c35051aab51c101266d187a3", size = 11201636, upload-time = "2026-02-03T17:52:57.281Z" }, + { url = "https://files.pythonhosted.org/packages/6f/b0/69adf22f4e24f3677208adb715c578266842e6e6a3cc77483f48dd999ede/ruff-0.15.0-py3-none-win32.whl", hash = "sha256:238a717ef803e501b6d51e0bdd0d2c6e8513fe9eec14002445134d3907cd46c3", size = 10465945, upload-time = "2026-02-03T17:53:12.591Z" }, + { url = "https://files.pythonhosted.org/packages/51/ad/f813b6e2c97e9b4598be25e94a9147b9af7e60523b0cb5d94d307c15229d/ruff-0.15.0-py3-none-win_amd64.whl", hash = "sha256:dd5e4d3301dc01de614da3cdffc33d4b1b96fb89e45721f1598e5532ccf78b18", size = 11564657, upload-time = "2026-02-03T17:52:51.893Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b0/2d823f6e77ebe560f4e397d078487e8d52c1516b331e3521bc75db4272ca/ruff-0.15.0-py3-none-win_arm64.whl", hash = "sha256:c480d632cc0ca3f0727acac8b7d053542d9e114a462a145d0b00e7cd658c515a", size = 10865753, upload-time = "2026-02-03T17:53:03.014Z" }, ] [[package]] @@ -3309,7 +3305,7 @@ dependencies = [ { name = "djangorestframework-yaml" }, { name = "docutils" }, { name = "drf-orjson-renderer" }, - { name = "drf-spectacular", extra = ["sidecar"] }, + { name = "drf-spectacular" }, { name = "drf-spectacular-websocket" }, { name = "elasticsearch-dsl" }, { name = "filelock" }, @@ -3375,9 +3371,9 @@ requires-dist = [ { name = "channels-redis", specifier = "==4.3.0" }, { name = "click", specifier = "==8.3.1" }, { name = "colorlog", specifier = "==6.10.1" }, - { name = "coverage", specifier = "==7.13.2" }, - { name = "cryptography", specifier = "==46.0.3" }, - { name = "django", specifier = "==5.2.9" }, + { name = "coverage", specifier = "==7.13.3" }, + { name = "cryptography", specifier = "==46.0.4" }, + { name = "django", specifier = "==5.2.11" }, { name = "django-cacheops", specifier = "==7.2" }, { name = "django-celery-beat", marker = "extra == 'worker'", specifier = "==2.8.1" }, { name = "django-celery-results", marker = "extra == 'worker'", specifier = "==2.6.0" }, @@ -3387,7 +3383,7 @@ requires-dist = [ { name = "django-elasticsearch-dsl", specifier = "==8.2" }, { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, - { name = "django-health-check", specifier = "==3.20.8" }, + { name = "django-health-check", specifier = "==3.23.3" }, { name = "django-import-export", extras = ["all"], specifier = "==4.4.0" }, { name = "django-json-widget", specifier = "==2.1.1" }, { name = "django-md-field", specifier = "==0.1.0" }, @@ -3399,18 +3395,18 @@ requires-dist = [ { name = "django-redis", specifier = "==6.0.0" }, { name = "django-storages", specifier = "==1.14.6" }, { name = "django-stubs", marker = "extra == 'linting'", specifier = "==5.2.9" }, - { name = "django-unfold", specifier = "==0.76.0" }, + { name = "django-unfold", specifier = "==0.78.1" }, { name = "django-widget-tweaks", specifier = "==1.5.1" }, - { name = "djangoql", specifier = "==0.18.1" }, + { name = "djangoql", specifier = "==0.19.1" }, { name = "djangorestframework", specifier = "==3.16.1" }, { name = "djangorestframework-recursive", specifier = "==0.1.2" }, { name = "djangorestframework-simplejwt", extras = ["crypto"], specifier = "==5.5.1" }, - { name = "djangorestframework-stubs", marker = "extra == 'linting'", specifier = "==3.16.7" }, + { name = "djangorestframework-stubs", marker = "extra == 'linting'", specifier = "==3.16.8" }, { name = "djangorestframework-xml", specifier = "==2.0.0" }, { name = "djangorestframework-yaml", specifier = "==2.0.0" }, { name = "docutils", specifier = "==0.22.4" }, { name = "drf-orjson-renderer", specifier = "==1.8.0" }, - { name = "drf-spectacular", extras = ["sidecar"], specifier = "==0.29.0" }, + { name = "drf-spectacular", specifier = "==0.29.0" }, { name = "drf-spectacular-websocket", specifier = "==1.3.1" }, { name = "elasticsearch-dsl", specifier = "==8.18.0" }, { name = "filelock", specifier = "==3.20.3" }, @@ -3419,28 +3415,28 @@ requires-dist = [ { name = "graphene-file-upload", specifier = "==1.3.0" }, { name = "httpx", specifier = "==0.28.1" }, { name = "jupyter", marker = "extra == 'jupyter'", specifier = "==1.1.1" }, - { name = "openai", marker = "extra == 'openai'", specifier = "==2.15.0" }, + { name = "openai", marker = "extra == 'openai'", specifier = "==2.16.0" }, { name = "paramiko", specifier = "==4.0.0" }, { name = "pillow", specifier = "==12.1.0" }, - { name = "pip", specifier = "==25.3" }, + { name = "pip", specifier = "==26.0.1" }, { name = "polib", specifier = "==1.2.0" }, - { name = "psutil", specifier = "==7.2.1" }, - { name = "psycopg", extras = ["binary"], specifier = "==3.2.9" }, - { name = "pyjwt", specifier = "==2.10.1" }, + { name = "psutil", specifier = "==7.2.2" }, + { name = "psycopg", extras = ["binary"], specifier = "==3.3.2" }, + { name = "pyjwt", specifier = "==2.11.0" }, { name = "pytest", specifier = "==9.0.2" }, { name = "pytest-django", specifier = "==4.11.1" }, { name = "python-slugify", specifier = "==8.0.4" }, { name = "redis", specifier = "==7.1.0" }, { name = "requests", specifier = "==2.32.5" }, - { name = "ruff", marker = "extra == 'linting'", specifier = "==0.14.14" }, - { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.50.0" }, + { name = "ruff", marker = "extra == 'linting'", specifier = "==0.15.0" }, + { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.52.0" }, { name = "six", specifier = "==1.17.0" }, { name = "swapper", specifier = "==1.4.0" }, - { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.13" }, + { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.15" }, { name = "types-docutils", marker = "extra == 'linting'", specifier = "==0.22.3.20251115" }, { name = "types-paramiko", marker = "extra == 'linting'", specifier = "==4.0.0.20250822" }, { name = "types-pillow", marker = "extra == 'linting'", specifier = "==10.2.0.20240822" }, - { name = "types-psutil", marker = "extra == 'linting'", specifier = "==7.2.1.20260116" }, + { name = "types-psutil", marker = "extra == 'linting'", specifier = "==7.2.2.20260130" }, { name = "types-redis", marker = "extra == 'linting'", specifier = "==4.6.0.20241004" }, { name = "types-requests", marker = "extra == 'linting'", specifier = "==2.32.4.20260107" }, { name = "types-six", marker = "extra == 'linting'", specifier = "==1.17.0.20251009" }, @@ -3462,15 +3458,15 @@ wheels = [ [[package]] name = "sentry-sdk" -version = "2.50.0" +version = "2.52.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/15/8a/3c4f53d32c21012e9870913544e56bfa9e931aede080779a0f177513f534/sentry_sdk-2.50.0.tar.gz", hash = "sha256:873437a989ee1b8b25579847bae8384515bf18cfed231b06c591b735c1781fe3", size = 401233, upload-time = "2026-01-20T12:53:16.244Z" } +sdist = { url = "https://files.pythonhosted.org/packages/59/eb/1b497650eb564701f9a7b8a95c51b2abe9347ed2c0b290ba78f027ebe4ea/sentry_sdk-2.52.0.tar.gz", hash = "sha256:fa0bec872cfec0302970b2996825723d67390cdd5f0229fb9efed93bd5384899", size = 410273, upload-time = "2026-02-04T15:03:54.706Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/5b/cbc2bb9569f03c8e15d928357e7e6179e5cfab45544a3bbac8aec4caf9be/sentry_sdk-2.50.0-py2.py3-none-any.whl", hash = "sha256:0ef0ed7168657ceb5a0be081f4102d92042a125462d1d1a29277992e344e749e", size = 424961, upload-time = "2026-01-20T12:53:14.826Z" }, + { url = "https://files.pythonhosted.org/packages/ca/63/2c6daf59d86b1c30600bff679d039f57fd1932af82c43c0bde1cbc55e8d4/sentry_sdk-2.52.0-py2.py3-none-any.whl", hash = "sha256:931c8f86169fc6f2752cb5c4e6480f0d516112e78750c312e081ababecbaf2ed", size = 435547, upload-time = "2026-02-04T15:03:51.567Z" }, ] [package.optional-dependencies] @@ -3637,14 +3633,14 @@ wheels = [ [[package]] name = "tqdm" -version = "4.67.1" +version = "4.67.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } +sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, + { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, ] [[package]] @@ -3658,26 +3654,26 @@ wheels = [ [[package]] name = "ty" -version = "0.0.13" +version = "0.0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/dc/b607f00916f5a7c52860b84a66dc17bc6988e8445e96b1d6e175a3837397/ty-0.0.13.tar.gz", hash = "sha256:7a1d135a400ca076407ea30012d1f75419634160ed3b9cad96607bf2956b23b3", size = 4999183, upload-time = "2026-01-21T13:21:16.133Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/25/257602d316b9333089b688a7a11b33ebc660b74e8dacf400dc3dfdea1594/ty-0.0.15.tar.gz", hash = "sha256:4f9a5b8df208c62dba56e91b93bed8b5bb714839691b8cff16d12c983bfa1174", size = 5101936, upload-time = "2026-02-05T01:06:34.922Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1a/df/3632f1918f4c0a33184f107efc5d436ab6da147fd3d3b94b3af6461efbf4/ty-0.0.13-py3-none-linux_armv6l.whl", hash = "sha256:1b2b8e02697c3a94c722957d712a0615bcc317c9b9497be116ef746615d892f2", size = 9993501, upload-time = "2026-01-21T13:21:26.628Z" }, - { url = "https://files.pythonhosted.org/packages/92/87/6a473ced5ac280c6ce5b1627c71a8a695c64481b99aabc798718376a441e/ty-0.0.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f15cdb8e233e2b5adfce673bb21f4c5e8eaf3334842f7eea3c70ac6fda8c1de5", size = 9860986, upload-time = "2026-01-21T13:21:24.425Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9b/d89ae375cf0a7cd9360e1164ce017f8c753759be63b6a11ed4c944abe8c6/ty-0.0.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0819e89ac9f0d8af7a062837ce197f0461fee2fc14fd07e2c368780d3a397b73", size = 9350748, upload-time = "2026-01-21T13:21:28.502Z" }, - { url = "https://files.pythonhosted.org/packages/a8/a6/9ad58518056fab344b20c0bb2c1911936ebe195318e8acc3bc45ac1c6b6b/ty-0.0.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1de79f481084b7cc7a202ba0d7a75e10970d10ffa4f025b23f2e6b7324b74886", size = 9849884, upload-time = "2026-01-21T13:21:21.886Z" }, - { url = "https://files.pythonhosted.org/packages/b1/c3/8add69095fa179f523d9e9afcc15a00818af0a37f2b237a9b59bc0046c34/ty-0.0.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4fb2154cff7c6e95d46bfaba283c60642616f20d73e5f96d0c89c269f3e1bcec", size = 9822975, upload-time = "2026-01-21T13:21:14.292Z" }, - { url = "https://files.pythonhosted.org/packages/a4/05/4c0927c68a0a6d43fb02f3f0b6c19c64e3461dc8ed6c404dde0efb8058f7/ty-0.0.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00be58d89337c27968a20d58ca553458608c5b634170e2bec82824c2e4cf4d96", size = 10294045, upload-time = "2026-01-21T13:21:30.505Z" }, - { url = "https://files.pythonhosted.org/packages/b4/86/6dc190838aba967557fe0bfd494c595d00b5081315a98aaf60c0e632aaeb/ty-0.0.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72435eade1fa58c6218abb4340f43a6c3ff856ae2dc5722a247d3a6dd32e9737", size = 10916460, upload-time = "2026-01-21T13:21:07.788Z" }, - { url = "https://files.pythonhosted.org/packages/04/40/9ead96b7c122e1109dfcd11671184c3506996bf6a649306ec427e81d9544/ty-0.0.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:77a548742ee8f621d718159e7027c3b555051d096a49bb580249a6c5fc86c271", size = 10597154, upload-time = "2026-01-21T13:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7d/e832a2c081d2be845dc6972d0c7998914d168ccbc0b9c86794419ab7376e/ty-0.0.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da067c57c289b7cf914669704b552b6207c2cc7f50da4118c3e12388642e6b3f", size = 10410710, upload-time = "2026-01-21T13:21:12.388Z" }, - { url = "https://files.pythonhosted.org/packages/31/e3/898be3a96237a32f05c4c29b43594dc3b46e0eedfe8243058e46153b324f/ty-0.0.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d1b50a01fffa140417fca5a24b658fbe0734074a095d5b6f0552484724474343", size = 9826299, upload-time = "2026-01-21T13:21:00.845Z" }, - { url = "https://files.pythonhosted.org/packages/bb/eb/db2d852ce0ed742505ff18ee10d7d252f3acfd6fc60eca7e9c7a0288a6d8/ty-0.0.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:0f33c46f52e5e9378378eca0d8059f026f3c8073ace02f7f2e8d079ddfe5207e", size = 9831610, upload-time = "2026-01-21T13:21:05.842Z" }, - { url = "https://files.pythonhosted.org/packages/9e/61/149f59c8abaddcbcbb0bd13b89c7741ae1c637823c5cf92ed2c644fcadef/ty-0.0.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:168eda24d9a0b202cf3758c2962cc295878842042b7eca9ed2965259f59ce9f2", size = 9978885, upload-time = "2026-01-21T13:21:10.306Z" }, - { url = "https://files.pythonhosted.org/packages/a0/cd/026d4e4af60a80918a8d73d2c42b8262dd43ab2fa7b28d9743004cb88d57/ty-0.0.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:d4917678b95dc8cb399cc459fab568ba8d5f0f33b7a94bf840d9733043c43f29", size = 10506453, upload-time = "2026-01-21T13:20:56.633Z" }, - { url = "https://files.pythonhosted.org/packages/63/06/8932833a4eca2df49c997a29afb26721612de8078ae79074c8fe87e17516/ty-0.0.13-py3-none-win32.whl", hash = "sha256:c1f2ec40daa405508b053e5b8e440fbae5fdb85c69c9ab0ee078f8bc00eeec3d", size = 9433482, upload-time = "2026-01-21T13:20:58.717Z" }, - { url = "https://files.pythonhosted.org/packages/aa/fd/e8d972d1a69df25c2cecb20ea50e49ad5f27a06f55f1f5f399a563e71645/ty-0.0.13-py3-none-win_amd64.whl", hash = "sha256:8b7b1ab9f187affbceff89d51076038363b14113be29bda2ddfa17116de1d476", size = 10319156, upload-time = "2026-01-21T13:21:03.266Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c2/05fdd64ac003a560d4fbd1faa7d9a31d75df8f901675e5bed1ee2ceeff87/ty-0.0.13-py3-none-win_arm64.whl", hash = "sha256:1c9630333497c77bb9bcabba42971b96ee1f36c601dd3dcac66b4134f9fa38f0", size = 9808316, upload-time = "2026-01-21T13:20:54.053Z" }, + { url = "https://files.pythonhosted.org/packages/ce/c5/35626e732b79bf0e6213de9f79aff59b5f247c0a1e3ce0d93e675ab9b728/ty-0.0.15-py3-none-linux_armv6l.whl", hash = "sha256:68e092458516c61512dac541cde0a5e4e5842df00b4e81881ead8f745ddec794", size = 10138374, upload-time = "2026-02-05T01:07:03.804Z" }, + { url = "https://files.pythonhosted.org/packages/d5/8a/48fd81664604848f79d03879b3ca3633762d457a069b07e09fb1b87edd6e/ty-0.0.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:79f2e75289eae3cece94c51118b730211af4ba5762906f52a878041b67e54959", size = 9947858, upload-time = "2026-02-05T01:06:47.453Z" }, + { url = "https://files.pythonhosted.org/packages/b6/85/c1ac8e97bcd930946f4c94db85b675561d590b4e72703bf3733419fc3973/ty-0.0.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:112a7b26e63e48cc72c8c5b03227d1db280cfa57a45f2df0e264c3a016aa8c3c", size = 9443220, upload-time = "2026-02-05T01:06:44.98Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d9/244bc02599d950f7a4298fbc0c1b25cc808646b9577bdf7a83470b2d1cec/ty-0.0.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71f62a2644972975a657d9dc867bf901235cde51e8d24c20311067e7afd44a56", size = 9949976, upload-time = "2026-02-05T01:07:01.515Z" }, + { url = "https://files.pythonhosted.org/packages/7e/ab/3a0daad66798c91a33867a3ececf17d314ac65d4ae2bbbd28cbfde94da63/ty-0.0.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e48b42be2d257317c85b78559233273b655dd636fc61e7e1d69abd90fd3cba4", size = 9965918, upload-time = "2026-02-05T01:06:54.283Z" }, + { url = "https://files.pythonhosted.org/packages/39/4e/e62b01338f653059a7c0cd09d1a326e9a9eedc351a0f0de9db0601658c3d/ty-0.0.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27dd5b52a421e6871c5bfe9841160331b60866ed2040250cb161886478ab3e4f", size = 10424943, upload-time = "2026-02-05T01:07:08.777Z" }, + { url = "https://files.pythonhosted.org/packages/65/b5/7aa06655ce69c0d4f3e845d2d85e79c12994b6d84c71699cfb437e0bc8cf/ty-0.0.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76b85c9ec2219e11c358a7db8e21b7e5c6674a1fb9b6f633836949de98d12286", size = 10964692, upload-time = "2026-02-05T01:06:37.103Z" }, + { url = "https://files.pythonhosted.org/packages/13/04/36fdfe1f3c908b471e246e37ce3d011175584c26d3853e6c5d9a0364564c/ty-0.0.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e8204c61d8ede4f21f2975dce74efdb80fafb2fae1915c666cceb33ea3c90b", size = 10692225, upload-time = "2026-02-05T01:06:49.714Z" }, + { url = "https://files.pythonhosted.org/packages/13/41/5bf882649bd8b64ded5fbce7fb8d77fb3b868de1a3b1a6c4796402b47308/ty-0.0.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af87c3be7c944bb4d6609d6c63e4594944b0028c7bd490a525a82b88fe010d6d", size = 10516776, upload-time = "2026-02-05T01:06:52.047Z" }, + { url = "https://files.pythonhosted.org/packages/56/75/66852d7e004f859839c17ffe1d16513c1e7cc04bcc810edb80ca022a9124/ty-0.0.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:50dccf7398505e5966847d366c9e4c650b8c225411c2a68c32040a63b9521eea", size = 9928828, upload-time = "2026-02-05T01:06:56.647Z" }, + { url = "https://files.pythonhosted.org/packages/65/72/96bc16c7b337a3ef358fd227b3c8ef0c77405f3bfbbfb59ee5915f0d9d71/ty-0.0.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:bd797b8f231a4f4715110259ad1ad5340a87b802307f3e06d92bfb37b858a8f3", size = 9978960, upload-time = "2026-02-05T01:06:29.567Z" }, + { url = "https://files.pythonhosted.org/packages/a0/18/d2e316a35b626de2227f832cd36d21205e4f5d96fd036a8af84c72ecec1b/ty-0.0.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9deb7f20e18b25440a9aa4884f934ba5628ef456dbde91819d5af1a73da48af3", size = 10135903, upload-time = "2026-02-05T01:06:59.256Z" }, + { url = "https://files.pythonhosted.org/packages/02/d3/b617a79c9dad10c888d7c15cd78859e0160b8772273637b9c4241a049491/ty-0.0.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7b31b3de031255b90a5f4d9cb3d050feae246067c87130e5a6861a8061c71754", size = 10615879, upload-time = "2026-02-05T01:07:06.661Z" }, + { url = "https://files.pythonhosted.org/packages/fb/b0/2652a73c71c77296a6343217063f05745da60c67b7e8a8e25f2064167fce/ty-0.0.15-py3-none-win32.whl", hash = "sha256:9362c528ceb62c89d65c216336d28d500bc9f4c10418413f63ebc16886e16cc1", size = 9578058, upload-time = "2026-02-05T01:06:42.928Z" }, + { url = "https://files.pythonhosted.org/packages/84/6e/08a4aedebd2a6ce2784b5bc3760e43d1861f1a184734a78215c2d397c1df/ty-0.0.15-py3-none-win_amd64.whl", hash = "sha256:4db040695ae67c5524f59cb8179a8fa277112e69042d7dfdac862caa7e3b0d9c", size = 10457112, upload-time = "2026-02-05T01:06:39.885Z" }, + { url = "https://files.pythonhosted.org/packages/b3/be/1991f2bc12847ae2d4f1e3ac5dcff8bb7bc1261390645c0755bb55616355/ty-0.0.15-py3-none-win_arm64.whl", hash = "sha256:e5a98d4119e77d6136461e16ae505f8f8069002874ab073de03fbcb1a5e8bf25", size = 9937490, upload-time = "2026-02-05T01:06:32.388Z" }, ] [[package]] @@ -3724,11 +3720,11 @@ wheels = [ [[package]] name = "types-psutil" -version = "7.2.1.20260116" +version = "7.2.2.20260130" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ce/a2/45fcde3f2a8b734a30903c14ecb719a3e95a6e1ae88e3d83f4e70640b768/types_psutil-7.2.1.20260116.tar.gz", hash = "sha256:4661be5d5d7acd5d8afb02a92d05160a6cbb2ce74723245b51f7ba7dfdb9f981", size = 26121, upload-time = "2026-01-16T03:21:38.544Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/14/fc5fb0a6ddfadf68c27e254a02ececd4d5c7fdb0efcb7e7e917a183497fb/types_psutil-7.2.2.20260130.tar.gz", hash = "sha256:15b0ab69c52841cf9ce3c383e8480c620a4d13d6a8e22b16978ebddac5590950", size = 26535, upload-time = "2026-01-30T03:58:14.116Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/ad/0d2989c97204133e924fe594b042f229a51c42c2fef262d7f8bbb8b1d140/types_psutil-7.2.1.20260116-py3-none-any.whl", hash = "sha256:f516d2a71b28a4fd290f065cb30d7e7141ee605899aa592d8d4b80e45c9849be", size = 32822, upload-time = "2026-01-16T03:21:37.656Z" }, + { url = "https://files.pythonhosted.org/packages/17/d7/60974b7e31545d3768d1770c5fe6e093182c3bfd819429b33133ba6b3e89/types_psutil-7.2.2.20260130-py3-none-any.whl", hash = "sha256:15523a3caa7b3ff03ac7f9b78a6470a59f88f48df1d74a39e70e06d2a99107da", size = 32876, upload-time = "2026-01-30T03:58:13.172Z" }, ] [[package]] @@ -3889,11 +3885,11 @@ wheels = [ [[package]] name = "wcwidth" -version = "0.5.0" +version = "0.5.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/64/6e/62daec357285b927e82263a81f3b4c1790215bc77c42530ce4a69d501a43/wcwidth-0.5.0.tar.gz", hash = "sha256:f89c103c949a693bf563377b2153082bf58e309919dfb7f27b04d862a0089333", size = 246585, upload-time = "2026-01-27T01:31:44.942Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/62/a7c072fbfefb2980a00f99ca994279cb9ecf310cb2e6b2a4d2a28fe192b3/wcwidth-0.5.3.tar.gz", hash = "sha256:53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091", size = 157587, upload-time = "2026-01-31T03:52:10.92Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/3e/45583b67c2ff08ad5a582d316fcb2f11d6cf0a50c7707ac09d212d25bc98/wcwidth-0.5.0-py3-none-any.whl", hash = "sha256:1efe1361b83b0ff7877b81ba57c8562c99cf812158b778988ce17ec061095695", size = 93772, upload-time = "2026-01-27T01:31:43.432Z" }, + { url = "https://files.pythonhosted.org/packages/3c/c1/d73f12f8cdb1891334a2ccf7389eed244d3941e74d80dd220badb937f3fb/wcwidth-0.5.3-py3-none-any.whl", hash = "sha256:d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e", size = 92981, upload-time = "2026-01-31T03:52:09.14Z" }, ] [[package]] From 30171dfbc9e3e605617e44b8d2782fd28eaf8543 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Thu, 12 Feb 2026 11:55:48 +0300 Subject: [PATCH 02/30] chore(makefile): remove unused targets for formatting and type checking, move to pre-commit Simplifies the Makefile by removing redundant `format`, `check`, and `typecheck` targets. Streamlines build and maintenance process. --- Makefile | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Makefile b/Makefile index 9845e4e2..12e60654 100644 --- a/Makefile +++ b/Makefile @@ -106,17 +106,3 @@ migrate: clear @$(call RUN_SCRIPT,migrate) migration: clear make-migrations migrate - -format: clear - @ruff format - -check: clear - @ruff check - -typecheck: clear - @ty check - -precommit: clear - @ruff format - @ruff check - @ty check From 1f571f294ad649d12a130eeb82ea3486ee5bf4f6 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 01:35:36 +0300 Subject: [PATCH 03/30] feat(demo_data): add blog post generation to demo data script extend the demo data management command to include blog post and tag creation. enables easier setup for testing and showcasing blog-related features. --- engine/core/fixtures/demo.json | 61 ++++++++ .../fixtures/demo_blog_posts/about-us.en.md | 49 +++++++ .../fixtures/demo_blog_posts/about-us.ru.md | 49 +++++++ .../core/fixtures/demo_blog_posts/faq.en.md | 95 ++++++++++++ .../core/fixtures/demo_blog_posts/faq.ru.md | 95 ++++++++++++ .../demo_blog_posts/privacy-policy.en.md | 114 +++++++++++++++ .../demo_blog_posts/privacy-policy.ru.md | 114 +++++++++++++++ .../terms-and-conditions.en.md | 136 ++++++++++++++++++ .../terms-and-conditions.ru.md | 136 ++++++++++++++++++ engine/core/management/commands/demo_data.py | 79 ++++++++++ 10 files changed, 928 insertions(+) create mode 100644 engine/core/fixtures/demo_blog_posts/about-us.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/about-us.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/faq.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/faq.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/privacy-policy.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md diff --git a/engine/core/fixtures/demo.json b/engine/core/fixtures/demo.json index e2669881..8b7db235 100644 --- a/engine/core/fixtures/demo.json +++ b/engine/core/fixtures/demo.json @@ -647,6 +647,67 @@ "quantity": 4 } ], + "post_tags": [ + {"tag_name": "legal", "name": "Legal", "name_ru": "Правовые документы"}, + {"tag_name": "info", "name": "Information", "name_ru": "Информация"}, + {"tag_name": "company", "name": "Company", "name_ru": "О компании"} + ], + "blog_posts": [ + { + "title": "Privacy Policy", + "title_ru": "Политика конфиденциальности", + "meta_description": "Privacy policy for Schon Demo Store — how we handle your data", + "meta_description_ru": "Политика конфиденциальности Демо-магазина Schon — как мы обрабатываем ваши данные", + "is_static_page": true, + "tags": ["legal"], + "content_file": "privacy-policy" + }, + { + "title": "Terms & Conditions", + "title_ru": "Условия использования", + "meta_description": "Terms and conditions for using the Schon Demo Store", + "meta_description_ru": "Условия использования Демо-магазина Schon", + "is_static_page": true, + "tags": ["legal"], + "content_file": "terms-and-conditions" + }, + { + "title": "About Us", + "title_ru": "О нас", + "meta_description": "Learn about the Schon Demo Store and the Schon e-commerce platform", + "meta_description_ru": "Узнайте о Демо-магазине Schon и платформе электронной коммерции Schon", + "is_static_page": true, + "tags": ["company"], + "content_file": "about-us" + }, + { + "title": "FAQ", + "title_ru": "Часто задаваемые вопросы", + "meta_description": "Frequently asked questions about the Schon Demo Store", + "meta_description_ru": "Часто задаваемые вопросы о Демо-магазине Schon", + "is_static_page": true, + "tags": ["info"], + "content_file": "faq" + }, + { + "title": "Return Policy", + "title_ru": "Политика возврата", + "meta_description": "Return policy and refund information for the Schon Demo Store", + "meta_description_ru": "Политика возврата и информация о возмещении в Демо-магазине Schon", + "is_static_page": true, + "tags": ["legal", "info"], + "content_file": "return-policy" + }, + { + "title": "Shipping Information", + "title_ru": "Информация о доставке", + "meta_description": "Shipping methods, costs, and delivery details for the Schon Demo Store", + "meta_description_ru": "Способы доставки, стоимость и условия доставки в Демо-магазине Schon", + "is_static_page": true, + "tags": ["info"], + "content_file": "shipping-info" + } + ], "vendor": { "name": "Schon Demo", "markup_percent": 5 diff --git a/engine/core/fixtures/demo_blog_posts/about-us.en.md b/engine/core/fixtures/demo_blog_posts/about-us.en.md new file mode 100644 index 00000000..87881cec --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/about-us.en.md @@ -0,0 +1,49 @@ +# About Us + +**Welcome to the Schon Demo Store** + +> **You are viewing a live demonstration** of the [Schon e-commerce platform](https://schon.store). Everything you see here — the products, the brands, the prices — is fictional, designed to showcase the platform's capabilities. No real transactions take place. + +## What Is This Store? + +This demo store is a fully functional showcase of **Schon** — a modern, production-ready e-commerce backend built for businesses of all sizes. We've set it up as a luxury gemstone and jewelry boutique to demonstrate how Schon handles rich product catalogs, multi-language support, advanced inventory management, and more. + +Every gemstone you see, every brand description you read, and every price tag you encounter has been carefully crafted to demonstrate the platform's capabilities. From the 1.5-carat round brilliant diamond to the rare Paraiba tourmaline, each product showcases Schon's ability to handle detailed product data, high-resolution imagery, and complex category hierarchies. + +## About the Schon Platform + +**Schon** is a comprehensive e-commerce backend designed for businesses that demand reliability, flexibility, and performance. + +### Key Features + +- **Multi-language Support** — Full internationalization with 28 languages out of the box. Every product, category, and page can be translated, just like this demo store which runs in both English and Russian. +- **Advanced Product Management** — Rich product catalogs with attributes, variants, categories, brands, and tags. Support for digital and physical goods. +- **Inventory & Vendor Management** — Multi-vendor support with automated stock updates, markup management, and vendor-specific pricing. +- **Order Processing** — Complete order lifecycle management from cart to delivery, with support for multiple payment gateways. +- **Analytics & Reporting** — Built-in analytics with order tracking, revenue reports, and customer insights. +- **REST & GraphQL APIs** — Dual API support for maximum flexibility in building storefronts and integrations. +- **Admin Panel** — Powerful Django admin interface with custom dashboards, bulk operations, and real-time monitoring. +- **Security** — JWT authentication, role-based permissions, rate limiting, and industry-standard security practices. + +### Technical Excellence + +Schon is built with a modern technology stack: + +- **Django & Django REST Framework** — Battle-tested Python web framework +- **PostgreSQL with PostGIS** — Geospatial-capable database +- **Elasticsearch** — Full-text search with faceted filtering +- **Redis** — Caching and session management +- **Celery** — Asynchronous task processing +- **Docker** — Containerized deployment + +## Explore the Demo + +Feel free to browse the store, create an account, add items to your cart, and explore the full shopping experience. Remember, this is a demo — no real charges will be made and no real products will be shipped. + +## Ready to Build Your Store? + +If you like what you see, Schon can power your own e-commerce business. Visit [schon.store](https://schon.store) to learn about licensing options, get documentation, and start building your store today. + +--- + +*Powered by [Schon](https://schon.store) — E-commerce, done right.* diff --git a/engine/core/fixtures/demo_blog_posts/about-us.ru.md b/engine/core/fixtures/demo_blog_posts/about-us.ru.md new file mode 100644 index 00000000..1f1a434e --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/about-us.ru.md @@ -0,0 +1,49 @@ +# О нас + +**Добро пожаловать в Демо-магазин Schon** + +> **Вы просматриваете живую демонстрацию** [платформы электронной коммерции Schon](https://schon.store). Всё, что вы видите здесь — товары, бренды, цены — является вымышленным и предназначено для демонстрации возможностей платформы. Реальные транзакции не осуществляются. + +## Что это за магазин? + +Этот демонстрационный магазин — полнофункциональная витрина **Schon** — современного, готового к продуктивному использованию бэкенда электронной коммерции, созданного для бизнеса любого масштаба. Мы оформили его как бутик роскошных драгоценных камней и ювелирных изделий, чтобы продемонстрировать, как Schon работает с богатыми каталогами товаров, многоязычной поддержкой, расширенным управлением запасами и многим другим. + +Каждый драгоценный камень, каждое описание бренда и каждый ценник были тщательно подготовлены для демонстрации возможностей платформы. От бриллианта круглой огранки 1,5 карата до редкого турмалина параиба — каждый товар показывает способность Schon работать с детализированными данными о продуктах, изображениями высокого разрешения и сложными иерархиями категорий. + +## О платформе Schon + +**Schon** — это комплексный бэкенд для электронной коммерции, разработанный для бизнеса, которому требуется надёжность, гибкость и производительность. + +### Основные возможности + +- **Многоязычная поддержка** — Полная интернационализация с поддержкой 28 языков. Каждый товар, категория и страница могут быть переведены, как в этом демо-магазине, который работает на английском и русском языках. +- **Расширенное управление товарами** — Богатые каталоги товаров с атрибутами, вариантами, категориями, брендами и тегами. Поддержка цифровых и физических товаров. +- **Управление запасами и поставщиками** — Мультивендорная поддержка с автоматическим обновлением остатков, управлением наценками и ценообразованием по поставщикам. +- **Обработка заказов** — Полный жизненный цикл заказа от корзины до доставки с поддержкой нескольких платёжных шлюзов. +- **Аналитика и отчёты** — Встроенная аналитика с отслеживанием заказов, отчётами о выручке и данными о клиентах. +- **REST и GraphQL API** — Двойная поддержка API для максимальной гибкости при создании витрин и интеграций. +- **Панель администратора** — Мощный интерфейс администратора Django с пользовательскими панелями мониторинга, массовыми операциями и мониторингом в реальном времени. +- **Безопасность** — JWT-аутентификация, ролевые разрешения, ограничение запросов и стандартные отраслевые практики безопасности. + +### Техническое совершенство + +Schon построен на современном технологическом стеке: + +- **Django и Django REST Framework** — Проверенный временем веб-фреймворк на Python +- **PostgreSQL с PostGIS** — База данных с геопространственными возможностями +- **Elasticsearch** — Полнотекстовый поиск с фасетной фильтрацией +- **Redis** — Кэширование и управление сессиями +- **Celery** — Асинхронная обработка задач +- **Docker** — Контейнеризированное развёртывание + +## Исследуйте демо + +Просматривайте магазин, создавайте учётную запись, добавляйте товары в корзину и изучайте полный покупательский опыт. Помните, что это демонстрация — реальные платежи не взимаются, реальные товары не отправляются. + +## Готовы создать свой магазин? + +Если вам понравилось увиденное, Schon может стать основой вашего собственного бизнеса в сфере электронной коммерции. Посетите [schon.store](https://schon.store), чтобы узнать о вариантах лицензирования, получить документацию и начать строить свой магазин уже сегодня. + +--- + +*Работает на [Schon](https://schon.store) — электронная коммерция, сделанная правильно.* diff --git a/engine/core/fixtures/demo_blog_posts/faq.en.md b/engine/core/fixtures/demo_blog_posts/faq.en.md new file mode 100644 index 00000000..73064e12 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/faq.en.md @@ -0,0 +1,95 @@ +# Frequently Asked Questions + +**Schon Demo Store** + +> **Demo Notice:** This FAQ pertains to the Schon Demo Store, a demonstration environment for the [Schon e-commerce platform](https://schon.store). All products and transactions are fictional. + +## General Questions + +### What is this website? + +This is a demonstration store powered by the Schon e-commerce platform. It showcases the platform's capabilities using a fictional luxury gemstone and jewelry catalog. No real products are sold, and no real transactions are processed. + +### Can I actually buy the gemstones shown here? + +No. All products displayed in this store are fictional. The names, descriptions, prices, and images are for demonstration purposes only. No real goods are available for purchase. + +### Is this store connected to a real payment system? + +No. The demo store does not process real payments. Any checkout or payment flows you encounter are simulated to demonstrate the platform's e-commerce capabilities. + +### Can I create an account? + +Yes, you can create an account to explore the full range of features, including adding products to your cart, managing wishlists, and simulating the checkout process. Demo accounts may be periodically reset. + +## About the Products + +### Are the gemstone descriptions accurate? + +The product descriptions are written to be realistic and informative for demonstration purposes. While they reference real gemstone types, grades, and origins, the specific products listed do not exist. No gemological certificates mentioned in the descriptions are real. + +### Why are some products very expensive? + +The pricing is designed to simulate a realistic luxury gemstone market. Prices range from affordable semi-precious stones to rare investment-grade gems to demonstrate how the platform handles different price tiers and product categories. + +### How are the product images generated? + +Product images are used for demonstration purposes and may not accurately represent real gemstones matching the given descriptions. + +## About the Schon Platform + +### What is Schon? + +Schon is a production-ready e-commerce backend built with Django. It provides a complete solution for online stores, including product management, order processing, inventory control, multi-language support, and powerful APIs. + +### What technologies does Schon use? + +Schon is built on Django and Django REST Framework, with PostgreSQL (including PostGIS for geospatial features), Redis for caching, Elasticsearch for search, and Celery for background tasks. It supports both REST and GraphQL APIs. + +### Does Schon support multiple languages? + +Yes. Schon supports 28 languages out of the box. This demo store demonstrates bilingual support (English and Russian), but the platform can handle any combination of supported languages. + +### Can I use Schon for my own store? + +Absolutely. Schon is available for licensing. Visit [schon.store](https://schon.store) to learn more about pricing, features, and how to get started. + +### Does Schon include a storefront? + +Schon is a backend platform that provides REST and GraphQL APIs. It can power any frontend — whether it's a custom-built storefront, a mobile app, or a third-party integration. Reference storefront implementations are available. + +### What payment gateways does Schon support? + +Schon has an extensible payment gateway architecture. Integration with specific payment providers can be configured based on your business requirements. + +## Technical Questions + +### Can I access the API? + +Yes. The demo store exposes both REST and GraphQL APIs: + +- **REST API:** Available at the store's base URL +- **GraphQL:** Available at `/graphql/` +- **Swagger Documentation:** Available at `/docs/swagger/` + +### What about mobile apps? + +Schon's API-first design makes it ideal for powering mobile applications. The same APIs that serve the web storefront can be used by iOS and Android apps. + +### How is the demo data generated? + +The demo store uses a built-in management command that creates fictional products, brands, categories, users, and orders. This tool can be used to quickly populate a new Schon installation for testing and evaluation. + +## Contact + +### How can I learn more about Schon? + +Visit [schon.store](https://schon.store) for comprehensive documentation, pricing information, and contact details. + +### I found a bug in the demo. How can I report it? + +We appreciate your feedback. Please contact us at support@demo.schon.store with details about the issue you encountered. + +--- + +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/faq.ru.md b/engine/core/fixtures/demo_blog_posts/faq.ru.md new file mode 100644 index 00000000..eeb32b94 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/faq.ru.md @@ -0,0 +1,95 @@ +# Часто задаваемые вопросы + +**Демо-магазин Schon** + +> **Уведомление:** Данный раздел FAQ относится к Демо-магазину Schon — демонстрационной среде для [платформы электронной коммерции Schon](https://schon.store). Все товары и транзакции являются вымышленными. + +## Общие вопросы + +### Что представляет собой этот сайт? + +Это демонстрационный магазин, работающий на платформе электронной коммерции Schon. Он демонстрирует возможности платформы на примере вымышленного каталога роскошных драгоценных камней и ювелирных изделий. Реальные товары не продаются, реальные транзакции не обрабатываются. + +### Можно ли купить представленные здесь драгоценные камни? + +Нет. Все товары, представленные в этом магазине, являются вымышленными. Названия, описания, цены и изображения предназначены исключительно для демонстрации. Реальные товары не продаются. + +### Подключён ли этот магазин к реальной платёжной системе? + +Нет. Демо-магазин не обрабатывает реальные платежи. Все процессы оформления заказа и оплаты, которые вы встретите, являются симуляцией, демонстрирующей возможности электронной коммерции платформы. + +### Можно ли создать учётную запись? + +Да, вы можете создать учётную запись для изучения полного набора функций, включая добавление товаров в корзину, управление списками желаний и симуляцию процесса оформления заказа. Демонстрационные учётные записи могут периодически сбрасываться. + +## О товарах + +### Соответствуют ли описания драгоценных камней действительности? + +Описания товаров написаны реалистично и информативно в демонстрационных целях. Хотя в них упоминаются реальные типы, классы и происхождение драгоценных камней, конкретные перечисленные товары не существуют. Геммологические сертификаты, упомянутые в описаниях, не являются реальными. + +### Почему некоторые товары очень дорогие? + +Ценообразование разработано для имитации реального рынка роскошных драгоценных камней. Цены варьируются от доступных полудрагоценных камней до редких камней инвестиционного качества, чтобы продемонстрировать, как платформа работает с различными ценовыми категориями и типами товаров. + +### Как созданы изображения товаров? + +Изображения товаров используются в демонстрационных целях и могут неточно соответствовать реальным драгоценным камням указанных в описаниях характеристик. + +## О платформе Schon + +### Что такое Schon? + +Schon — это готовый к продуктивному использованию бэкенд электронной коммерции, построенный на Django. Он предоставляет комплексное решение для интернет-магазинов, включая управление товарами, обработку заказов, контроль запасов, многоязычную поддержку и мощные API. + +### Какие технологии использует Schon? + +Schon построен на Django и Django REST Framework с использованием PostgreSQL (включая PostGIS для геопространственных функций), Redis для кэширования, Elasticsearch для поиска и Celery для фоновых задач. Поддерживаются как REST, так и GraphQL API. + +### Поддерживает ли Schon несколько языков? + +Да. Schon поддерживает 28 языков. Этот демо-магазин демонстрирует двуязычную поддержку (английский и русский), но платформа может работать с любой комбинацией поддерживаемых языков. + +### Могу ли я использовать Schon для своего магазина? + +Безусловно. Schon доступен для лицензирования. Посетите [schon.store](https://schon.store), чтобы узнать больше о ценах, возможностях и о том, как начать работу. + +### Включает ли Schon витрину магазина? + +Schon является бэкенд-платформой, предоставляющей REST и GraphQL API. Он может обеспечивать работу любого фронтенда — будь то витрина собственной разработки, мобильное приложение или сторонняя интеграция. Доступны референсные реализации витрин. + +### Какие платёжные шлюзы поддерживает Schon? + +Schon имеет расширяемую архитектуру платёжных шлюзов. Интеграция с конкретными платёжными провайдерами настраивается в соответствии с требованиями вашего бизнеса. + +## Технические вопросы + +### Можно ли получить доступ к API? + +Да. Демо-магазин предоставляет как REST, так и GraphQL API: + +- **REST API:** Доступен по базовому URL магазина +- **GraphQL:** Доступен по адресу `/graphql/` +- **Документация Swagger:** Доступна по адресу `/docs/swagger/` + +### Как насчёт мобильных приложений? + +API-ориентированный дизайн Schon делает его идеальным для мобильных приложений. Те же API, которые обслуживают веб-витрину, могут использоваться приложениями iOS и Android. + +### Как генерируются демонстрационные данные? + +Демо-магазин использует встроенную команду управления, которая создаёт вымышленные товары, бренды, категории, пользователей и заказы. Этот инструмент позволяет быстро наполнить новую установку Schon для тестирования и ознакомления. + +## Контакты + +### Как узнать больше о Schon? + +Посетите [schon.store](https://schon.store) для получения подробной документации, информации о ценах и контактных данных. + +### Я обнаружил ошибку в демо. Как я могу сообщить о ней? + +Мы ценим вашу обратную связь. Пожалуйста, свяжитесь с нами по адресу support@demo.schon.store с описанием обнаруженной проблемы. + +--- + +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md new file mode 100644 index 00000000..93ea3d7f --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md @@ -0,0 +1,114 @@ +# Privacy Policy + +**Schon Demo Store** +*Last updated: February 2026* + +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real transactions are processed, and no actual personal data is collected through purchases. This privacy policy is provided as an example of a production-ready document. If you are interested in deploying Schon for your own store, please visit [schon.store](https://schon.store). + +## 1. Introduction + +Welcome to Schon Demo Store ("we," "our," or "us"). We are committed to protecting your privacy and ensuring the security of your personal information. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you visit our website and use our services. + +By accessing or using our website, you agree to the terms of this Privacy Policy. If you do not agree with the practices described herein, please do not use our services. + +## 2. Information We Collect + +### 2.1 Information You Provide Directly + +- **Account Information:** When you create an account, we collect your name, email address, and password. +- **Order Information:** When placing an order, we collect your shipping address, billing address, and payment details. +- **Communication Data:** When you contact us, we collect the content of your messages, your email address, and any other information you provide. + +### 2.2 Information Collected Automatically + +- **Usage Data:** We collect information about how you interact with our website, including pages visited, time spent, and navigation patterns. +- **Device Information:** We collect information about the device you use to access our website, including device type, operating system, browser type, and screen resolution. +- **Log Data:** Our servers automatically record information such as your IP address, access times, and referring URLs. + +### 2.3 Cookies and Similar Technologies + +We use cookies and similar tracking technologies to enhance your browsing experience and analyze website traffic. For more details, see Section 7 below. + +## 3. How We Use Your Information + +We use the collected information for the following purposes: + +- **Order Processing:** To process and fulfill your orders, including shipping and payment processing. +- **Account Management:** To create and manage your user account. +- **Customer Support:** To respond to your inquiries and provide assistance. +- **Personalization:** To personalize your shopping experience and recommend products. +- **Analytics:** To analyze website usage and improve our services. +- **Marketing:** To send promotional communications, subject to your consent and applicable laws. +- **Legal Compliance:** To comply with legal obligations and enforce our terms of service. + +## 4. Information Sharing and Disclosure + +We do not sell your personal information. We may share your information in the following circumstances: + +- **Service Providers:** We share information with third-party service providers who assist us in operating our website, processing payments, shipping orders, and providing customer support. +- **Legal Requirements:** We may disclose information when required by law, regulation, or legal process. +- **Business Transfers:** In the event of a merger, acquisition, or sale of assets, your information may be transferred as part of the transaction. +- **Consent:** We may share information with your explicit consent. + +## 5. Data Security + +We implement industry-standard security measures to protect your personal information, including: + +- Encryption of data in transit using TLS/SSL protocols +- Secure storage of sensitive data with encryption at rest +- Regular security audits and vulnerability assessments +- Access controls limiting data access to authorized personnel only + +While we strive to protect your information, no method of transmission or storage is completely secure. We cannot guarantee absolute security. + +## 6. Data Retention + +We retain your personal information for as long as your account is active or as needed to provide you with our services. We may retain certain information for longer periods as required by law or for legitimate business purposes. + +## 7. Cookies + +### 7.1 Types of Cookies We Use + +- **Essential Cookies:** Required for the website to function properly, including session management and security. +- **Analytics Cookies:** Help us understand how visitors interact with our website. +- **Preference Cookies:** Remember your settings and preferences for a better experience. + +### 7.2 Managing Cookies + +You can control cookies through your browser settings. Disabling certain cookies may affect the functionality of our website. + +## 8. Your Rights + +Depending on your location, you may have the following rights regarding your personal data: + +- **Access:** Request a copy of the personal data we hold about you. +- **Correction:** Request correction of inaccurate or incomplete data. +- **Deletion:** Request deletion of your personal data, subject to legal obligations. +- **Portability:** Request a copy of your data in a portable format. +- **Objection:** Object to the processing of your data for certain purposes. +- **Withdrawal of Consent:** Withdraw your consent at any time where processing is based on consent. + +To exercise these rights, please contact us using the information provided in Section 11. + +## 9. International Data Transfers + +Your information may be transferred to and processed in countries other than your country of residence. We ensure appropriate safeguards are in place to protect your data in accordance with applicable laws. + +## 10. Children's Privacy + +Our services are not directed to individuals under the age of 16. We do not knowingly collect personal information from children. If we become aware that we have collected data from a child, we will take steps to delete it promptly. + +## 11. Contact Information + +If you have questions about this Privacy Policy or wish to exercise your data rights, please contact us: + +- **Email:** privacy@demo.schon.store +- **Address:** Schon Demo Store, Demo District, Internet City + +## 12. Changes to This Policy + +We may update this Privacy Policy from time to time. We will notify you of any material changes by posting the updated policy on our website and updating the "Last updated" date. Your continued use of our services after such changes constitutes your acceptance of the updated policy. + +--- + +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md new file mode 100644 index 00000000..69d12b01 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md @@ -0,0 +1,114 @@ +# Политика конфиденциальности + +**Демо-магазин Schon** +*Дата последнего обновления: февраль 2026 г.* + +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные транзакции не обрабатываются, персональные данные в рамках покупок не собираются. Настоящая политика конфиденциальности представлена в качестве примера документа, готового к использованию в рабочей среде. Если вы заинтересованы в развёртывании Schon для вашего магазина, посетите [schon.store](https://schon.store). + +## 1. Введение + +Добро пожаловать в Демо-магазин Schon («мы», «наш» или «нас»). Мы стремимся защищать вашу конфиденциальность и обеспечивать безопасность ваших персональных данных. Настоящая Политика конфиденциальности разъясняет, каким образом мы собираем, используем, раскрываем и защищаем вашу информацию при посещении нашего веб-сайта и использовании наших услуг. + +Используя наш веб-сайт, вы соглашаетесь с условиями настоящей Политики конфиденциальности. Если вы не согласны с описанными здесь практиками, пожалуйста, воздержитесь от использования наших услуг. + +## 2. Собираемая информация + +### 2.1 Информация, предоставляемая вами напрямую + +- **Данные учётной записи:** При создании учётной записи мы собираем ваше имя, адрес электронной почты и пароль. +- **Данные заказа:** При оформлении заказа мы собираем адрес доставки, адрес для выставления счёта и платёжные реквизиты. +- **Данные переписки:** При обращении к нам мы собираем содержание ваших сообщений, адрес электронной почты и иную предоставленную вами информацию. + +### 2.2 Автоматически собираемая информация + +- **Данные об использовании:** Мы собираем информацию о вашем взаимодействии с веб-сайтом, включая посещённые страницы, время нахождения на сайте и шаблоны навигации. +- **Данные об устройстве:** Мы собираем информацию об устройстве, с которого вы заходите на сайт, включая тип устройства, операционную систему, тип браузера и разрешение экрана. +- **Данные журналов:** Наши серверы автоматически фиксируют информацию, такую как ваш IP-адрес, время доступа и URL-адреса переходов. + +### 2.3 Файлы cookie и аналогичные технологии + +Мы используем файлы cookie и аналогичные технологии отслеживания для улучшения работы с сайтом и анализа трафика. Подробнее см. раздел 7. + +## 3. Использование информации + +Собранная информация используется в следующих целях: + +- **Обработка заказов:** Для оформления и выполнения заказов, включая доставку и обработку платежей. +- **Управление учётной записью:** Для создания и ведения вашей учётной записи. +- **Поддержка клиентов:** Для ответа на ваши обращения и оказания помощи. +- **Персонализация:** Для персонализации покупательского опыта и рекомендации товаров. +- **Аналитика:** Для анализа использования сайта и улучшения наших услуг. +- **Маркетинг:** Для отправки рекламных сообщений при наличии вашего согласия и в соответствии с применимым законодательством. +- **Соблюдение законодательства:** Для выполнения правовых обязательств и обеспечения соблюдения условий обслуживания. + +## 4. Передача и раскрытие информации + +Мы не продаём ваши персональные данные. Мы можем передавать вашу информацию в следующих случаях: + +- **Поставщики услуг:** Мы передаём информацию сторонним поставщикам услуг, которые содействуют нам в работе сайта, обработке платежей, доставке заказов и поддержке клиентов. +- **Требования законодательства:** Мы можем раскрывать информацию в случаях, предусмотренных законом, нормативными актами или в рамках судебного процесса. +- **Реорганизация бизнеса:** В случае слияния, поглощения или продажи активов ваша информация может быть передана в рамках сделки. +- **Согласие:** Мы можем передавать информацию при наличии вашего явного согласия. + +## 5. Безопасность данных + +Мы применяем стандартные отраслевые меры безопасности для защиты ваших персональных данных, включая: + +- Шифрование данных при передаче с использованием протоколов TLS/SSL +- Безопасное хранение конфиденциальных данных с шифрованием +- Регулярные аудиты безопасности и оценки уязвимостей +- Контроль доступа, ограничивающий доступ к данным уполномоченным сотрудникам + +Несмотря на наши усилия по защите вашей информации, ни один метод передачи или хранения данных не является абсолютно безопасным. Мы не можем гарантировать полную безопасность. + +## 6. Сроки хранения данных + +Мы храним ваши персональные данные в течение срока действия вашей учётной записи или столько, сколько необходимо для предоставления услуг. Отдельные данные могут храниться дольше в соответствии с требованиями законодательства или для обоснованных деловых целей. + +## 7. Файлы cookie + +### 7.1 Типы используемых файлов cookie + +- **Необходимые:** Обязательны для корректной работы сайта, включая управление сессиями и безопасность. +- **Аналитические:** Помогают понять, как посетители взаимодействуют с сайтом. +- **Функциональные:** Сохраняют ваши настройки и предпочтения для улучшения работы. + +### 7.2 Управление файлами cookie + +Вы можете управлять файлами cookie через настройки браузера. Отключение некоторых файлов cookie может повлиять на функциональность сайта. + +## 8. Ваши права + +В зависимости от вашего местонахождения вы можете обладать следующими правами в отношении персональных данных: + +- **Доступ:** Запросить копию хранящихся у нас персональных данных. +- **Исправление:** Запросить исправление неточных или неполных данных. +- **Удаление:** Запросить удаление ваших персональных данных с учётом правовых обязательств. +- **Переносимость:** Запросить копию данных в переносимом формате. +- **Возражение:** Возразить против обработки данных в определённых целях. +- **Отзыв согласия:** Отозвать согласие в любое время, если обработка основана на согласии. + +Для реализации указанных прав обратитесь к нам, используя контактные данные из раздела 11. + +## 9. Международная передача данных + +Ваша информация может передаваться и обрабатываться в странах, отличных от страны вашего проживания. Мы обеспечиваем надлежащие гарантии защиты ваших данных в соответствии с применимым законодательством. + +## 10. Конфиденциальность детей + +Наши услуги не предназначены для лиц младше 16 лет. Мы сознательно не собираем персональные данные детей. Если нам станет известно о сборе данных ребёнка, мы незамедлительно примем меры по их удалению. + +## 11. Контактная информация + +Если у вас есть вопросы о настоящей Политике конфиденциальности или вы хотите реализовать свои права в отношении данных, свяжитесь с нами: + +- **Электронная почта:** privacy@demo.schon.store +- **Адрес:** Демо-магазин Schon, Демонстрационный район, Интернет-сити + +## 12. Изменения настоящей Политики + +Мы можем обновлять настоящую Политику конфиденциальности. О любых существенных изменениях мы уведомим вас путём размещения обновлённой политики на нашем сайте и обновления даты «Последнее обновление». Продолжение использования наших услуг после внесения таких изменений означает ваше согласие с обновлённой политикой. + +--- + +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md new file mode 100644 index 00000000..23a3235e --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md @@ -0,0 +1,136 @@ +# Terms & Conditions + +**Schon Demo Store** +*Last updated: February 2026* + +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real transactions are processed, no real products are sold, and no real money is charged. These Terms & Conditions are provided as an example of a production-ready legal document. To deploy Schon for your own store, visit [schon.store](https://schon.store). + +## 1. Acceptance of Terms + +By accessing and using the Schon Demo Store website ("Website"), you accept and agree to be bound by these Terms & Conditions ("Terms"). If you do not agree to these Terms, you must not use the Website. + +## 2. Definitions + +- **"Store"** refers to the Schon Demo Store and its associated services. +- **"User," "you," or "your"** refers to any individual or entity accessing the Website. +- **"Products"** refers to all items listed for sale on the Website. +- **"We," "us," or "our"** refers to the Schon Demo Store operator. + +## 3. Demo Environment Disclaimer + +This Website is a **demonstration environment** for the Schon e-commerce platform. Please note: + +- All products, brands, descriptions, and prices displayed are **entirely fictional**. +- No real orders will be shipped, and no real payment will be processed. +- User accounts created on this demo may be periodically reset or removed. +- This demo showcases the capabilities of the Schon platform for evaluation purposes. + +## 4. User Accounts + +### 4.1 Registration + +To access certain features, you may need to create an account. You agree to provide accurate and complete information during registration and to keep your account credentials secure. + +### 4.2 Account Responsibility + +You are responsible for all activities that occur under your account. You must notify us immediately of any unauthorized use of your account. + +### 4.3 Account Termination + +We reserve the right to suspend or terminate accounts at our discretion, particularly in the demo environment where periodic resets may occur. + +## 5. Products and Pricing + +### 5.1 Product Information + +We strive to display accurate product information, including descriptions, images, and specifications. However, as this is a demo environment, all product data is fictional and for illustrative purposes only. + +### 5.2 Pricing + +All prices displayed are in the store's configured currency and are fictional. Prices may be changed without notice as part of demo updates. + +### 5.3 Availability + +Product availability shown in the demo is simulated and does not reflect real inventory. + +## 6. Orders and Payments + +### 6.1 Order Process + +The order process on this demo site simulates a real e-commerce transaction flow. No actual goods are shipped and no actual payments are collected. + +### 6.2 Order Confirmation + +Order confirmations generated by the demo are simulated and do not constitute a binding contract for the sale of goods. + +### 6.3 Payment Processing + +No real payment processing occurs on the demo site. Any payment forms displayed are for demonstration purposes only. + +## 7. Intellectual Property + +### 7.1 Store Content + +All content on this Website, including text, graphics, logos, and software, is the property of Schon or its licensors and is protected by applicable intellectual property laws. + +### 7.2 Limited License + +You are granted a limited, non-exclusive, non-transferable license to access and use the Website for personal, non-commercial evaluation purposes. + +### 7.3 Restrictions + +You may not: + +- Reproduce, distribute, or modify the Website content without our written consent +- Use the Website for any illegal or unauthorized purpose +- Attempt to gain unauthorized access to the Website's systems or networks +- Use automated tools to scrape or extract data from the Website + +## 8. Limitation of Liability + +### 8.1 Disclaimer of Warranties + +The Website and its content are provided "as is" and "as available" without warranties of any kind, express or implied. We disclaim all warranties, including but not limited to merchantability, fitness for a particular purpose, and non-infringement. + +### 8.2 Limitation + +To the fullest extent permitted by law, we shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising from your use of the Website or inability to use the Website. + +### 8.3 Maximum Liability + +Our total liability for any claims arising from your use of the Website shall not exceed the amount you have paid to us in the twelve (12) months preceding the claim. In the case of this demo environment, that amount is zero. + +## 9. Indemnification + +You agree to indemnify, defend, and hold harmless the Store, its operators, and affiliates from any claims, damages, losses, and expenses arising from your use of the Website or violation of these Terms. + +## 10. Third-Party Links + +The Website may contain links to third-party websites. We are not responsible for the content or practices of these external sites and recommend reviewing their respective terms and privacy policies. + +## 11. Governing Law + +These Terms shall be governed by and construed in accordance with the laws of the jurisdiction in which the Store operator is established, without regard to conflict of law principles. + +## 12. Dispute Resolution + +Any disputes arising from these Terms or use of the Website shall be resolved through good-faith negotiation. If negotiation fails, disputes shall be submitted to binding arbitration in accordance with the applicable rules of the jurisdiction. + +## 13. Modifications + +We reserve the right to modify these Terms at any time. Changes will be effective upon posting to the Website. Your continued use of the Website after modifications constitutes acceptance of the updated Terms. + +## 14. Severability + +If any provision of these Terms is found to be unenforceable, the remaining provisions shall continue in full force and effect. + +## 15. Contact Information + +For questions about these Terms, please contact us: + +- **Email:** legal@demo.schon.store +- **Address:** Schon Demo Store, Demo District, Internet City + +--- + +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md new file mode 100644 index 00000000..d929db9f --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md @@ -0,0 +1,136 @@ +# Условия использования + +**Демо-магазин Schon** +*Дата последнего обновления: февраль 2026 г.* + +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные транзакции не обрабатываются, реальные товары не продаются, реальные платежи не взимаются. Настоящие Условия использования представлены в качестве примера юридического документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). + +## 1. Принятие условий + +Получая доступ к веб-сайту Демо-магазина Schon («Веб-сайт») и используя его, вы принимаете и соглашаетесь соблюдать настоящие Условия использования («Условия»). Если вы не согласны с настоящими Условиями, вы не должны использовать Веб-сайт. + +## 2. Определения + +- **«Магазин»** означает Демо-магазин Schon и связанные с ним услуги. +- **«Пользователь», «вы» или «ваш»** означает любое физическое или юридическое лицо, получающее доступ к Веб-сайту. +- **«Товары»** означает все позиции, представленные к продаже на Веб-сайте. +- **«Мы», «нас» или «наш»** означает оператора Демо-магазина Schon. + +## 3. Оговорка о демонстрационной среде + +Данный Веб-сайт является **демонстрационной средой** платформы электронной коммерции Schon. Обратите внимание: + +- Все товары, бренды, описания и цены, отображаемые на сайте, являются **полностью вымышленными**. +- Реальные заказы не отправляются, реальные платежи не обрабатываются. +- Учётные записи, созданные в демонстрационной среде, могут периодически сбрасываться или удаляться. +- Данная демонстрация представляет возможности платформы Schon для ознакомительных целей. + +## 4. Учётные записи пользователей + +### 4.1 Регистрация + +Для доступа к определённым функциям может потребоваться создание учётной записи. Вы обязуетесь предоставлять точную и полную информацию при регистрации и обеспечивать безопасность учётных данных. + +### 4.2 Ответственность за учётную запись + +Вы несёте ответственность за все действия, совершённые с использованием вашей учётной записи. Вы обязаны незамедлительно уведомить нас о любом несанкционированном использовании вашей учётной записи. + +### 4.3 Прекращение действия учётной записи + +Мы оставляем за собой право приостановить или прекратить действие учётных записей по своему усмотрению, в особенности в демонстрационной среде, где могут проводиться периодические сбросы. + +## 5. Товары и цены + +### 5.1 Информация о товарах + +Мы стремимся отображать точную информацию о товарах, включая описания, изображения и характеристики. Однако, поскольку это демонстрационная среда, все данные о товарах являются вымышленными и служат исключительно для иллюстрации. + +### 5.2 Цены + +Все отображаемые цены указаны в настроенной валюте магазина и являются вымышленными. Цены могут изменяться без уведомления в рамках обновлений демонстрации. + +### 5.3 Наличие + +Информация о наличии товаров в демонстрационной среде является симулированной и не отражает реальных запасов. + +## 6. Заказы и платежи + +### 6.1 Процесс оформления заказа + +Процесс оформления заказа на данном демонстрационном сайте имитирует реальный процесс электронной коммерции. Реальные товары не отправляются, реальные платежи не взимаются. + +### 6.2 Подтверждение заказа + +Подтверждения заказов, формируемые демонстрационной средой, являются симулированными и не представляют собой обязывающий договор купли-продажи товаров. + +### 6.3 Обработка платежей + +На демонстрационном сайте не осуществляется реальная обработка платежей. Все отображаемые платёжные формы предназначены исключительно для демонстрации. + +## 7. Интеллектуальная собственность + +### 7.1 Контент магазина + +Весь контент на данном Веб-сайте, включая тексты, графику, логотипы и программное обеспечение, является собственностью Schon или его лицензиаров и защищён применимым законодательством об интеллектуальной собственности. + +### 7.2 Ограниченная лицензия + +Вам предоставляется ограниченная, неисключительная, непередаваемая лицензия на доступ и использование Веб-сайта в личных, некоммерческих ознакомительных целях. + +### 7.3 Ограничения + +Запрещается: + +- Воспроизводить, распространять или модифицировать контент Веб-сайта без нашего письменного согласия +- Использовать Веб-сайт в незаконных или несанкционированных целях +- Предпринимать попытки несанкционированного доступа к системам или сетям Веб-сайта +- Использовать автоматизированные инструменты для извлечения данных с Веб-сайта + +## 8. Ограничение ответственности + +### 8.1 Отказ от гарантий + +Веб-сайт и его контент предоставляются «как есть» и «по мере доступности» без каких-либо гарантий, явных или подразумеваемых. Мы отказываемся от всех гарантий, включая, помимо прочего, гарантии товарной пригодности, пригодности для определённой цели и ненарушения прав. + +### 8.2 Ограничение + +В максимальной степени, допускаемой законом, мы не несём ответственности за косвенные, случайные, специальные, последующие или штрафные убытки, возникающие в связи с использованием Веб-сайта или невозможностью его использования. + +### 8.3 Максимальная ответственность + +Наша совокупная ответственность по любым требованиям, возникающим из использования вами Веб-сайта, не превышает суммы, уплаченной вами нам в течение двенадцати (12) месяцев, предшествующих предъявлению требования. В случае данной демонстрационной среды эта сумма равна нулю. + +## 9. Возмещение убытков + +Вы обязуетесь возместить убытки, защитить и оградить Магазин, его операторов и аффилированных лиц от любых претензий, убытков, потерь и расходов, возникающих в связи с использованием вами Веб-сайта или нарушением настоящих Условий. + +## 10. Ссылки на сторонние ресурсы + +Веб-сайт может содержать ссылки на сторонние веб-сайты. Мы не несём ответственности за контент или практики данных внешних сайтов и рекомендуем ознакомиться с их условиями и политиками конфиденциальности. + +## 11. Применимое право + +Настоящие Условия регулируются и толкуются в соответствии с законодательством юрисдикции, в которой зарегистрирован оператор Магазина, без учёта коллизионных норм. + +## 12. Разрешение споров + +Любые споры, возникающие из настоящих Условий или использования Веб-сайта, разрешаются путём добросовестных переговоров. В случае неудачи переговоров споры передаются на обязательное арбитражное разбирательство в соответствии с применимыми правилами юрисдикции. + +## 13. Изменения + +Мы оставляем за собой право изменять настоящие Условия в любое время. Изменения вступают в силу с момента их публикации на Веб-сайте. Продолжение использования Веб-сайта после внесения изменений означает принятие обновлённых Условий. + +## 14. Делимость + +Если какое-либо положение настоящих Условий будет признано недействительным, остальные положения сохраняют полную юридическую силу. + +## 15. Контактная информация + +По вопросам, связанным с настоящими Условиями, обращайтесь: + +- **Электронная почта:** legal@demo.schon.store +- **Адрес:** Демо-магазин Schon, Демонстрационный район, Интернет-сити + +--- + +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 96e2fb73..99285248 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -11,6 +11,7 @@ from django.core.management.base import BaseCommand from django.db import transaction from django.utils import timezone +from engine.blog.models import Post, PostTag from engine.core.models import ( Address, Attribute, @@ -33,6 +34,7 @@ from engine.vibes_auth.models import Group, User DEMO_EMAIL_DOMAIN = "demo.schon.store" DEMO_VENDOR_NAME = "GemSource Global" DEMO_IMAGES_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_products_images" +DEMO_BLOG_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_blog_posts" class Command(BaseCommand): @@ -161,6 +163,10 @@ class Command(BaseCommand): wishlist_count = self._create_demo_wishlists(users, products) self.stdout.write(self.style.SUCCESS(f"Created {wishlist_count} wishlists")) + self.stdout.write("Creating blog posts...") + blog_count = self._create_blog_posts() + self.stdout.write(self.style.SUCCESS(f"Created {blog_count} blog posts")) + self.stdout.write( self.style.SUCCESS(f"Created staff {self.staff_user.email} user") ) @@ -190,6 +196,15 @@ class Command(BaseCommand): Wishlist.objects.filter(user__in=demo_users).delete() + post_titles = [p["title"] for p in self.demo_data.get("blog_posts", [])] + blog_count = Post.objects.filter(title__in=post_titles).delete()[0] + self.stdout.write(f" Removed blog posts: {blog_count}") + + post_tag_names = [ + t["tag_name"] for t in self.demo_data.get("post_tags", []) + ] + PostTag.objects.filter(tag_name__in=post_tag_names).delete() + demo_users.delete() try: @@ -254,6 +269,7 @@ class Command(BaseCommand): self.stdout.write(f" Products: {Product.objects.count()}") self.stdout.write(f" Categories: {Category.objects.count()}") self.stdout.write(f" Brands: {Brand.objects.count()}") + self.stdout.write(f" Blog posts: {Post.objects.count()}") self.stdout.write(f" Users created: {len(users)}") self.stdout.write(f" Orders created: {len(orders)}") self.stdout.write(f" Refunded orders: {refunded_count}") @@ -585,3 +601,66 @@ class Command(BaseCommand): users_with_wishlists.add(user.id) return len(users_with_wishlists) + + @transaction.atomic + def _create_blog_posts(self) -> int: + data = self.demo_data + author = self.staff_user + count = 0 + + for tag_data in data.get("post_tags", []): + tag, created = PostTag.objects.get_or_create( + tag_name=tag_data["tag_name"], + defaults={"name": tag_data["name"]}, + ) + if created and "name_ru" in tag_data: + tag.name_ru_ru = tag_data["name_ru"] + tag.save() + + for post_data in data.get("blog_posts", []): + if Post.objects.filter(title=post_data["title"]).exists(): + continue + + content_en = self._load_blog_content(post_data["content_file"], "en") + content_ru = self._load_blog_content(post_data["content_file"], "ru") + + if not content_en: + self.stdout.write( + self.style.WARNING( + f" No content found for {post_data['content_file']}, skipping..." + ) + ) + continue + + post = Post( + author=author, + title=post_data["title"], + content=content_en, + meta_description=post_data.get("meta_description", ""), + is_static_page=post_data.get("is_static_page", False), + ) + if "title_ru" in post_data: + post.title_ru_ru = post_data["title_ru"] + if content_ru: + post.content_ru_ru = content_ru + if "meta_description_ru" in post_data: + post.meta_description_ru_ru = post_data["meta_description_ru"] + post.save() + + for tag_name in post_data.get("tags", []): + try: + tag = PostTag.objects.get(tag_name=tag_name) + post.tags.add(tag) + except PostTag.DoesNotExist: + pass + + count += 1 + + return count + + def _load_blog_content(self, content_file: str, lang: str) -> str | None: + file_path = DEMO_BLOG_DIR / f"{content_file}.{lang}.md" + if not file_path.exists(): + return None + with open(file_path, encoding="utf-8") as f: + return f.read() From dbc41e7c53df6b92f3cd918f75c7b0c52534fbcb Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 01:36:35 +0300 Subject: [PATCH 04/30] feat(demo_data): add blog post generation to demo data script extend the demo data management command to include blog post and tag creation. enables easier setup for testing and showcasing blog-related features. --- .../demo_blog_posts/return-policy.en.md | 113 ++++++++++++++++++ .../demo_blog_posts/return-policy.ru.md | 113 ++++++++++++++++++ .../demo_blog_posts/shipping-info.en.md | 104 ++++++++++++++++ .../demo_blog_posts/shipping-info.ru.md | 104 ++++++++++++++++ 4 files changed, 434 insertions(+) create mode 100644 engine/core/fixtures/demo_blog_posts/return-policy.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/return-policy.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/shipping-info.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/shipping-info.ru.md diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.en.md b/engine/core/fixtures/demo_blog_posts/return-policy.en.md new file mode 100644 index 00000000..51dd0166 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/return-policy.en.md @@ -0,0 +1,113 @@ +# Return Policy + +**Schon Demo Store** +*Last updated: February 2026* + +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real products are sold or shipped. This Return Policy is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.store](https://schon.store). + +## 1. Overview + +At Schon Demo Store, we want you to be completely satisfied with your purchase. If you are not satisfied for any reason, we offer a straightforward return process as outlined below. + +## 2. Return Eligibility + +### 2.1 General Conditions + +Items may be returned within **30 days** of delivery, provided they meet the following conditions: + +- The item is in its original, unworn, and unaltered condition +- The item is accompanied by all original packaging, certificates, and documentation +- The item shows no signs of damage, wear, or modification +- The item's security seal or tag (if applicable) is intact + +### 2.2 Non-Returnable Items + +The following items cannot be returned: + +- Custom or specially ordered items +- Items that have been resized, engraved, or otherwise modified +- Items purchased during final clearance sales (marked as "Final Sale") +- Gift cards and store credits + +### 2.3 Gemstone-Specific Conditions + +Due to the nature of gemstones and precious jewelry: + +- All returned gemstones will be inspected and verified against their original certification +- Items must be returned in the same condition as received, including any GIA, GRS, or other certificates +- Loose stones must be returned in their original gem container or packaging + +## 3. Return Process + +### 3.1 Initiating a Return + +To initiate a return: + +1. Log in to your account and navigate to your order history +2. Select the order containing the item(s) you wish to return +3. Click "Request Return" and follow the instructions +4. You will receive a Return Merchandise Authorization (RMA) number via email + +### 3.2 Shipping the Return + +- Use the prepaid shipping label provided with your RMA confirmation +- Pack the item securely in its original packaging +- Include all certificates, documentation, and accessories +- Ship the package within **7 days** of receiving your RMA number + +### 3.3 Return Shipping + +- **Domestic returns:** Free return shipping via insured courier +- **International returns:** Return shipping costs are the responsibility of the customer; we recommend using an insured and trackable shipping method + +## 4. Refunds + +### 4.1 Processing Time + +Refunds are processed within **5-10 business days** after we receive and inspect the returned item. + +### 4.2 Refund Method + +Refunds are issued to the original payment method: + +- **Credit/Debit Card:** 5-10 business days to appear on your statement +- **Store Credit:** Applied immediately upon approval +- **Bank Transfer:** 5-7 business days after processing + +### 4.3 Partial Refunds + +We reserve the right to issue a partial refund if the returned item shows signs of use, damage, or is missing original packaging or documentation. + +## 5. Exchanges + +### 5.1 Exchange Process + +If you would like to exchange an item for a different product: + +1. Follow the return process outlined in Section 3 +2. Place a new order for the desired item +3. Your refund will be processed as described in Section 4 + +### 5.2 Price Differences + +If the exchange item is a different price, the difference will be charged to or refunded to your original payment method. + +## 6. Damaged or Defective Items + +If you receive a damaged or defective item: + +- Contact us within **48 hours** of delivery +- Provide photos of the damage or defect +- We will arrange for a free return and full refund or replacement +- Original packaging should be retained for inspection + +## 7. Contact Us + +For questions about returns or to request assistance: + +- **Email:** returns@demo.schon.store +- **Response time:** Within 24 hours on business days + +--- + +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.ru.md b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md new file mode 100644 index 00000000..34555cc0 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md @@ -0,0 +1,113 @@ +# Политика возврата + +**Демо-магазин Schon** +*Дата последнего обновления: февраль 2026 г.* + +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные товары не продаются и не отправляются. Настоящая Политика возврата представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). + +## 1. Обзор + +В Демо-магазине Schon мы хотим, чтобы вы были полностью удовлетворены покупкой. Если по какой-либо причине вы не удовлетворены, мы предлагаем простой процесс возврата, описанный ниже. + +## 2. Условия возврата + +### 2.1 Общие условия + +Товары могут быть возвращены в течение **30 дней** с момента доставки при соблюдении следующих условий: + +- Товар находится в оригинальном, неношеном и неизменённом состоянии +- Товар сопровождается всей оригинальной упаковкой, сертификатами и документацией +- На товаре отсутствуют следы повреждений, износа или модификации +- Защитная пломба или бирка товара (при наличии) не нарушена + +### 2.2 Товары, не подлежащие возврату + +Возврату не подлежат следующие товары: + +- Товары, изготовленные или заказанные по индивидуальному заказу +- Товары, которые были изменены в размере, гравированы или иным образом модифицированы +- Товары, приобретённые в рамках финальных распродаж (с пометкой «Финальная продажа») +- Подарочные карты и кредиты магазина + +### 2.3 Особые условия для драгоценных камней + +В связи со спецификой драгоценных камней и ювелирных изделий: + +- Все возвращённые драгоценные камни проходят проверку и сверку с оригинальной сертификацией +- Товары должны быть возвращены в том же состоянии, в котором были получены, включая сертификаты GIA, GRS и прочие +- Камни без оправы должны быть возвращены в оригинальной упаковке или контейнере для камней + +## 3. Процесс возврата + +### 3.1 Оформление возврата + +Для оформления возврата: + +1. Войдите в свою учётную запись и перейдите к истории заказов +2. Выберите заказ, содержащий товар(ы), который(ые) вы хотите вернуть +3. Нажмите «Запросить возврат» и следуйте инструкциям +4. Вы получите номер авторизации возврата товара (RMA) по электронной почте + +### 3.2 Отправка возврата + +- Используйте предоплаченную транспортную этикетку, предоставленную с подтверждением RMA +- Надёжно упакуйте товар в оригинальную упаковку +- Приложите все сертификаты, документацию и аксессуары +- Отправьте посылку в течение **7 дней** после получения номера RMA + +### 3.3 Доставка возврата + +- **Внутренние возвраты:** Бесплатная обратная доставка застрахованной курьерской службой +- **Международные возвраты:** Стоимость обратной доставки оплачивается покупателем; рекомендуем использовать застрахованный и отслеживаемый способ доставки + +## 4. Возврат средств + +### 4.1 Сроки обработки + +Возврат средств обрабатывается в течение **5-10 рабочих дней** после получения и проверки возвращённого товара. + +### 4.2 Способ возврата средств + +Средства возвращаются на исходный способ оплаты: + +- **Кредитная/дебетовая карта:** 5-10 рабочих дней для отражения в выписке +- **Кредит магазина:** Начисляется немедленно после одобрения +- **Банковский перевод:** 5-7 рабочих дней после обработки + +### 4.3 Частичный возврат средств + +Мы оставляем за собой право произвести частичный возврат средств, если возвращённый товар имеет следы использования, повреждения или отсутствует оригинальная упаковка или документация. + +## 5. Обмен + +### 5.1 Процесс обмена + +Если вы хотите обменять товар на другой: + +1. Выполните процедуру возврата, описанную в разделе 3 +2. Оформите новый заказ на желаемый товар +3. Возврат средств будет обработан в соответствии с разделом 4 + +### 5.2 Разница в цене + +Если обменный товар имеет другую стоимость, разница будет списана с вашего исходного способа оплаты или возвращена на него. + +## 6. Повреждённые или дефектные товары + +Если вы получили повреждённый или дефектный товар: + +- Свяжитесь с нами в течение **48 часов** с момента доставки +- Предоставьте фотографии повреждения или дефекта +- Мы организуем бесплатный возврат и полное возмещение стоимости или замену +- Оригинальную упаковку следует сохранить для проверки + +## 7. Связь с нами + +По вопросам возврата или для получения помощи: + +- **Электронная почта:** returns@demo.schon.store +- **Время ответа:** В течение 24 часов в рабочие дни + +--- + +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.en.md b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md new file mode 100644 index 00000000..503f3d1d --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md @@ -0,0 +1,104 @@ +# Shipping Information + +**Schon Demo Store** +*Last updated: February 2026* + +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real products are shipped. This Shipping Information page is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.store](https://schon.store). + +## 1. Shipping Methods + +We offer the following shipping options for all orders: + +| Method | Estimated Delivery | Cost | +|---|---|---| +| Standard Shipping | 5-7 business days | Free on orders over $500 | +| Express Shipping | 2-3 business days | $25 | +| Priority Overnight | Next business day | $50 | +| International Standard | 7-14 business days | Calculated at checkout | +| International Express | 3-5 business days | Calculated at checkout | + +## 2. Processing Time + +- Orders are processed within **1-2 business days** after payment confirmation. +- Orders placed before 2:00 PM (EST) on business days are typically processed the same day. +- Custom or specially ordered items may require additional processing time of **5-10 business days**. + +## 3. Shipping Costs + +### 3.1 Domestic Shipping + +- **Free standard shipping** on all orders over $500 +- Orders under $500 incur a flat rate of $15 for standard shipping +- Express and overnight options are available at the rates listed above + +### 3.2 International Shipping + +- International shipping rates are calculated at checkout based on destination, weight, and selected service +- All international orders are shipped with full insurance coverage +- Customs duties and import taxes are the responsibility of the recipient and are not included in the shipping cost + +## 4. Insurance and Security + +All shipments are: + +- **Fully insured** for the total value of the order +- **Shipped via secure courier** with signature confirmation required +- **Tracked** with real-time tracking updates sent to your email +- **Discreetly packaged** with no external indication of contents or value + +For orders exceeding $10,000, additional security measures may apply, including: + +- Armored courier delivery +- Required government-issued ID verification upon delivery +- Scheduled delivery appointment + +## 5. Order Tracking + +Once your order ships, you will receive: + +1. A shipping confirmation email with your tracking number +2. Real-time tracking updates via email and SMS (if opted in) +3. Delivery notification upon successful delivery + +You can also track your order at any time by logging into your account and visiting your order history. + +## 6. Delivery Details + +### 6.1 Signature Required + +All deliveries require a signature from an adult (18+) at the delivery address. Packages will not be left unattended. + +### 6.2 Delivery Attempts + +- The courier will make up to **3 delivery attempts** +- After 3 failed attempts, the package will be held at the nearest courier facility for **7 days** +- If unclaimed, the package will be returned to us and a full refund will be issued minus return shipping costs + +### 6.3 Address Accuracy + +Please ensure your shipping address is complete and accurate. We are not responsible for delays or losses resulting from incorrect address information. + +## 7. Shipping Restrictions + +We currently ship to most countries worldwide. However, we cannot ship to: + +- P.O. Boxes (for insured items) +- Military/diplomatic addresses (APO/FPO) +- Countries under trade sanctions + +Please contact us if you are unsure whether we ship to your location. + +## 8. Holiday and Peak Seasons + +During holiday seasons and peak shopping periods, please allow for additional processing and delivery time. We recommend placing orders early to ensure timely delivery. + +## 9. Contact Us + +For shipping inquiries: + +- **Email:** shipping@demo.schon.store +- **Response time:** Within 24 hours on business days + +--- + +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md new file mode 100644 index 00000000..5287f4e5 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md @@ -0,0 +1,104 @@ +# Информация о доставке + +**Демо-магазин Schon** +*Дата последнего обновления: февраль 2026 г.* + +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные товары не отправляются. Настоящая страница с информацией о доставке представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). + +## 1. Способы доставки + +Мы предлагаем следующие варианты доставки для всех заказов: + +| Способ | Ориентировочные сроки | Стоимость | +|---|---|---| +| Стандартная доставка | 5-7 рабочих дней | Бесплатно при заказе от $500 | +| Экспресс-доставка | 2-3 рабочих дня | $25 | +| Приоритетная доставка | Следующий рабочий день | $50 | +| Международная стандартная | 7-14 рабочих дней | Рассчитывается при оформлении | +| Международная экспресс | 3-5 рабочих дней | Рассчитывается при оформлении | + +## 2. Сроки обработки + +- Заказы обрабатываются в течение **1-2 рабочих дней** после подтверждения оплаты. +- Заказы, оформленные до 14:00 (EST) в рабочие дни, как правило, обрабатываются в тот же день. +- Изготовление товаров по индивидуальному заказу может потребовать дополнительного времени обработки — **5-10 рабочих дней**. + +## 3. Стоимость доставки + +### 3.1 Доставка по стране + +- **Бесплатная стандартная доставка** для всех заказов на сумму свыше $500 +- Для заказов менее $500 стоимость стандартной доставки составляет фиксированные $15 +- Экспресс и приоритетная доставка доступны по тарифам, указанным выше + +### 3.2 Международная доставка + +- Стоимость международной доставки рассчитывается при оформлении заказа на основании пункта назначения, веса и выбранной услуги +- Все международные заказы отправляются с полным страховым покрытием +- Таможенные пошлины и импортные налоги оплачиваются получателем и не включены в стоимость доставки + +## 4. Страхование и безопасность + +Все отправления: + +- **Полностью застрахованы** на полную стоимость заказа +- **Отправляются защищённой курьерской службой** с обязательным подтверждением подписью +- **Отслеживаются** с отправкой обновлений в реальном времени на вашу электронную почту +- **Упакованы неприметно** без внешних указаний на содержимое или стоимость + +Для заказов на сумму свыше $10 000 могут применяться дополнительные меры безопасности, включая: + +- Доставка бронированной курьерской службой +- Обязательная верификация документа, удостоверяющего личность, при доставке +- Доставка по предварительной записи + +## 5. Отслеживание заказа + +После отправки заказа вы получите: + +1. Электронное письмо с подтверждением отправки и номером отслеживания +2. Обновления отслеживания в реальном времени по электронной почте и SMS (при подписке) +3. Уведомление о доставке при успешном вручении + +Вы также можете отследить заказ в любое время, войдя в свою учётную запись и перейдя в историю заказов. + +## 6. Условия доставки + +### 6.1 Обязательная подпись + +Все доставки требуют подписи совершеннолетнего лица (18+) по адресу доставки. Посылки не оставляются без присмотра. + +### 6.2 Попытки доставки + +- Курьер предпримет до **3 попыток доставки** +- После 3 неудачных попыток посылка будет храниться в ближайшем отделении курьерской службы в течение **7 дней** +- Если посылка не будет востребована, она будет возвращена нам, и будет произведён полный возврат средств за вычетом стоимости обратной доставки + +### 6.3 Точность адреса + +Пожалуйста, убедитесь, что ваш адрес доставки указан полностью и точно. Мы не несём ответственности за задержки или утрату посылок вследствие неверно указанного адреса. + +## 7. Ограничения доставки + +В настоящее время мы осуществляем доставку в большинство стран мира. Однако доставка невозможна: + +- На абонентские ящики (для застрахованных отправлений) +- На военные и дипломатические адреса (APO/FPO) +- В страны, находящиеся под торговыми санкциями + +Пожалуйста, свяжитесь с нами, если вы не уверены, осуществляем ли мы доставку в ваш регион. + +## 8. Праздничные и пиковые периоды + +В праздничные сезоны и периоды повышенного спроса просим учитывать дополнительное время на обработку и доставку. Рекомендуем оформлять заказы заблаговременно для своевременного получения. + +## 9. Связь с нами + +По вопросам доставки: + +- **Электронная почта:** shipping@demo.schon.store +- **Время ответа:** В течение 24 часов в рабочие дни + +--- + +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* From a71e1cc29ef312d2514de8d5b860e22dfc2cbdfd Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 01:39:15 +0300 Subject: [PATCH 05/30] refactor(configurations): update domain references to `wiseless.xyz` Update all configurations, fixtures, scripts, and documentation to replace occurrences of `schon.fureunoir.com` with the new `schon.wiseless.xyz` domain. This ensures consistency across the project and reflects the updated domain structure. --- engine/core/fixtures/demo.json | 2 +- .../fixtures/demo_blog_posts/about-us.en.md | 6 +++--- .../fixtures/demo_blog_posts/about-us.ru.md | 6 +++--- .../core/fixtures/demo_blog_posts/faq.en.md | 10 +++++----- .../core/fixtures/demo_blog_posts/faq.ru.md | 10 +++++----- .../demo_blog_posts/privacy-policy.en.md | 6 +++--- .../demo_blog_posts/privacy-policy.ru.md | 6 +++--- .../demo_blog_posts/return-policy.en.md | 6 +++--- .../demo_blog_posts/return-policy.ru.md | 6 +++--- .../demo_blog_posts/shipping-info.en.md | 6 +++--- .../demo_blog_posts/shipping-info.ru.md | 6 +++--- .../terms-and-conditions.en.md | 6 +++--- .../terms-and-conditions.ru.md | 6 +++--- engine/core/management/commands/demo_data.py | 4 ++-- engine/core/static/robots_frontend.txt | 4 ++-- nginx.example.conf | 20 +++++++++---------- schon/settings/drf.py | 2 +- scripts/Unix/generate-environment-file.sh | 12 +++++------ scripts/Windows/generate-environment-file.ps1 | 12 +++++------ 19 files changed, 68 insertions(+), 68 deletions(-) diff --git a/engine/core/fixtures/demo.json b/engine/core/fixtures/demo.json index 8b7db235..34ea4859 100644 --- a/engine/core/fixtures/demo.json +++ b/engine/core/fixtures/demo.json @@ -714,7 +714,7 @@ }, "demo_users": { "password": "Schon!Demo888", - "email_domain": "demo.schon.store", + "email_domain": "wiseless.xyz", "first_names": [ "Emma", "Liam", "Olivia", "Noah", "Ava", "Ethan", "Sophia", "Mason", "Isabella", "William", "Mia", "James", "Charlotte", "Benjamin", "Amelia", diff --git a/engine/core/fixtures/demo_blog_posts/about-us.en.md b/engine/core/fixtures/demo_blog_posts/about-us.en.md index 87881cec..e5c9d179 100644 --- a/engine/core/fixtures/demo_blog_posts/about-us.en.md +++ b/engine/core/fixtures/demo_blog_posts/about-us.en.md @@ -2,7 +2,7 @@ **Welcome to the Schon Demo Store** -> **You are viewing a live demonstration** of the [Schon e-commerce platform](https://schon.store). Everything you see here — the products, the brands, the prices — is fictional, designed to showcase the platform's capabilities. No real transactions take place. +> **You are viewing a live demonstration** of the [Schon e-commerce platform](https://schon.wiseless.xyz). Everything you see here — the products, the brands, the prices — is fictional, designed to showcase the platform's capabilities. No real transactions take place. ## What Is This Store? @@ -42,8 +42,8 @@ Feel free to browse the store, create an account, add items to your cart, and ex ## Ready to Build Your Store? -If you like what you see, Schon can power your own e-commerce business. Visit [schon.store](https://schon.store) to learn about licensing options, get documentation, and start building your store today. +If you like what you see, Schon can power your own e-commerce business. Visit [schon.wiseless.xyz](https://schon.wiseless.xyz) to learn about licensing options, get documentation, and start building your store today. --- -*Powered by [Schon](https://schon.store) — E-commerce, done right.* +*Powered by [Schon](https://schon.wiseless.xyz) — E-commerce, done right.* diff --git a/engine/core/fixtures/demo_blog_posts/about-us.ru.md b/engine/core/fixtures/demo_blog_posts/about-us.ru.md index 1f1a434e..036d9603 100644 --- a/engine/core/fixtures/demo_blog_posts/about-us.ru.md +++ b/engine/core/fixtures/demo_blog_posts/about-us.ru.md @@ -2,7 +2,7 @@ **Добро пожаловать в Демо-магазин Schon** -> **Вы просматриваете живую демонстрацию** [платформы электронной коммерции Schon](https://schon.store). Всё, что вы видите здесь — товары, бренды, цены — является вымышленным и предназначено для демонстрации возможностей платформы. Реальные транзакции не осуществляются. +> **Вы просматриваете живую демонстрацию** [платформы электронной коммерции Schon](https://schon.wiseless.xyz). Всё, что вы видите здесь — товары, бренды, цены — является вымышленным и предназначено для демонстрации возможностей платформы. Реальные транзакции не осуществляются. ## Что это за магазин? @@ -42,8 +42,8 @@ Schon построен на современном технологическо ## Готовы создать свой магазин? -Если вам понравилось увиденное, Schon может стать основой вашего собственного бизнеса в сфере электронной коммерции. Посетите [schon.store](https://schon.store), чтобы узнать о вариантах лицензирования, получить документацию и начать строить свой магазин уже сегодня. +Если вам понравилось увиденное, Schon может стать основой вашего собственного бизнеса в сфере электронной коммерции. Посетите [schon.wiseless.xyz](https://schon.wiseless.xyz), чтобы узнать о вариантах лицензирования, получить документацию и начать строить свой магазин уже сегодня. --- -*Работает на [Schon](https://schon.store) — электронная коммерция, сделанная правильно.* +*Работает на [Schon](https://schon.wiseless.xyz) — электронная коммерция, сделанная правильно.* diff --git a/engine/core/fixtures/demo_blog_posts/faq.en.md b/engine/core/fixtures/demo_blog_posts/faq.en.md index 73064e12..235341bc 100644 --- a/engine/core/fixtures/demo_blog_posts/faq.en.md +++ b/engine/core/fixtures/demo_blog_posts/faq.en.md @@ -2,7 +2,7 @@ **Schon Demo Store** -> **Demo Notice:** This FAQ pertains to the Schon Demo Store, a demonstration environment for the [Schon e-commerce platform](https://schon.store). All products and transactions are fictional. +> **Demo Notice:** This FAQ pertains to the Schon Demo Store, a demonstration environment for the [Schon e-commerce platform](https://schon.wiseless.xyz). All products and transactions are fictional. ## General Questions @@ -52,7 +52,7 @@ Yes. Schon supports 28 languages out of the box. This demo store demonstrates bi ### Can I use Schon for my own store? -Absolutely. Schon is available for licensing. Visit [schon.store](https://schon.store) to learn more about pricing, features, and how to get started. +Absolutely. Schon is available for licensing. Visit [schon.wiseless.xyz](https://schon.wiseless.xyz) to learn more about pricing, features, and how to get started. ### Does Schon include a storefront? @@ -84,12 +84,12 @@ The demo store uses a built-in management command that creates fictional product ### How can I learn more about Schon? -Visit [schon.store](https://schon.store) for comprehensive documentation, pricing information, and contact details. +Visit [schon.wiseless.xyz](https://schon.wiseless.xyz) for comprehensive documentation, pricing information, and contact details. ### I found a bug in the demo. How can I report it? -We appreciate your feedback. Please contact us at support@demo.schon.store with details about the issue you encountered. +We appreciate your feedback. Please contact us at support@wiseless.xyz with details about the issue you encountered. --- -*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.wiseless.xyz). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/faq.ru.md b/engine/core/fixtures/demo_blog_posts/faq.ru.md index eeb32b94..7ce789f9 100644 --- a/engine/core/fixtures/demo_blog_posts/faq.ru.md +++ b/engine/core/fixtures/demo_blog_posts/faq.ru.md @@ -2,7 +2,7 @@ **Демо-магазин Schon** -> **Уведомление:** Данный раздел FAQ относится к Демо-магазину Schon — демонстрационной среде для [платформы электронной коммерции Schon](https://schon.store). Все товары и транзакции являются вымышленными. +> **Уведомление:** Данный раздел FAQ относится к Демо-магазину Schon — демонстрационной среде для [платформы электронной коммерции Schon](https://schon.wiseless.xyz). Все товары и транзакции являются вымышленными. ## Общие вопросы @@ -52,7 +52,7 @@ Schon построен на Django и Django REST Framework с использо ### Могу ли я использовать Schon для своего магазина? -Безусловно. Schon доступен для лицензирования. Посетите [schon.store](https://schon.store), чтобы узнать больше о ценах, возможностях и о том, как начать работу. +Безусловно. Schon доступен для лицензирования. Посетите [schon.wiseless.xyz](https://schon.wiseless.xyz), чтобы узнать больше о ценах, возможностях и о том, как начать работу. ### Включает ли Schon витрину магазина? @@ -84,12 +84,12 @@ API-ориентированный дизайн Schon делает его иде ### Как узнать больше о Schon? -Посетите [schon.store](https://schon.store) для получения подробной документации, информации о ценах и контактных данных. +Посетите [schon.wiseless.xyz](https://schon.wiseless.xyz) для получения подробной документации, информации о ценах и контактных данных. ### Я обнаружил ошибку в демо. Как я могу сообщить о ней? -Мы ценим вашу обратную связь. Пожалуйста, свяжитесь с нами по адресу support@demo.schon.store с описанием обнаруженной проблемы. +Мы ценим вашу обратную связь. Пожалуйста, свяжитесь с нами по адресу support@wiseless.xyz с описанием обнаруженной проблемы. --- -*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md index 93ea3d7f..508d47ac 100644 --- a/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md @@ -3,7 +3,7 @@ **Schon Demo Store** *Last updated: February 2026* -> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real transactions are processed, and no actual personal data is collected through purchases. This privacy policy is provided as an example of a production-ready document. If you are interested in deploying Schon for your own store, please visit [schon.store](https://schon.store). +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real transactions are processed, and no actual personal data is collected through purchases. This privacy policy is provided as an example of a production-ready document. If you are interested in deploying Schon for your own store, please visit [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Introduction @@ -102,7 +102,7 @@ Our services are not directed to individuals under the age of 16. We do not know If you have questions about this Privacy Policy or wish to exercise your data rights, please contact us: -- **Email:** privacy@demo.schon.store +- **Email:** privacy@wiseless.xyz - **Address:** Schon Demo Store, Demo District, Internet City ## 12. Changes to This Policy @@ -111,4 +111,4 @@ We may update this Privacy Policy from time to time. We will notify you of any m --- -*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.wiseless.xyz). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md index 69d12b01..46dda9ed 100644 --- a/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md @@ -3,7 +3,7 @@ **Демо-магазин Schon** *Дата последнего обновления: февраль 2026 г.* -> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные транзакции не обрабатываются, персональные данные в рамках покупок не собираются. Настоящая политика конфиденциальности представлена в качестве примера документа, готового к использованию в рабочей среде. Если вы заинтересованы в развёртывании Schon для вашего магазина, посетите [schon.store](https://schon.store). +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные транзакции не обрабатываются, персональные данные в рамках покупок не собираются. Настоящая политика конфиденциальности представлена в качестве примера документа, готового к использованию в рабочей среде. Если вы заинтересованы в развёртывании Schon для вашего магазина, посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Введение @@ -102,7 +102,7 @@ Если у вас есть вопросы о настоящей Политике конфиденциальности или вы хотите реализовать свои права в отношении данных, свяжитесь с нами: -- **Электронная почта:** privacy@demo.schon.store +- **Электронная почта:** privacy@wiseless.xyz - **Адрес:** Демо-магазин Schon, Демонстрационный район, Интернет-сити ## 12. Изменения настоящей Политики @@ -111,4 +111,4 @@ --- -*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.en.md b/engine/core/fixtures/demo_blog_posts/return-policy.en.md index 51dd0166..d2523a33 100644 --- a/engine/core/fixtures/demo_blog_posts/return-policy.en.md +++ b/engine/core/fixtures/demo_blog_posts/return-policy.en.md @@ -3,7 +3,7 @@ **Schon Demo Store** *Last updated: February 2026* -> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real products are sold or shipped. This Return Policy is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.store](https://schon.store). +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real products are sold or shipped. This Return Policy is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Overview @@ -105,9 +105,9 @@ If you receive a damaged or defective item: For questions about returns or to request assistance: -- **Email:** returns@demo.schon.store +- **Email:** returns@wiseless.xyz - **Response time:** Within 24 hours on business days --- -*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.wiseless.xyz). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.ru.md b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md index 34555cc0..fa0a85bb 100644 --- a/engine/core/fixtures/demo_blog_posts/return-policy.ru.md +++ b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md @@ -3,7 +3,7 @@ **Демо-магазин Schon** *Дата последнего обновления: февраль 2026 г.* -> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные товары не продаются и не отправляются. Настоящая Политика возврата представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные товары не продаются и не отправляются. Настоящая Политика возврата представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Обзор @@ -105,9 +105,9 @@ По вопросам возврата или для получения помощи: -- **Электронная почта:** returns@demo.schon.store +- **Электронная почта:** returns@wiseless.xyz - **Время ответа:** В течение 24 часов в рабочие дни --- -*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.en.md b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md index 503f3d1d..0f39db48 100644 --- a/engine/core/fixtures/demo_blog_posts/shipping-info.en.md +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md @@ -3,7 +3,7 @@ **Schon Demo Store** *Last updated: February 2026* -> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real products are shipped. This Shipping Information page is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.store](https://schon.store). +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real products are shipped. This Shipping Information page is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Shipping Methods @@ -96,9 +96,9 @@ During holiday seasons and peak shopping periods, please allow for additional pr For shipping inquiries: -- **Email:** shipping@demo.schon.store +- **Email:** shipping@wiseless.xyz - **Response time:** Within 24 hours on business days --- -*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.wiseless.xyz). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md index 5287f4e5..81243059 100644 --- a/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md @@ -3,7 +3,7 @@ **Демо-магазин Schon** *Дата последнего обновления: февраль 2026 г.* -> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные товары не отправляются. Настоящая страница с информацией о доставке представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные товары не отправляются. Настоящая страница с информацией о доставке представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Способы доставки @@ -96,9 +96,9 @@ По вопросам доставки: -- **Электронная почта:** shipping@demo.schon.store +- **Электронная почта:** shipping@wiseless.xyz - **Время ответа:** В течение 24 часов в рабочие дни --- -*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md index 23a3235e..b9a7f420 100644 --- a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md @@ -3,7 +3,7 @@ **Schon Demo Store** *Last updated: February 2026* -> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.store) e-commerce platform. No real transactions are processed, no real products are sold, and no real money is charged. These Terms & Conditions are provided as an example of a production-ready legal document. To deploy Schon for your own store, visit [schon.store](https://schon.store). +> **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real transactions are processed, no real products are sold, and no real money is charged. These Terms & Conditions are provided as an example of a production-ready legal document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Acceptance of Terms @@ -128,9 +128,9 @@ If any provision of these Terms is found to be unenforceable, the remaining prov For questions about these Terms, please contact us: -- **Email:** legal@demo.schon.store +- **Email:** legal@wiseless.xyz - **Address:** Schon Demo Store, Demo District, Internet City --- -*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.store). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.store).* +*This document is part of the Schon Demo Store — a demonstration environment showcasing the [Schon e-commerce platform](https://schon.wiseless.xyz). All store data, including products, brands, and prices, is fictional. Interested in launching your own store? [Learn more about Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md index d929db9f..b58c5d1a 100644 --- a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md @@ -3,7 +3,7 @@ **Демо-магазин Schon** *Дата последнего обновления: февраль 2026 г.* -> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.store). Реальные транзакции не обрабатываются, реальные товары не продаются, реальные платежи не взимаются. Настоящие Условия использования представлены в качестве примера юридического документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.store](https://schon.store). +> **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные транзакции не обрабатываются, реальные товары не продаются, реальные платежи не взимаются. Настоящие Условия использования представлены в качестве примера юридического документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). ## 1. Принятие условий @@ -128,9 +128,9 @@ По вопросам, связанным с настоящими Условиями, обращайтесь: -- **Электронная почта:** legal@demo.schon.store +- **Электронная почта:** legal@wiseless.xyz - **Адрес:** Демо-магазин Schon, Демонстрационный район, Интернет-сити --- -*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.store). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.store).* +*Этот документ является частью Демо-магазина Schon — демонстрационной среды, представляющей [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все данные магазина, включая товары, бренды и цены, являются вымышленными. Хотите запустить собственный магазин? [Узнайте больше о Schon](https://schon.wiseless.xyz).* diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 99285248..8e649d55 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -31,8 +31,8 @@ from engine.core.models import ( from engine.payments.models import Balance from engine.vibes_auth.models import Group, User -DEMO_EMAIL_DOMAIN = "demo.schon.store" -DEMO_VENDOR_NAME = "GemSource Global" +DEMO_EMAIL_DOMAIN = "wiseless.xyz" +DEMO_VENDOR_NAME = "GemDemo Global" DEMO_IMAGES_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_products_images" DEMO_BLOG_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_blog_posts" diff --git a/engine/core/static/robots_frontend.txt b/engine/core/static/robots_frontend.txt index b823f243..32f97063 100644 --- a/engine/core/static/robots_frontend.txt +++ b/engine/core/static/robots_frontend.txt @@ -7,5 +7,5 @@ Disallow: /*/auth/sign-up/ Allow: / -Sitemap: https://schon.fureunoir.com/sitemap.xml -Host: schon.fureunoir.com \ No newline at end of file +Sitemap: https://schon.wiseless.xyz/sitemap.xml +Host: schon.wiseless.xyz \ No newline at end of file diff --git a/nginx.example.conf b/nginx.example.conf index 68b9b04e..2cbc9c91 100644 --- a/nginx.example.conf +++ b/nginx.example.conf @@ -12,10 +12,10 @@ upstream storefront_frontend { server { listen 443 ssl http2; - server_name api.schon.fureunoir.com; + server_name api.schon.wiseless.xyz; - ssl_certificate /etc/letsencrypt/live/schon.fureunoir.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/schon.fureunoir.com/privkey.pem; + ssl_certificate /etc/letsencrypt/live/schon.wiseless.xyz/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/schon.wiseless.xyz/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_session_cache shared:SSL:10m; @@ -72,10 +72,10 @@ server { server { listen 443 ssl http2; - server_name schon.fureunoir.com www.schon.fureunoir.com; + server_name schon.wiseless.xyz www.schon.wiseless.xyz; - ssl_certificate /etc/letsencrypt/live/schon.fureunoir.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/schon.fureunoir.com/privkey.pem; + ssl_certificate /etc/letsencrypt/live/schon.wiseless.xyz/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/schon.wiseless.xyz/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_session_cache shared:SSL:10m; @@ -128,10 +128,10 @@ server { server { listen 443 ssl http2; - server_name prometheus.schon.fureunoir.com; + server_name prometheus.schon.wiseless.xyz; - ssl_certificate /etc/letsencrypt/live/schon.fureunoir.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/schon.fureunoir.com/privkey.pem; + ssl_certificate /etc/letsencrypt/live/schon.wiseless.xyz/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/schon.wiseless.xyz/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_session_cache shared:SSL:10m; @@ -173,6 +173,6 @@ server { server { listen 80; - server_name api.schon.fureunoir.com www.schon.fureunoir.com schon.fureunoir.com prometheus.schon.fureunoir.com; + server_name api.schon.wiseless.xyz www.schon.wiseless.xyz schon.wiseless.xyz prometheus.schon.wiseless.xyz; return 301 https://$host$request_uri; } diff --git a/schon/settings/drf.py b/schon/settings/drf.py index dd0d96e7..02bcc0ec 100644 --- a/schon/settings/drf.py +++ b/schon/settings/drf.py @@ -117,7 +117,7 @@ SPECTACULAR_SETTINGS = { "TITLE": f"{PROJECT_NAME} API", "DESCRIPTION": SPECTACULAR_DESCRIPTION, "VERSION": SCHON_VERSION, # noqa: F405 - "TOS": "https://schon.fureunoir.com/terms-of-service", + "TOS": "https://schon.wiseless.xyz/terms-of-service", "CAMELIZE_NAMES": True, "POSTPROCESSING_HOOKS": [ "schon.utils.renderers.camelize_serializer_fields", diff --git a/scripts/Unix/generate-environment-file.sh b/scripts/Unix/generate-environment-file.sh index f907e9d7..32598577 100755 --- a/scripts/Unix/generate-environment-file.sh +++ b/scripts/Unix/generate-environment-file.sh @@ -44,8 +44,8 @@ if [ -f .env ]; then fi SCHON_PROJECT_NAME=$(prompt_default SCHON_PROJECT_NAME Schon) -SCHON_STOREFRONT_DOMAIN=$(prompt_default SCHON_STOREFRONT_DOMAIN schon.fureunoir.com) -SCHON_BASE_DOMAIN=$(prompt_default SCHON_BASE_DOMAIN schon.fureunoir.com) +SCHON_STOREFRONT_DOMAIN=$(prompt_default SCHON_STOREFRONT_DOMAIN schon.wiseless.xyz) +SCHON_BASE_DOMAIN=$(prompt_default SCHON_BASE_DOMAIN schon.wiseless.xyz) SENTRY_DSN=$(prompt_default SENTRY_DSN "") DEBUG=$(prompt_default DEBUG 1) TIME_ZONE=$(prompt_default TIME_ZONE "Europe/London") @@ -53,8 +53,8 @@ TIME_ZONE=$(prompt_default TIME_ZONE "Europe/London") SECRET_KEY=$(prompt_autogen SECRET_KEY 32) JWT_SIGNING_KEY=$(prompt_autogen JWT_SIGNING_KEY 64) -ALLOWED_HOSTS=$(prompt_default ALLOWED_HOSTS "schon.fureunoir.com api.schon.fureunoir.com") -CSRF_TRUSTED_ORIGINS=$(prompt_default CSRF_TRUSTED_ORIGINS "https://schon.fureunoir.com https://api.schon.fureunoir.com https://www.schon.fureunoir.com") +ALLOWED_HOSTS=$(prompt_default ALLOWED_HOSTS "schon.wiseless.xyz api.schon.wiseless.xyz") +CSRF_TRUSTED_ORIGINS=$(prompt_default CSRF_TRUSTED_ORIGINS "https://schon.wiseless.xyz https://api.schon.wiseless.xyz https://www.schon.wiseless.xyz") CORS_ALLOWED_ORIGINS=$(prompt_default CORS_ALLOWED_ORIGINS "$CSRF_TRUSTED_ORIGINS") POSTGRES_DB=$(prompt_default POSTGRES_DB schon) @@ -73,11 +73,11 @@ PROMETHEUS_USER=$(prompt_default PROMETHEUS_USER schon) PROMETHEUS_PASSWORD=$(prompt_autogen PROMETHEUS_PASSWORD 16) EMAIL_BACKEND=$(prompt_default EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend) -EMAIL_HOST=$(prompt_default EMAIL_HOST smtp.whatever.schon.fureunoir.com) +EMAIL_HOST=$(prompt_default EMAIL_HOST smtp.whatever.schon.wiseless.xyz) EMAIL_PORT=$(prompt_default EMAIL_PORT 465) EMAIL_USE_TLS=$(prompt_default EMAIL_USE_TLS 0) EMAIL_USE_SSL=$(prompt_default EMAIL_USE_SSL 1) -EMAIL_HOST_USER=$(prompt_default EMAIL_HOST_USER your-email-user@whatever.schon.fureunoir.com) +EMAIL_HOST_USER=$(prompt_default EMAIL_HOST_USER your-email-user@whatever.schon.wiseless.xyz) EMAIL_FROM=$EMAIL_HOST_USER EMAIL_HOST_PASSWORD=$(prompt_default EMAIL_HOST_PASSWORD SUPERSECRETEMAILHOSTPASSWORD) diff --git a/scripts/Windows/generate-environment-file.ps1 b/scripts/Windows/generate-environment-file.ps1 index ed128720..3c3d0449 100644 --- a/scripts/Windows/generate-environment-file.ps1 +++ b/scripts/Windows/generate-environment-file.ps1 @@ -50,8 +50,8 @@ if (Test-Path '.env') } $SCHON_PROJECT_NAME = Prompt-Default 'SCHON_PROJECT_NAME' 'Schon' -$SCHON_STOREFRONT_DOMAIN = Prompt-Default 'SCHON_STOREFRONT_DOMAIN' 'schon.fureunoir.com' -$SCHON_BASE_DOMAIN = Prompt-Default 'SCHON_BASE_DOMAIN' 'schon.fureunoir.com' +$SCHON_STOREFRONT_DOMAIN = Prompt-Default 'SCHON_STOREFRONT_DOMAIN' 'schon.wiseless.xyz' +$SCHON_BASE_DOMAIN = Prompt-Default 'SCHON_BASE_DOMAIN' 'schon.wiseless.xyz' $SENTRY_DSN = Prompt-Default 'SENTRY_DSN' '' $DEBUG = Prompt-Default 'DEBUG' '1' $TIME_ZONE = Prompt-Default 'TIME_ZONE' 'Europe/London' @@ -59,8 +59,8 @@ $TIME_ZONE = Prompt-Default 'TIME_ZONE' 'Europe/London' $SECRET_KEY = Prompt-AutoGen 'SECRET_KEY' 32 $JWT_SIGNING_KEY = Prompt-AutoGen 'JWT_SIGNING_KEY' 64 -$ALLOWED_HOSTS = Prompt-Default 'ALLOWED_HOSTS' 'schon.fureunoir.com api.schon.fureunoir.com' -$CSRF_TRUSTED_ORIGINS = Prompt-Default 'CSRF_TRUSTED_ORIGINS' 'https://schon.fureunoir.com https://api.schon.fureunoir.com https://www.schon.fureunoir.com' +$ALLOWED_HOSTS = Prompt-Default 'ALLOWED_HOSTS' 'schon.wiseless.xyz api.schon.wiseless.xyz' +$CSRF_TRUSTED_ORIGINS = Prompt-Default 'CSRF_TRUSTED_ORIGINS' 'https://schon.wiseless.xyz https://api.schon.wiseless.xyz https://www.schon.wiseless.xyz' $CORS_ALLOWED_ORIGINS = Prompt-Default 'CORS_ALLOWED_ORIGINS' $CSRF_TRUSTED_ORIGINS $POSTGRES_DB = Prompt-Default 'POSTGRES_DB' 'schon' @@ -80,11 +80,11 @@ $PROMETHEUS_USER = Prompt-Default 'PROMETHEUS_USER' 'schon' $PROMETHEUS_PASSWORD = Prompt-AutoGen 'PROMETHEUS_PASSWORD' 16 $EMAIL_BACKEND = Prompt-Default 'EMAIL_BACKEND' 'django.core.mail.backends.smtp.EmailBackend' -$EMAIL_HOST = Prompt-Default 'EMAIL_HOST' 'smtp.whatever.schon.fureunoir.com' +$EMAIL_HOST = Prompt-Default 'EMAIL_HOST' 'smtp.whatever.schon.wiseless.xyz' $EMAIL_PORT = Prompt-Default 'EMAIL_PORT' '465' $EMAIL_USE_TLS = Prompt-Default 'EMAIL_USE_TLS' '0' $EMAIL_USE_SSL = Prompt-Default 'EMAIL_USE_SSL' '1' -$EMAIL_HOST_USER = Prompt-Default 'EMAIL_HOST_USER' 'your-email-user@whatever.schon.fureunoir.com' +$EMAIL_HOST_USER = Prompt-Default 'EMAIL_HOST_USER' 'your-email-user@whatever.schon.wiseless.xyz' $EMAIL_FROM = Prompt-Default 'EMAIL_FROM' $EMAIL_HOST_USER $EMAIL_HOST_PASSWORD = Prompt-Default 'EMAIL_HOST_PASSWORD' 'SUPERSECRETEMAILHOSTPASSWORD' From ad5e8dc335aeb2a979fd9da65b9bc8eb369ff383 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 02:16:10 +0300 Subject: [PATCH 06/30] chore(engine): add JavaScript source map for rapidoc-min.js --- engine/core/static/js/rapidoc-min.js.map | 1 + 1 file changed, 1 insertion(+) create mode 100644 engine/core/static/js/rapidoc-min.js.map diff --git a/engine/core/static/js/rapidoc-min.js.map b/engine/core/static/js/rapidoc-min.js.map new file mode 100644 index 00000000..9bc61d1e --- /dev/null +++ b/engine/core/static/js/rapidoc-min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rapidoc-min.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACDA;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;;;;;;;;;;;;ACKA;;ACKA;ACoSA;AACA;AACA;AAGA;AAIA;AAIA;AAGA;;;AAIA;;AAEA;AACA;AACA;AACA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","sources":["webpack://rapidoc/./src/styles/input-styles.js","webpack://rapidoc/./src/styles/flex-styles.js","webpack://rapidoc/./src/styles/table-styles.js","webpack://rapidoc/./src/styles/endpoint-styles.js","webpack://rapidoc/./src/styles/prism-styles.js","webpack://rapidoc/./src/styles/tab-styles.js","webpack://rapidoc/./src/styles/nav-styles.js","webpack://rapidoc/./src/styles/info-styles.js","webpack://rapidoc/./src/styles/custom-styles.js","webpack://rapidoc/./src/utils/common-utils.js","webpack://rapidoc/./src/templates/security-scheme-template.js","webpack://rapidoc/./src/templates/code-samples-template.js","webpack://rapidoc/./src/templates/callback-template.js","webpack://rapidoc/./src/components/json-tree.js","webpack://rapidoc/./src/components/schema-tree.js","webpack://rapidoc/./src/components/tag-input.js","webpack://rapidoc/./src/components/api-request.js","webpack://rapidoc/./src/utils/schema-utils.js","webpack://rapidoc/./src/components/schema-table.js","webpack://rapidoc/./src/templates/expanded-endpoint-template.js","webpack://rapidoc/./src/templates/components-template.js","webpack://rapidoc/./src/templates/overview-template.js","webpack://rapidoc/./src/templates/server-template.js","webpack://rapidoc/./src/templates/navbar-template.js","webpack://rapidoc/./src/templates/focused-endpoint-template.js","webpack://rapidoc/./src/templates/endpoint-template.js","webpack://rapidoc/./src/templates/logo-template.js","webpack://rapidoc/./src/templates/header-template.js","webpack://rapidoc/./src/components/api-response.js","webpack://rapidoc/./src/templates/advance-search-template.js","webpack://rapidoc/./src/components/dialog-box.js","webpack://rapidoc/./src/utils/theme.js","webpack://rapidoc/./src/templates/main-body-template.js","webpack://rapidoc/./src/rapidoc.js","webpack://rapidoc/./src/rapidoc-mini.js","webpack://rapidoc/./src/templates/json-schema-viewer-template.js","webpack://rapidoc/./src/json-schema-viewer.js"],"sourcesContent":["import { css } from 'lit';\n\n/* eslint-disable max-len */\nexport default css`\n/* Button */\n.m-btn {\n border-radius: var(--border-radius);\n font-weight: 600;\n display: inline-block;\n padding: 6px 16px;\n font-size: var(--font-size-small);\n outline: 0;\n line-height: 1;\n text-align: center;\n white-space: nowrap;\n border: 2px solid var(--primary-color);\n background-color:transparent;\n user-select: none;\n cursor: pointer;\n box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);\n transition-duration: 0.75s;\n}\n.m-btn.primary {\n background-color: var(--primary-color);\n color: var(--primary-color-invert);\n}\n.m-btn.thin-border { border-width: 1px; }\n.m-btn.large { padding:8px 14px; }\n.m-btn.small { padding:5px 12px; }\n.m-btn.tiny { padding:5px 6px; }\n.m-btn.circle { border-radius: 50%; }\n.m-btn:hover { \n background-color: var(--primary-color);\n color: var(--primary-color-invert);\n}\n.m-btn.nav { border: 2px solid var(--nav-accent-color); }\n.m-btn.nav:hover { \n background-color: var(--nav-accent-color);\n}\n.m-btn:disabled { \n background-color: var(--bg3);\n color: var(--fg3);\n border-color: var(--fg3);\n cursor: not-allowed;\n opacity: 0.4;\n}\n.m-btn:active {\n filter: brightness(75%);\n transform: scale(0.95);\n transition:scale 0s;\n}\n.toolbar-btn {\n cursor: pointer;\n padding: 4px;\n margin:0 2px;\n font-size: var(--font-size-small);\n min-width: 50px;\n color: var(--primary-color-invert);\n border-radius: 2px;\n border: none;\n background-color: var(--primary-color);\n}\n\ninput, textarea, select, button, pre {\n color:var(--fg);\n outline: none;\n background-color: var(--input-bg);\n border: 1px solid var(--border-color);\n border-radius: var(--border-radius);\n}\nbutton {\n font-family: var(--font-regular);\n}\n\n/* Form Inputs */\npre,\nselect,\ntextarea,\ninput[type=\"file\"],\ninput[type=\"text\"],\ninput[type=\"password\"] {\n font-family: var(--font-mono);\n font-weight: 400;\n font-size: var(--font-size-small);\n transition: border .2s;\n padding: 6px 5px;\n}\n\nselect {\n font-family: var(--font-regular);\n padding: 5px 30px 5px 5px;\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cpath%20d%3D%22M10.3%203.3L6%207.6%201.7%203.3A1%201%200%2000.3%204.7l5%205a1%201%200%20001.4%200l5-5a1%201%200%2010-1.4-1.4z%22%20fill%3D%22%23777777%22%2F%3E%3C%2Fsvg%3E\"); \n background-position: calc(100% - 5px) center;\n background-repeat: no-repeat; \n background-size: 10px;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n}\n\nselect:hover {\n border-color: var(--primary-color);\n}\n\ntextarea::placeholder,\ninput[type=\"text\"]::placeholder,\ninput[type=\"password\"]::placeholder {\n color: var(--placeholder-color);\n opacity:1;\n}\n\n\ninput[type=\"file\"]{\n font-family: var(--font-regular);\n padding:2px;\n cursor:pointer;\n border: 1px solid var(--primary-color);\n min-height: calc(var(--font-size-small) + 18px);\n}\n\ninput[type=\"file\"]::-webkit-file-upload-button {\n font-family: var(--font-regular);\n font-size: var(--font-size-small);\n outline: none;\n cursor:pointer;\n padding: 3px 8px;\n border: 1px solid var(--primary-color);\n background-color: var(--primary-color);\n color: var(--primary-color-invert);\n border-radius: var(--border-radius);;\n -webkit-appearance: none;\n}\n\npre,\ntextarea {\n scrollbar-width: thin;\n scrollbar-color: var(--border-color) var(--input-bg);\n}\n\npre::-webkit-scrollbar,\ntextarea::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\npre::-webkit-scrollbar-track,\ntextarea::-webkit-scrollbar-track {\n background:var(--input-bg);\n}\n \npre::-webkit-scrollbar-thumb,\ntextarea::-webkit-scrollbar-thumb {\n border-radius: 2px;\n background-color: var(--border-color);\n}\n\n.link {\n font-size:var(--font-size-small);\n text-decoration: underline;\n color:var(--blue);\n font-family:var(--font-mono);\n margin-bottom:2px;\n}\n\n/* Toggle Body */\ninput[type=\"checkbox\"] {\n appearance: none;\n display: inline-block;\n background-color: var(--light-bg);\n border: 1px solid var(--light-bg);\n border-radius: 9px;\n cursor: pointer;\n height: 18px;\n position: relative;\n transition: border .25s .15s, box-shadow .25s .3s, padding .25s;\n min-width: 36px;\n width: 36px;\n vertical-align: top;\n}\n/* Toggle Thumb */\ninput[type=\"checkbox\"]:after {\n position: absolute;\n background-color: var(--bg);\n border: 1px solid var(--light-bg);\n border-radius: 8px;\n content: '';\n top: 0px;\n left: 0px;\n right: 16px;\n display: block;\n height: 16px;\n transition: border .25s .15s, left .25s .1s, right .15s .175s;\n}\n\n/* Toggle Body - Checked */\ninput[type=\"checkbox\"]:checked {\n background-color: var(--green);\n border-color: var(--green);\n}\n/* Toggle Thumb - Checked*/\ninput[type=\"checkbox\"]:checked:after {\n border: 1px solid var(--green);\n left: 16px;\n right: 1px;\n transition: border .25s, left .15s .25s, right .25s .175s;\n}`;\n","import { css } from 'lit';\n\nexport default css`\n.row, .col {\n display:flex;\n} \n.row {\n align-items:center;\n flex-direction: row;\n}\n.col {\n align-items:stretch;\n flex-direction: column;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\n.m-table {\n border-spacing: 0; \n border-collapse: separate;\n border: 1px solid var(--light-border-color);\n border-radius: var(--border-radius);\n margin: 0;\n max-width: 100%;\n direction: ltr;\n}\n.m-table tr:first-child td,\n.m-table tr:first-child th {\n border-top: 0 none;\n}\n.m-table td, \n.m-table th {\n font-size: var(--font-size-small);\n line-height: calc(var(--font-size-small) + 4px);\n padding: 4px 5px 4px;\n vertical-align: top;\n}\n\n.m-table.padded-12 td, \n.m-table.padded-12 th {\n padding: 12px;\n}\n\n.m-table td:not([align]), \n.m-table th:not([align]) {\n text-align: left;\n}\n\n.m-table th {\n color: var(--fg2);\n font-size: var(--font-size-small);\n line-height: calc(var(--font-size-small) + 18px);\n font-weight: 600;\n letter-spacing: normal;\n background-color: var(--bg2);\n vertical-align: bottom;\n border-bottom: 1px solid var(--light-border-color);\n}\n\n.m-table > tbody > tr > td,\n.m-table > tr > td {\n border-top: 1px solid var(--light-border-color);\n text-overflow: ellipsis;\n overflow: hidden;\n}\n.table-title {\n font-size:var(--font-size-small);\n font-weight:bold;\n vertical-align: middle;\n margin: 12px 0 4px 0;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\n:host {\n container-type: inline-size;\n}\n.only-large-screen { display:none; }\n.endpoint-head .path {\n display: flex;\n font-family:var(--font-mono);\n font-size: var(--font-size-small);\n align-items: center;\n overflow-wrap: break-word;\n word-break: break-all;\n}\n\n.endpoint-head .descr {\n font-size: var(--font-size-small);\n color:var(--light-fg);\n font-weight:400;\n align-items: center;\n overflow-wrap: break-word;\n word-break: break-all;\n display:none;\n}\n\n.m-endpoint.expanded { margin-bottom:16px; }\n.m-endpoint > .endpoint-head{\n border-width:1px 1px 1px 5px;\n border-style:solid;\n border-color:transparent;\n border-top-color:var(--light-border-color);\n display:flex;\n padding:6px 16px;\n align-items: center;\n cursor: pointer;\n}\n.m-endpoint > .endpoint-head.put:hover,\n.m-endpoint > .endpoint-head.put.expanded {\n border-color:var(--orange); \n background-color:var(--light-orange); \n}\n.m-endpoint > .endpoint-head.post:hover,\n.m-endpoint > .endpoint-head.post.expanded {\n border-color:var(--green); \n background-color:var(--light-green); \n}\n.m-endpoint > .endpoint-head.get:hover,\n.m-endpoint > .endpoint-head.get.expanded {\n border-color:var(--blue); \n background-color:var(--light-blue); \n}\n.m-endpoint > .endpoint-head.delete:hover,\n.m-endpoint > .endpoint-head.delete.expanded {\n border-color:var(--red); \n background-color:var(--light-red); \n}\n\n.m-endpoint > .endpoint-head.head:hover,\n.m-endpoint > .endpoint-head.head.expanded,\n.m-endpoint > .endpoint-head.patch:hover,\n.m-endpoint > .endpoint-head.patch.expanded,\n.m-endpoint > .endpoint-head.options:hover,\n.m-endpoint > .endpoint-head.options.expanded {\n border-color:var(--yellow); \n background-color:var(--light-yellow); \n}\n\n.m-endpoint > .endpoint-head.deprecated:hover,\n.m-endpoint > .endpoint-head.deprecated.expanded {\n border-color:var(--border-color); \n filter:opacity(0.6);\n}\n\n.m-endpoint .endpoint-body {\n flex-wrap:wrap;\n padding:16px 0px 0 0px;\n border-width:0px 1px 1px 5px;\n border-style:solid;\n box-shadow: 0px 4px 3px -3px rgba(0, 0, 0, 0.15);\n}\n.m-endpoint .endpoint-body.delete{ border-color:var(--red); }\n.m-endpoint .endpoint-body.put{ border-color:var(--orange); }\n.m-endpoint .endpoint-body.post { border-color:var(--green); }\n.m-endpoint .endpoint-body.get { border-color:var(--blue); }\n.m-endpoint .endpoint-body.head,\n.m-endpoint .endpoint-body.patch,\n.m-endpoint .endpoint-body.options { \n border-color:var(--yellow); \n}\n\n.m-endpoint .endpoint-body.deprecated { \n border-color:var(--border-color);\n filter:opacity(0.6);\n}\n\n.endpoint-head .deprecated {\n color: var(--light-fg);\n filter:opacity(0.6);\n}\n\n.summary{\n padding:8px 8px;\n}\n.summary .title {\n font-size:calc(var(--font-size-regular) + 2px);\n margin-bottom: 6px;\n word-break: break-all;\n}\n\n.endpoint-head .method {\n padding:2px 5px;\n vertical-align: middle;\n font-size:var(--font-size-small);\n height: calc(var(--font-size-small) + 16px);\n line-height: calc(var(--font-size-small) + 8px);\n width: 60px;\n border-radius: 2px;\n display:inline-block;\n text-align: center;\n font-weight: bold;\n text-transform:uppercase;\n margin-right:5px;\n}\n.endpoint-head .method.delete{ border: 2px solid var(--red);}\n.endpoint-head .method.put{ border: 2px solid var(--orange); }\n.endpoint-head .method.post{ border: 2px solid var(--green); }\n.endpoint-head .method.get{ border: 2px solid var(--blue); }\n.endpoint-head .method.get.deprecated{ border: 2px solid var(--border-color); }\n.endpoint-head .method.head,\n.endpoint-head .method.patch,\n.endpoint-head .method.options { \n border: 2px solid var(--yellow); \n}\n\n.req-resp-container {\n display: flex;\n margin-top:16px;\n align-items: stretch;\n flex-wrap: wrap;\n flex-direction: column;\n border-top:1px solid var(--light-border-color);\n}\n\n.view-mode-request,\napi-response.view-mode {\n flex:1; \n min-height:100px;\n padding:16px 8px;\n overflow:hidden;\n}\n.view-mode-request {\n border-width:0 0 1px 0;\n border-style:dashed;\n}\n\n.head .view-mode-request,\n.patch .view-mode-request,\n.options .view-mode-request { \n border-color:var(--yellow); \n}\n.put .view-mode-request { \n border-color:var(--orange); \n}\n.post .view-mode-request { \n border-color:var(--green); \n}\n.get .view-mode-request { \n border-color:var(--blue); \n}\n.delete .view-mode-request { \n border-color:var(--red); \n}\n\n@container (min-width: 1024px) {\n .only-large-screen { display:block; }\n .endpoint-head .path{\n font-size: var(--font-size-regular);\n }\n .endpoint-head .descr{\n display: flex;\n }\n .endpoint-head .m-markdown-small,\n .descr .m-markdown-small{\n display:block;\n }\n .req-resp-container{\n flex-direction: var(--layout, row);\n flex-wrap: nowrap;\n }\n api-response.view-mode {\n padding:16px;\n }\n .view-mode-request.row-layout {\n border-width:0 1px 0 0;\n padding:16px;\n }\n .summary{\n padding:8px 16px;\n }\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\ncode[class*=\"language-\"],\npre[class*=\"language-\"] {\n text-align: left;\n white-space: pre;\n word-spacing: normal;\n word-break: normal;\n word-wrap: normal;\n line-height: 1.5;\n tab-size: 2;\n\n -webkit-hyphens: none;\n -moz-hyphens: none;\n -ms-hyphens: none;\n hyphens: none;\n}\n\n/* Code blocks */\npre[class*=\"language-\"] {\n padding: 1em;\n margin: .5em 0;\n overflow: auto;\n}\n\n/* Inline code */\n:not(pre) > code[class*=\"language-\"] {\n white-space: normal;\n}\n\n.token.comment,\n.token.block-comment,\n.token.prolog,\n.token.doctype,\n.token.cdata {\n color: var(--light-fg)\n}\n\n.token.punctuation {\n color: var(--fg);\n}\n\n.token.tag,\n.token.attr-name,\n.token.namespace,\n.token.deleted {\n color:var(--pink);\n}\n\n.token.function-name {\n color: var(--blue);\n}\n\n.token.boolean,\n.token.number,\n.token.function {\n color: var(--red);\n}\n\n.token.property,\n.token.class-name,\n.token.constant,\n.token.symbol {\n color: var(--code-property-color);\n}\n\n.token.selector,\n.token.important,\n.token.atrule,\n.token.keyword,\n.token.builtin {\n color: var(--code-keyword-color);\n}\n\n.token.string,\n.token.char,\n.token.attr-value,\n.token.regex,\n.token.variable { \n color: var(--green);\n}\n\n.token.operator,\n.token.entity,\n.token.url {\n color: var(--code-operator-color);\n}\n\n.token.important,\n.token.bold {\n font-weight: bold;\n}\n.token.italic {\n font-style: italic;\n}\n\n.token.entity {\n cursor: help;\n}\n\n.token.inserted {\n color: green;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\n.tab-panel {\n border: none;\n}\n.tab-buttons {\n height:30px;\n padding: 4px 4px 0 4px;\n border-bottom: 1px solid var(--light-border-color) ;\n align-items: stretch;\n overflow-y: hidden;\n overflow-x: auto;\n scrollbar-width: thin;\n}\n.tab-buttons::-webkit-scrollbar {\n height: 1px;\n background-color: var(--border-color);\n}\n.tab-btn {\n border: none;\n border-bottom: 3px solid transparent; \n color: var(--light-fg);\n background-color: transparent;\n white-space: nowrap;\n cursor:pointer;\n outline:none;\n font-family:var(--font-regular); \n font-size:var(--font-size-small);\n margin-right:16px;\n padding:1px;\n}\n.tab-btn.active {\n border-bottom: 3px solid var(--primary-color); \n font-weight:bold;\n color:var(--primary-color);\n}\n\n.tab-btn:hover {\n color:var(--primary-color);\n}\n.tab-content {\n margin:-1px 0 0 0;\n position:relative;\n min-height: 50px;\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\n.nav-bar-info:focus-visible,\n.nav-bar-tag:focus-visible,\n.nav-bar-path:focus-visible {\n outline: 1px solid;\n box-shadow: none;\n outline-offset: -4px;\n}\n.nav-bar-expand-all:focus-visible,\n.nav-bar-collapse-all:focus-visible,\n.nav-bar-tag-icon:focus-visible {\n outline: 1px solid;\n box-shadow: none;\n outline-offset: 2px;\n}\n.nav-bar {\n width:0;\n height:100%;\n overflow: hidden;\n color:var(--nav-text-color);\n background-color: var(--nav-bg-color);\n background-blend-mode: multiply;\n line-height: calc(var(--font-size-small) + 4px);\n display:none;\n position:relative;\n flex-direction:column;\n flex-wrap:nowrap;\n word-break:break-word;\n}\n::slotted([slot=nav-logo]) {\n padding:16px 16px 0 16px;\n}\n.nav-scroll {\n overflow-x: hidden;\n overflow-y: auto;\n overflow-y: overlay;\n scrollbar-width: thin;\n scrollbar-color: var(--nav-hover-bg-color) transparent;\n}\n\n.nav-bar-tag {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-direction: row;\n}\n.nav-bar.read .nav-bar-tag-icon {\n display:none;\n}\n.nav-bar-paths-under-tag {\n overflow:hidden;\n transition: max-height .2s ease-out, visibility .3s;\n}\n.collapsed .nav-bar-paths-under-tag {\n visibility: hidden;\n}\n\n.nav-bar-expand-all {\n transform: rotate(90deg); \n cursor:pointer; \n margin-right:10px;\n}\n.nav-bar-collapse-all {\n transform: rotate(270deg); \n cursor:pointer;\n}\n.nav-bar-expand-all:hover, .nav-bar-collapse-all:hover {\n color: var(--primary-color);\n}\n\n.nav-bar-tag-icon {\n color: var(--nav-text-color);\n font-size: 20px; \n}\n.nav-bar-tag-icon:hover {\n color:var(--nav-hover-text-color);\n}\n.nav-bar.focused .nav-bar-tag-and-paths.collapsed .nav-bar-tag-icon::after {\n content: '⌵';\n width:16px;\n height:16px;\n text-align: center;\n display: inline-block;\n transform: rotate(-90deg);\n transition: transform 0.2s ease-out 0s;\n}\n.nav-bar.focused .nav-bar-tag-and-paths.expanded .nav-bar-tag-icon::after {\n content: '⌵';\n width:16px;\n height:16px;\n text-align: center;\n display: inline-block;\n transition: transform 0.2s ease-out 0s;\n}\n.nav-scroll::-webkit-scrollbar {\n width: var(--scroll-bar-width, 8px);\n}\n.nav-scroll::-webkit-scrollbar-track {\n background:transparent;\n}\n.nav-scroll::-webkit-scrollbar-thumb {\n background-color: var(--nav-hover-bg-color);\n}\n\n.nav-bar-tag {\n font-size: var(--font-size-regular);\n color: var(--nav-accent-color);\n border-left:4px solid transparent;\n font-weight:bold;\n padding: 15px 15px 15px 10px;\n text-transform: capitalize;\n}\n\n.nav-bar-components,\n.nav-bar-h1,\n.nav-bar-h2,\n.nav-bar-info,\n.nav-bar-tag,\n.nav-bar-path {\n display:flex;\n cursor: pointer;\n width: 100%;\n border: none;\n border-radius:4px; \n color: var(--nav-text-color);\n background: transparent;\n border-left:4px solid transparent;\n}\n\n.nav-bar-h1,\n.nav-bar-h2,\n.nav-bar-path {\n font-size: calc(var(--font-size-small) + 1px);\n padding: var(--nav-item-padding);\n}\n.nav-bar-path.small-font {\n font-size: var(--font-size-small);\n}\n\n.nav-bar-info {\n font-size: var(--font-size-regular);\n padding: 16px 10px;\n font-weight:bold;\n}\n.nav-bar-section {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n font-size: var(--font-size-small);\n color: var(--nav-text-color);\n padding: var(--nav-item-padding);\n font-weight:bold;\n}\n.nav-bar-section.operations {\n cursor:pointer;\n}\n.nav-bar-section.operations:hover {\n color:var(--nav-hover-text-color);\n background-color:var(--nav-hover-bg-color);\n}\n\n.nav-bar-section:first-child {\n display: none;\n}\n.nav-bar-h2 {margin-left:12px;}\n\n.nav-bar-h1.left-bar.active,\n.nav-bar-h2.left-bar.active,\n.nav-bar-info.left-bar.active,\n.nav-bar-tag.left-bar.active,\n.nav-bar-path.left-bar.active,\n.nav-bar-section.left-bar.operations.active {\n border-left:4px solid var(--nav-accent-color);\n color:var(--nav-hover-text-color);\n}\n\n.nav-bar-h1.colored-block.active,\n.nav-bar-h2.colored-block.active,\n.nav-bar-info.colored-block.active,\n.nav-bar-tag.colored-block.active,\n.nav-bar-path.colored-block.active,\n.nav-bar-section.colored-block.operations.active {\n background-color: var(--nav-accent-color);\n color: var(--nav-accent-text-color);\n border-radius: 0;\n}\n\n.nav-bar-h1:hover,\n.nav-bar-h2:hover,\n.nav-bar-info:hover,\n.nav-bar-tag:hover,\n.nav-bar-path:hover {\n color:var(--nav-hover-text-color);\n background-color:var(--nav-hover-bg-color);\n}\n`;\n","import { css } from 'lit';\n\nexport default css`\n#api-info {\n font-size: calc(var(--font-size-regular) - 1px);\n margin-top: 8px;\n margin-left: -15px;\n}\n\n#api-info span:before {\n content: \"|\";\n display: inline-block;\n opacity: 0.5;\n width: 15px;\n text-align: center;\n}\n#api-info span:first-child:before {\n content: \"\";\n width: 0px;\n}\n`;\n","import { css } from 'lit';\n\n/*\nThis file is reserved for any custom css that developers want to add to\ncustomize their theme. Simply add your css to this file and yarn build.\n*/\n\nexport default css`\n\n`;\n","/* For Delayed Event Handler Execution */\nexport function debounce(fn, delay) {\n let timeoutID = null;\n return (...args) => {\n clearTimeout(timeoutID);\n const that = this;\n timeoutID = setTimeout(() => {\n fn.apply(that, args);\n }, delay);\n };\n}\n\nexport const invalidCharsRegEx = /[\\s#:?&={}]/g; // used for generating valid html element ids by replacing the invalid chars with hyphen (-)\nexport const rapidocApiKey = '_rapidoc_api_key';\n\nexport function sleep(ms) {\n // eslint-disable-next-line no-promise-executor-return\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function copyToClipboard(data, e) {\n const btnEl = e.target;\n const textArea = document.createElement('textarea');\n textArea.value = data;\n textArea.style.position = 'fixed'; // avoid scrolling to bottom\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n try {\n document.execCommand('copy');\n btnEl.innerText = 'Copied';\n setTimeout(() => {\n btnEl.innerText = 'Copy';\n }, 5000);\n } catch (err) {\n console.error('Unable to copy', err); // eslint-disable-line no-console\n }\n document.body.removeChild(textArea);\n}\n\nexport function getBaseUrlFromUrl(url) {\n const pathArray = url.split('/');\n return `${pathArray[0]}//${pathArray[2]}`;\n}\n\nexport async function wait(ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nexport function getMatchedComponents(searchVal, component) {\n return component.name.toLowerCase().includes(searchVal.toLowerCase());\n}\n\nexport function getMatchedPaths(searchVal, path, tagName = '') {\n const stringToSearch = `${path.method} ${path.path} ${path.summary || ''} ${path.description || ''} ${path.operationId || ''} ${tagName}`.toLowerCase();\n return stringToSearch.includes(searchVal.toLowerCase());\n}\n\nexport function schemaKeys(schemaProps, result = new Set()) {\n if (!schemaProps) {\n return result;\n }\n Object.keys(schemaProps).forEach((key) => {\n result.add(key);\n if (schemaProps[key].properties) {\n schemaKeys(schemaProps[key].properties, result);\n } else if (schemaProps[key].items?.properties) {\n schemaKeys(schemaProps[key].items?.properties, result);\n }\n });\n return result;\n}\n\nexport function advancedSearch(searchVal, allSpecTags, searchOptions = []) {\n if (!searchVal.trim() || searchOptions.length === 0) {\n return;\n }\n\n const pathsMatched = [];\n allSpecTags.forEach((tag) => {\n tag.paths.forEach((path) => {\n let stringToSearch = '';\n if (searchOptions.includes('search-api-path')) {\n stringToSearch = path.path;\n }\n if (searchOptions.includes('search-api-descr')) {\n stringToSearch = `${stringToSearch} ${(path.summary || '') + (path.description || '')}`;\n }\n if (searchOptions.includes('search-api-params')) {\n stringToSearch = `${stringToSearch} ${path.parameters?.map((v) => v.name).join(' ') || ''}`;\n }\n\n if (searchOptions.includes('search-api-request-body') && path.requestBody) {\n let schemaKeySet = new Set();\n for (const contentType in path.requestBody?.content) {\n if (path.requestBody.content[contentType].schema?.properties) {\n schemaKeySet = schemaKeys(path.requestBody.content[contentType].schema?.properties);\n }\n stringToSearch = `${stringToSearch} ${[...schemaKeySet].join(' ')}`;\n }\n }\n\n if (searchOptions.includes('search-api-resp-descr')) {\n stringToSearch = `${stringToSearch} ${Object.values(path.responses).map((v) => v.description || '').join(' ')}`;\n }\n\n if (stringToSearch.toLowerCase().includes(searchVal.trim().toLowerCase())) {\n pathsMatched.push({\n elementId: path.elementId,\n method: path.method,\n path: path.path,\n summary: path.summary || path.description || '',\n deprecated: path.deprecated,\n });\n }\n });\n });\n return pathsMatched;\n}\n\n/*\nexport function prettyXml(sourceXmlString) {\n const xmlDoc = new DOMParser().parseFromString(sourceXmlString, 'text/xml');\n const xsltDoc = new DOMParser().parseFromString([\n // describes how we want to modify the XML - indent everything\n `\n \n \n \n \n \n \n \n \n `,\n ].join('\\n'), 'application/xml');\n const xsltProcessor = new XSLTProcessor();\n xsltProcessor.importStylesheet(xsltDoc);\n const resultDoc = xsltProcessor.transformToDocument(xmlDoc);\n return new XMLSerializer().serializeToString(resultDoc);\n}\n*/\n\nexport function downloadResource(url, fileName) {\n if (url) {\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.style = 'display: none';\n a.href = url;\n a.download = fileName;\n a.click();\n a.remove();\n }\n}\n\nexport function viewResource(url) {\n if (url) {\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.style = 'display: none';\n a.href = url;\n a.target = '_blank';\n a.click();\n a.remove();\n }\n}\n","/* eslint-disable arrow-body-style */\nimport { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\n\nconst codeVerifier = '731DB1C3F7EA533B85E29492D26AA-1234567890-1234567890';\nconst codeChallenge = '4FatVDBJKPAo4JgLLaaQFMUcQPn5CrPRvLlaob9PTYc'; // Base64 encoded SHA-256\n\nconst localStorageKey = 'rapidoc';\n\nexport function applyApiKey(securitySchemeId, username = '', password = '', providedApikeyVal = '') {\n const securityObj = this.resolvedSpec.securitySchemes?.find((v) => (v.securitySchemeId === securitySchemeId));\n if (!securityObj) {\n return false;\n }\n let finalApiKeyValue = '';\n if (securityObj.scheme?.toLowerCase() === 'basic') {\n if (username) {\n finalApiKeyValue = `Basic ${Buffer.from(`${username}:${password}`, 'utf8').toString('base64')}`;\n }\n } else if (providedApikeyVal) {\n securityObj.value = providedApikeyVal;\n finalApiKeyValue = `${securityObj.scheme?.toLowerCase() === 'bearer' ? 'Bearer ' : ''}${providedApikeyVal}`;\n }\n if (finalApiKeyValue) {\n securityObj.finalKeyValue = finalApiKeyValue;\n this.requestUpdate();\n return true;\n }\n return false;\n}\n\nexport function onClearAllApiKeys() {\n this.resolvedSpec.securitySchemes?.forEach((v) => {\n v.user = '';\n v.password = '';\n v.value = '';\n v.finalKeyValue = '';\n });\n this.requestUpdate();\n}\n\nfunction getPersistedApiKeys() {\n return JSON.parse(localStorage.getItem(localStorageKey)) || {};\n}\n\nfunction setPersistedApiKeys(obj) {\n localStorage.setItem(localStorageKey, JSON.stringify(obj));\n}\n\nexport function recoverPersistedApiKeys() {\n const rapidocLs = getPersistedApiKeys.call(this);\n Object.values(rapidocLs).forEach((p) => {\n applyApiKey.call(this, p.securitySchemeId, p.username, p.password, p.value);\n });\n}\n\nfunction onApiKeyChange(securitySchemeId) {\n let apiKeyValue = '';\n const securityObj = this.resolvedSpec.securitySchemes.find((v) => (v.securitySchemeId === securitySchemeId));\n if (securityObj) {\n const trEl = this.shadowRoot.getElementById(`security-scheme-${securitySchemeId}`);\n if (trEl) {\n if (securityObj.type && securityObj.scheme && securityObj.type === 'http' && securityObj.scheme.toLowerCase() === 'basic') {\n const userVal = trEl.querySelector('.api-key-user').value.trim();\n const passwordVal = trEl.querySelector('.api-key-password').value.trim();\n applyApiKey.call(this, securitySchemeId, userVal, passwordVal);\n } else {\n apiKeyValue = trEl.querySelector('.api-key-input').value.trim();\n applyApiKey.call(this, securitySchemeId, '', '', apiKeyValue);\n }\n if (this.persistAuth === 'true') {\n const rapidocLs = getPersistedApiKeys.call(this);\n rapidocLs[securitySchemeId] = securityObj;\n setPersistedApiKeys.call(this, rapidocLs);\n }\n }\n }\n}\n\n// Updates the OAuth Access Token (API key), so it reflects in UI and gets used in TRY calls\nfunction updateOAuthKey(securitySchemeId, accessToken, tokenType = 'Bearer') {\n const securityObj = this.resolvedSpec.securitySchemes.find((v) => (v.securitySchemeId === securitySchemeId));\n securityObj.finalKeyValue = `${(tokenType.toLowerCase() === 'bearer' ? 'Bearer' : (tokenType.toLowerCase() === 'mac' ? 'MAC' : tokenType))} ${accessToken}`;\n this.requestUpdate();\n}\n\n/* eslint-disable no-console */\n// Gets Access-Token in exchange of Authorization Code\nasync function fetchAccessToken(tokenUrl, clientId, clientSecret, redirectUrl, grantType, authCode, securitySchemeId, authFlowDivEl, sendClientSecretIn = 'header', scopes = null, username = null, password = null) {\n const respDisplayEl = authFlowDivEl ? authFlowDivEl.querySelector('.oauth-resp-display') : undefined;\n const urlFormParams = new URLSearchParams();\n const headers = new Headers();\n urlFormParams.append('grant_type', grantType);\n if (grantType === 'authorization_code') {\n urlFormParams.append('client_id', clientId);\n urlFormParams.append('client_secret', clientSecret);\n }\n if (grantType !== 'client_credentials' && grantType !== 'password') {\n urlFormParams.append('redirect_uri', redirectUrl);\n }\n if (authCode) {\n urlFormParams.append('code', authCode);\n urlFormParams.append('code_verifier', codeVerifier); // for PKCE\n }\n if (sendClientSecretIn === 'header') {\n headers.set('Authorization', `Basic ${Buffer.from(`${clientId}:${clientSecret}`, 'utf8').toString('base64')}`);\n } else if (grantType !== 'authorization_code') {\n urlFormParams.append('client_id', clientId);\n urlFormParams.append('client_secret', clientSecret);\n }\n if (grantType === 'password') {\n urlFormParams.append('username', username);\n urlFormParams.append('password', password);\n }\n if (scopes) {\n urlFormParams.append('scope', scopes);\n }\n\n try {\n const resp = await fetch(tokenUrl, { method: 'POST', headers, body: urlFormParams });\n const tokenResp = await resp.json();\n if (resp.ok) {\n if (tokenResp.token_type && tokenResp.access_token) {\n updateOAuthKey.call(this, securitySchemeId, tokenResp.access_token, tokenResp.token_type);\n if (respDisplayEl) {\n respDisplayEl.innerHTML = 'Access Token Received';\n }\n return true;\n }\n } else {\n if (respDisplayEl) {\n respDisplayEl.innerHTML = `${tokenResp.error_description || tokenResp.error_description || 'Unable to get access token'}`;\n }\n return false;\n }\n } catch {\n if (respDisplayEl) {\n respDisplayEl.innerHTML = 'Failed to get access token';\n }\n return false;\n }\n}\n\n// Gets invoked when it receives the Authorization Code from the other window via message-event\nasync function onWindowMessageEvent(msgEvent, winObj, tokenUrl, clientId, clientSecret, redirectUrl, grantType, sendClientSecretIn, securitySchemeId, authFlowDivEl) {\n sessionStorage.removeItem('winMessageEventActive');\n winObj.close();\n if (msgEvent.data.fake) {\n return;\n }\n if (!msgEvent.data) {\n console.warn('RapiDoc: Received no data with authorization message');\n }\n if (msgEvent.data.error) {\n console.warn('RapiDoc: Error while receiving data');\n }\n if (msgEvent.data) {\n if (msgEvent.data.responseType === 'code') {\n // Authorization Code flow\n fetchAccessToken.call(this, tokenUrl, clientId, clientSecret, redirectUrl, grantType, msgEvent.data.code, securitySchemeId, authFlowDivEl, sendClientSecretIn);\n } else if (msgEvent.data.responseType === 'token') {\n // Implicit flow\n updateOAuthKey.call(this, securitySchemeId, msgEvent.data.access_token, msgEvent.data.token_type);\n }\n }\n}\n\n// code_challenge generator for PKCE flow\n// TODO: Implement dynamic generation of code-challenge based on code-verifier\n/*\nasync function generateCodeChallenge() {\n const encoder = new TextEncoder();\n const data = encoder.encode(codeVerifier);\n const sha256Hash = await window.crypto.subtle.digest('SHA-256', data); // returns Unit8Array\n // const utf8Decoder = new TextDecoder();\n // const b64EncodedSha256 = btoa(utf8Decoder.decode(sha256Hash));\n const b64EncodedSha256 = base64encode(sha256Hash);\n return b64EncodedSha256;\n}\n*/\n\nasync function onInvokeOAuthFlow(securitySchemeId, flowType, authUrl, tokenUrl, e) {\n const authFlowDivEl = e.target.closest('.oauth-flow');\n const clientId = authFlowDivEl.querySelector('.oauth-client-id') ? authFlowDivEl.querySelector('.oauth-client-id').value.trim() : '';\n const clientSecret = authFlowDivEl.querySelector('.oauth-client-secret') ? authFlowDivEl.querySelector('.oauth-client-secret').value.trim() : '';\n const username = authFlowDivEl.querySelector('.api-key-user') ? authFlowDivEl.querySelector('.api-key-user').value.trim() : '';\n const password = authFlowDivEl.querySelector('.api-key-password') ? authFlowDivEl.querySelector('.api-key-password').value.trim() : '';\n const sendClientSecretIn = authFlowDivEl.querySelector('.oauth-send-client-secret-in') ? authFlowDivEl.querySelector('.oauth-send-client-secret-in').value.trim() : 'header';\n const checkedScopeEls = [...authFlowDivEl.querySelectorAll('.scope-checkbox:checked')];\n const pkceCheckboxEl = authFlowDivEl.querySelector(`#${securitySchemeId}-pkce`);\n const state = (`${Math.random().toString(36).slice(2, 9)}random${Math.random().toString(36).slice(2, 9)}`);\n const nonce = (`${Math.random().toString(36).slice(2, 9)}random${Math.random().toString(36).slice(2, 9)}`);\n // const codeChallenge = await generateCodeChallenge(codeVerifier);\n const redirectUrlObj = new URL(`${window.location.origin}${window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/'))}/${this.oauthReceiver}`);\n let grantType = '';\n let responseType = '';\n let newWindow;\n\n // clear previous error messages\n const errEls = [...authFlowDivEl.parentNode.querySelectorAll('.oauth-resp-display')];\n errEls.forEach((v) => { v.innerHTML = ''; });\n\n if (flowType === 'authorizationCode' || flowType === 'implicit') {\n const authUrlObj = new URL(authUrl);\n if (flowType === 'authorizationCode') {\n grantType = 'authorization_code';\n responseType = 'code';\n } else if (flowType === 'implicit') {\n responseType = 'token';\n }\n const authCodeParams = new URLSearchParams(authUrlObj.search);\n const selectedScopes = checkedScopeEls.map((v) => v.value).join(' ');\n if (selectedScopes) {\n authCodeParams.set('scope', selectedScopes);\n }\n authCodeParams.set('client_id', clientId);\n authCodeParams.set('redirect_uri', redirectUrlObj.toString());\n authCodeParams.set('response_type', responseType);\n authCodeParams.set('state', state);\n authCodeParams.set('nonce', nonce);\n if (pkceCheckboxEl && pkceCheckboxEl.checked) {\n authCodeParams.set('code_challenge', codeChallenge);\n authCodeParams.set('code_challenge_method', 'S256');\n }\n authCodeParams.set('show_dialog', true);\n authUrlObj.search = authCodeParams.toString();\n // If any older message-event-listener is active then fire a fake message to remove it (these are single time listeners)\n if (sessionStorage.getItem('winMessageEventActive') === 'true') {\n window.postMessage({ fake: true }, this);\n }\n setTimeout(() => {\n newWindow = window.open(authUrlObj.toString());\n if (!newWindow) {\n console.error(`RapiDoc: Unable to open ${authUrlObj.toString()} in a new window`);\n } else {\n sessionStorage.setItem('winMessageEventActive', 'true');\n window.addEventListener(\n 'message',\n (msgEvent) => onWindowMessageEvent.call(this, msgEvent, newWindow, tokenUrl, clientId, clientSecret, redirectUrlObj.toString(), grantType, sendClientSecretIn, securitySchemeId, authFlowDivEl),\n { once: true },\n );\n }\n }, 10);\n } else if (flowType === 'clientCredentials') {\n grantType = 'client_credentials';\n const selectedScopes = checkedScopeEls.map((v) => v.value).join(' ');\n fetchAccessToken.call(this, tokenUrl, clientId, clientSecret, redirectUrlObj.toString(), grantType, '', securitySchemeId, authFlowDivEl, sendClientSecretIn, selectedScopes);\n } else if (flowType === 'password') {\n grantType = 'password';\n const selectedScopes = checkedScopeEls.map((v) => v.value).join(' ');\n fetchAccessToken.call(this, tokenUrl, clientId, clientSecret, redirectUrlObj.toString(), grantType, '', securitySchemeId, authFlowDivEl, sendClientSecretIn, selectedScopes, username, password);\n }\n}\n/* eslint-enable no-console */\n\n/* eslint-disable indent */\n\nfunction oAuthFlowTemplate(flowName, clientId, clientSecret, securitySchemeId, authFlow, defaultScopes = [], receiveTokenIn = 'header', receiveTokenInOptions = undefined, allowTry = 'true') {\n let { authorizationUrl, tokenUrl, refreshUrl } = authFlow;\n const pkceOnly = authFlow['x-pkce-only'] || false;\n const isUrlAbsolute = (url) => (url.indexOf('://') > 0 || url.indexOf('//') === 0);\n /*\n Calculcate Relative URL based on the following logic\n IF this.selectedServer?.computedUrl ends with slash and the refreshUrl / tokenUrl / authorizationUrl do not start with slash\n THEN Relative URL is concatenate else use this.selectedServer?.computedUrl + refreshUrl / tokenUrl / authorizationUrl\n ELSE Relative URL is concatenate else use (origin of this.selectedServer?.computedUrl) + refreshUrl / tokenUrl / authorizationUrl\n */\n const url = new URL(this.selectedServer?.computedUrl);\n const originUrl = url.origin;\n if (refreshUrl && !isUrlAbsolute(refreshUrl)) {\n if (this.selectedServer?.computedUrl.trim().endsWith('/') && !refreshUrl.trim().startsWith('/')) {\n refreshUrl = `${this.selectedServer?.computedUrl.trim()}${tokenUrl.trim()}`;\n } else {\n refreshUrl = `${originUrl}/${refreshUrl.replace(/^\\//, '')}`;\n }\n }\n if (tokenUrl && !isUrlAbsolute(tokenUrl)) {\n if (this.selectedServer?.computedUrl.trim().endsWith('/') && !tokenUrl.trim().startsWith('/')) {\n tokenUrl = `${this.selectedServer?.computedUrl.trim()}${tokenUrl.trim()}`;\n } else {\n tokenUrl = `${originUrl}/${tokenUrl.replace(/^\\//, '')}`;\n }\n }\n if (authorizationUrl && !isUrlAbsolute(authorizationUrl)) {\n if (this.selectedServer?.computedUrl.trim().endsWith('/') && !authorizationUrl.trim().startsWith('/')) {\n authorizationUrl = `${this.selectedServer?.computedUrl.trim()}${authorizationUrl.trim()}`;\n } else {\n authorizationUrl = `${originUrl}/${authorizationUrl.replace(/^\\//, '')}`;\n }\n }\n let flowNameDisplay;\n if (flowName === 'authorizationCode') {\n flowNameDisplay = 'Authorization Code Flow';\n } else if (flowName === 'clientCredentials') {\n flowNameDisplay = 'Client Credentials Flow';\n } else if (flowName === 'implicit') {\n flowNameDisplay = 'Implicit Flow';\n } else if (flowName === 'password') {\n flowNameDisplay = 'Password Flow';\n } else {\n flowNameDisplay = flowName;\n }\n return html`\n
    \n
    ${flowNameDisplay}
    \n ${authorizationUrl\n ? html`
    Auth URL ${authorizationUrl}
    `\n : ''\n }\n ${tokenUrl\n ? html`
    Token URL ${tokenUrl}
    `\n : ''\n }\n ${refreshUrl\n ? html`
    Refresh URL ${refreshUrl}
    `\n : ''\n }\n ${flowName === 'authorizationCode' || flowName === 'clientCredentials' || flowName === 'implicit' || flowName === 'password'\n ? html`\n ${authFlow.scopes\n ? html`\n Scopes \n
    \n ${Object.entries(authFlow.scopes).map((scopeAndDescr, index) => html`\n
    \n \n \n
    `)\n }\n
    `\n : ''\n }\n ${flowName === 'password' && allowTry === 'true'\n ? html`\n
    \n \n \n
    `\n : ''\n }\n ${allowTry === 'true'\n ? html`\n
    \n ${flowName === 'authorizationCode'\n ? html`\n
    \n \n \n
    `\n : ''\n }\n \n ${flowName === 'authorizationCode' || flowName === 'clientCredentials' || flowName === 'password'\n ? html`\n \n `\n : ''\n }\n ${flowName === 'authorizationCode' || flowName === 'clientCredentials' || flowName === 'implicit' || flowName === 'password'\n ? html`\n `\n : ''\n }\n
    \n
    `\n : ''\n }`\n : ''\n }\n
    \n `;\n}\n\nfunction removeApiKey(securitySchemeId) {\n const securityObj = this.resolvedSpec.securitySchemes?.find((v) => (v.securitySchemeId === securitySchemeId));\n securityObj.user = '';\n securityObj.password = '';\n securityObj.value = '';\n securityObj.finalKeyValue = '';\n if (this.persistAuth === 'true') {\n const rapidocLs = getPersistedApiKeys.call(this);\n delete rapidocLs[securityObj.securitySchemeId];\n setPersistedApiKeys.call(this, rapidocLs);\n }\n this.requestUpdate();\n}\n\nexport default function securitySchemeTemplate(allowTry = 'true') {\n if (!this.resolvedSpec) { return ''; }\n // eslint-disable-next-line no-console\n console.log('allowTry: ', allowTry);\n const providedApiKeys = this.resolvedSpec.securitySchemes?.filter((v) => (v.finalKeyValue));\n if (!providedApiKeys) {\n return;\n }\n return html`\n
    \n
    AUTHENTICATION
    \n ${allowTry === 'true'\n ? html`\n
    \n ${providedApiKeys.length > 0\n ? html`\n
    ${providedApiKeys.length} API key applied
    \n
    \n `\n : html`
    No API key applied
    `\n }\n `\n : ''\n }\n
    \n ${this.resolvedSpec.securitySchemes && this.resolvedSpec.securitySchemes.length > 0\n ? html`\n \n ${this.resolvedSpec.securitySchemes\n .filter((v) => v.type)\n .map((v) => html`\n \n \n \n ${v.type.toLowerCase() === 'oauth2'\n ? html`\n \n \n \n `\n : ''\n }\n `)}\n
    \n
    \n ${v.typeDisplay}\n ${v.finalKeyValue\n ? html`\n ${v.finalKeyValue ? 'Key Applied' : ''} \n \n `\n : ''\n }\n
    \n ${v.description ? html`
    ${unsafeHTML(marked(v.description || ''))}
    ` : ''}\n ${(v.type.toLowerCase() === 'apikey')\n ? html`\n
    Send ${v.name} in ${v.in}
    \n ${allowTry === 'true'\n ? html`\n
    \n ${v.in !== 'cookie'\n ? html`\n \n `\n : html` cookies cannot be set from here`\n }\n
    `\n : ''\n }`\n : ''\n }\n ${v.type.toLowerCase() === 'http' && v.scheme?.toLowerCase() === 'basic'\n ? html`\n
    \n Send Authorization in header containing the word Basic followed by a space and a base64 encoded string of username:password.\n
    \n ${allowTry === 'true'\n ? html`\n
    \n \n \n \n
    `\n : ''\n }`\n : ''\n }\n ${v.type.toLowerCase() === 'http' && v.scheme?.toLowerCase() === 'bearer'\n ? html`\n
    Send Authorization in header containing the word Bearer followed by a space and token value
    \n ${allowTry === 'true'\n ? html`\n
    \n \n \n
    `\n : ''\n }`\n : ''\n }\n
    \n ${Object.keys(v.flows).map((f) => oAuthFlowTemplate\n .call(\n this,\n f,\n (v.flows[f]['x-client-id'] || v['x-client-id'] || ''),\n (v.flows[f]['x-client-secret'] || v['x-client-secret'] || ''),\n v.securitySchemeId,\n v.flows[f],\n (v.flows[f]['x-default-scopes'] || v['x-default-scopes']),\n (v.flows[f]['x-receive-token-in'] || v['x-receive-token-in']),\n (v.flows[f]['x-receive-token-in-options'] || v['x-receive-token-in-options']),\n allowTry,\n ))}\n
    `\n : ''\n }\n \n
    \n`;\n}\n\nexport function pathSecurityTemplate(pathSecurity) {\n if (this.resolvedSpec.securitySchemes && pathSecurity) {\n const orSecurityKeys1 = [];\n if (Array.isArray(pathSecurity)) {\n if (pathSecurity.length === 0) {\n return '';\n }\n } else {\n return '';\n }\n pathSecurity.forEach((pSecurity) => {\n const andSecurityKeys1 = [];\n const andKeyTypes = [];\n if (Object.keys(pSecurity).length === 0) {\n orSecurityKeys1.push({\n securityTypes: 'None',\n securityDefs: [],\n });\n } else {\n Object.keys(pSecurity).forEach((pathSecurityKey) => {\n let pathScopes = '';\n const s = this.resolvedSpec.securitySchemes.find((ss) => ss.securitySchemeId === pathSecurityKey);\n if (pSecurity[pathSecurityKey] && Array.isArray(pSecurity[pathSecurityKey])) {\n pathScopes = pSecurity[pathSecurityKey].join(', ');\n }\n if (s) {\n andKeyTypes.push(s.typeDisplay);\n andSecurityKeys1.push({ ...s, ...({ scopes: pathScopes }) });\n }\n });\n orSecurityKeys1.push({\n securityTypes: andKeyTypes.length > 1 ? `${andKeyTypes[0]} + ${andKeyTypes.length - 1} more` : andKeyTypes[0],\n securityDefs: andSecurityKeys1,\n });\n }\n });\n return html`
    \n
    \n \n ${orSecurityKeys1.map((orSecurityItem1, i) => html`\n ${orSecurityItem1.securityTypes\n ? html`\n ${i !== 0 ? html`
    OR
    ` : ''}\n
    \n \n
    \n ${orSecurityItem1.securityDefs.length > 1 ? html`
    Requires all of the following
    ` : ''}\n
    \n ${orSecurityItem1.securityDefs.map((andSecurityItem, j) => {\n const scopeHtml = html`${andSecurityItem.scopes !== ''\n ? html`\n
    \n Required scopes:\n
    \n
    \n ${andSecurityItem.scopes.split(',').map((scope, cnt) => html`${cnt === 0 ? '' : '┃'}${scope}`)}\n
    \n
    `\n : ''\n }`;\n\n return html`\n ${andSecurityItem.type === 'oauth2'\n ? html`\n
    \n ${orSecurityItem1.securityDefs.length > 1\n ? html`${j + 1}.  `\n : 'Needs'\n }\n OAuth Token ${andSecurityItem.securitySchemeId} in Authorization header\n ${scopeHtml}\n
    `\n : andSecurityItem.type === 'http'\n ? html`\n
    \n ${orSecurityItem1.securityDefs.length > 1 ? html`${j + 1}.  ` : html`Requires`}\n ${andSecurityItem.scheme === 'basic'\n ? 'Base 64 encoded username:password'\n : html`Bearer Token ${andSecurityItem.nameId} `\n } in Authorization header\n ${scopeHtml}\n
    `\n : html`\n
    \n ${orSecurityItem1.securityDefs.length > 1\n ? html`${j + 1}.  `\n : html`Requires`\n }\n ${html`Token in ${andSecurityItem.name} ${andSecurityItem.in}`}\n ${scopeHtml}\n
    `\n }`;\n })}\n
    \n
    \n
    \n `\n : ''\n }\n `)\n }\n
    \n
    \n `;\n }\n return '';\n}\n\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport Prism from 'prismjs';\nimport { copyToClipboard } from '~/utils/common-utils';\n\n/* eslint-disable indent */\nexport default function codeSamplesTemplate(xCodeSamples) {\n return html`\n
    CODE SAMPLES\n
    {\n if (!e.target.classList.contains('tab-btn')) { return; }\n const clickedTab = e.target.dataset.tab;\n\n const tabButtons = [...e.currentTarget.querySelectorAll('.tab-btn')];\n const tabContents = [...e.currentTarget.querySelectorAll('.tab-content')];\n tabButtons.forEach((tabBtnEl) => tabBtnEl.classList[tabBtnEl.dataset.tab === clickedTab ? 'add' : 'remove']('active'));\n tabContents.forEach((tabBodyEl) => { tabBodyEl.style.display = (tabBodyEl.dataset.tab === clickedTab ? 'block' : 'none'); });\n }\n }\">\n
    \n ${xCodeSamples.map((v, i) => html``)}\n
    \n ${xCodeSamples.map((v, i) => html`\n
    \n \n
    ${Prism.languages[v.lang?.toLowerCase()] ? unsafeHTML(Prism.highlight(v.source, Prism.languages[v.lang?.toLowerCase()], v.lang?.toLowerCase())) : v.source}
    \n
    `)\n }\n
    \n
    `;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\n\n/* eslint-disable indent */\nexport default function callbackTemplate(callbacks) {\n return html`\n
    CALLBACKS
    \n ${Object.entries(callbacks).map((kv) => html`\n
    \n ${kv[0]}\n ${Object.entries(kv[1]).map((pathObj) => html`\n
    \n
    \n ${Object.entries(pathObj[1]).map((method) => html`\n
    \n
    \n
    \n \n ${method[0]} \n
    \n ${pathObj[0]} \n
    \n
    \n \n\n \n
    \n
    \n `)}\n
    \n
    \n `)}\n
    \n `)}\n `;\n}\n/* eslint-enable indent */\n","import { LitElement, html, css } from 'lit';\nimport { copyToClipboard } from '~/utils/common-utils';\nimport FontStyles from '~/styles/font-styles';\nimport BorderStyles from '~/styles/border-styles';\nimport InputStyles from '~/styles/input-styles';\nimport CustomStyles from '~/styles/custom-styles';\n\nexport default class JsonTree extends LitElement {\n static get properties() {\n return {\n data: { type: Object },\n renderStyle: { type: String, attribute: 'render-style' },\n };\n }\n\n static get styles() {\n return [\n FontStyles,\n BorderStyles,\n InputStyles,\n css`\n :host{\n display:flex;\n }\n :where(button, input[type=\"checkbox\"], [tabindex=\"0\"]):focus-visible { box-shadow: var(--focus-shadow); }\n :where(input[type=\"text\"], input[type=\"password\"], select, textarea):focus-visible { border-color: var(--primary-color); }\n .json-tree {\n position: relative;\n font-family: var(--font-mono);\n font-size: var(--font-size-small);\n display:inline-block;\n overflow:hidden;\n word-break: break-all;\n flex:1;\n line-height: calc(var(--font-size-small) + 6px);\n min-height: 40px;\n direction: ltr; \n text-align: left;\n }\n\n .open-bracket {\n display:inline-block;\n padding: 0 20px 0 0;\n cursor:pointer;\n border: 1px solid transparent;\n border-radius:3px;\n }\n .close-bracket {\n border: 1px solid transparent;\n border-radius:3px;\n display:inline-block;\n }\n .open-bracket:hover {\n color:var(--primary-color);\n background-color:var(--hover-color);\n border: 1px solid var(--border-color);\n }\n .open-bracket.expanded:hover ~ .inside-bracket {\n border-left: 1px solid var(--fg3);\n }\n .open-bracket.expanded:hover ~ .close-bracket {\n color:var(--primary-color);\n }\n .inside-bracket {\n padding-left:12px;\n overflow: hidden;\n border-left:1px dotted var(--border-color);\n }\n .open-bracket.collapsed + .inside-bracket,\n .open-bracket.collapsed + .inside-bracket + .close-bracket {\n display:none;\n }\n\n .string{color:var(--green);}\n .number{color:var(--blue);}\n .null{color:var(--red);}\n .boolean{color:var(--purple);}\n .object{color:var(--fg)}\n .toolbar {\n position: absolute;\n top:5px;\n right:6px;\n display:flex;\n padding:2px;\n align-items: center;\n }`,\n CustomStyles,\n ];\n }\n\n /* eslint-disable indent */\n render() {\n return html`\n
    \n
    \n \n
    \n ${this.generateTree(this.data, true)}\n
    \n `;\n }\n\n generateTree(data, isLast = false) {\n if (data === null) {\n return html`null${isLast ? '' : ','}`;\n }\n if (typeof data === 'object' && (data instanceof Date === false)) {\n const detailType = Array.isArray(data) ? 'array' : 'pure_object';\n if (Object.keys(data).length === 0) {\n return html`${(Array.isArray(data) ? '[ ],' : '{ },')}`;\n }\n return html`\n
    ${detailType === 'array' ? '[' : '{'}
    \n
    \n ${Object.keys(data).map((key, i, a) => html`\n
    \n ${detailType === 'pure_object' ? html`\"${key}\":` : ''}\n ${this.generateTree(data[key], i === (a.length - 1))}\n
    `)\n }\n
    \n
    ${detailType === 'array' ? ']' : '}'}${isLast ? '' : ','}
    \n `;\n }\n return (typeof data === 'string' || data instanceof Date)\n ? html`\"${data}\"${isLast ? '' : ','}`\n : html`${data}${isLast ? '' : ','}`;\n }\n /* eslint-enable indent */\n\n toggleExpand(e) {\n const openBracketEl = e.target;\n if (e.target.classList.contains('open-bracket')) {\n if (openBracketEl.classList.contains('expanded')) {\n openBracketEl.classList.replace('expanded', 'collapsed');\n e.target.innerHTML = e.target.classList.contains('array') ? '[...]' : '{...}';\n } else {\n openBracketEl.classList.replace('collapsed', 'expanded');\n e.target.innerHTML = e.target.classList.contains('array') ? '[' : '{';\n }\n }\n }\n}\n// Register the element with the browser\ncustomElements.define('json-tree', JsonTree);\n","import { LitElement, html, css } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport FontStyles from '~/styles/font-styles';\nimport SchemaStyles from '~/styles/schema-styles';\nimport BorderStyles from '~/styles/border-styles';\nimport CustomStyles from '~/styles/custom-styles';\n\nexport default class SchemaTree extends LitElement {\n static get properties() {\n return {\n data: { type: Object },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n schemaHideReadOnly: { type: String, attribute: 'schema-hide-read-only' },\n schemaHideWriteOnly: { type: String, attribute: 'schema-hide-write-only' },\n };\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.schemaExpandLevel || this.schemaExpandLevel < 1) { this.schemaExpandLevel = 99999; }\n if (!this.schemaDescriptionExpanded || !'true false'.includes(this.schemaDescriptionExpanded)) { this.schemaDescriptionExpanded = 'false'; }\n if (!this.schemaHideReadOnly || !'true false'.includes(this.schemaHideReadOnly)) { this.schemaHideReadOnly = 'true'; }\n if (!this.schemaHideWriteOnly || !'true false'.includes(this.schemaHideWriteOnly)) { this.schemaHideWriteOnly = 'true'; }\n }\n\n static get styles() {\n return [\n FontStyles,\n SchemaStyles,\n BorderStyles,\n css`\n .tree {\n font-size:var(--font-size-small);\n text-align: left;\n direction: ltr;\n line-height:calc(var(--font-size-small) + 6px);\n }\n .tree .tr:hover{\n background-color:var(--hover-color);\n }\n .collapsed-all-descr .tr:not(.expanded-descr) {\n overflow: hidden;\n max-height:calc(var(--font-size-small) + 8px);\n }\n .tree .key {\n max-width: 300px;\n }\n .tr.expanded:hover > .td.key > .open-bracket {\n color: var(--primary-color);\n }\n .tr.expanded:hover + .inside-bracket {\n border-left: 1px solid var(--fg3);\n }\n .tr.expanded:hover + .inside-bracket + .close-bracket {\n color: var(--primary-color);\n }\n .inside-bracket.xxx-of-option {\n border-left: 1px solid transparent;\n }\n .open-bracket{\n display:inline-block;\n padding: 0 20px 0 0;\n cursor:pointer;\n border: 1px solid transparent;\n border-radius:3px;\n }\n .open-bracket:hover {\n color:var(--primary-color);\n background-color:var(--hover-color);\n border: 1px solid var(--border-color);\n }\n .close-bracket{\n display:inline-block;\n font-family: var(--font-mono);\n }\n .tr.collapsed + .inside-bracket,\n .tr.collapsed + .inside-bracket + .close-bracket{\n overflow: hidden;\n display:none;\n }\n .inside-bracket.object,\n .inside-bracket.array {\n border-left: 1px dotted var(--border-color);\n }`,\n CustomStyles,\n ];\n }\n\n /* eslint-disable indent */\n render() {\n return html`\n
    this.handleAllEvents(e)}\">\n
    \n
    ${this.data?.['::type'] || ''}
    \n ${this.allowSchemaDescriptionExpandToggle === 'true'\n ? html`\n
    \n
    \n ${this.schemaDescriptionExpanded === 'true' ? 'Single line description' : 'Multiline description'}\n
    `\n : ''\n }\n
    \n ${unsafeHTML(marked(this.data?.['::description'] || ''))}\n ${this.data\n ? html`\n ${this.generateTree(\n this.data['::type'] === 'array' ? this.data['::props'] : this.data,\n this.data['::type'],\n this.data['::array-type'] || '',\n )}`\n : html` Schema not found `\n }\n
    \n `;\n }\n\n generateTree(data, dataType = 'object', arrayType = '', key = '', description = '', schemaLevel = 0, indentLevel = 0, readOrWrite = '', isDeprecated = false) {\n if (this.schemaHideReadOnly === 'true') {\n if (dataType === 'array') {\n if (readOrWrite === 'readonly') {\n return;\n }\n }\n if (data?.['::readwrite'] === 'readonly') {\n return;\n }\n }\n if (this.schemaHideWriteOnly === 'true') {\n if (dataType === 'array') {\n if (readOrWrite === 'writeonly') {\n return;\n }\n }\n if (data?.['::readwrite'] === 'writeonly') {\n return;\n }\n }\n\n if (!data) {\n return html`
    \n ${key.replace('::OPTION~', '')}\n ${\n dataType === 'array'\n ? html` [ ] `\n : dataType === 'object'\n ? html` { } `\n : html` schema undefined `\n }\n
    `;\n }\n if (Object.keys(data).length === 0) {\n return html`${key}:{ }`;\n }\n let keyLabel = '';\n let keyDescr = '';\n if (key.startsWith('::ONE~OF') || key.startsWith('::ANY~OF')) {\n keyLabel = key.replace('::', '').replace('~', ' ');\n } else if (key.startsWith('::OPTION')) {\n const parts = key.split('~');\n [, keyLabel, keyDescr] = parts;\n } else {\n keyLabel = key;\n }\n\n const leftPadding = 12;\n const minFieldColWidth = 400 - (indentLevel * leftPadding);\n let openBracket = '';\n let closeBracket = '';\n const newSchemaLevel = data['::type']?.startsWith('xxx-of') ? schemaLevel : (schemaLevel + 1);\n // const newIndentLevel = dataType === 'xxx-of-option' || data['::type'] === 'xxx-of-option' ? indentLevel : (indentLevel + 1);\n const newIndentLevel = dataType === 'xxx-of-option' || data['::type'] === 'xxx-of-option' || key.startsWith('::OPTION') ? indentLevel : (indentLevel + 1);\n if (data['::type'] === 'object') {\n if (dataType === 'array') {\n if (schemaLevel < this.schemaExpandLevel) {\n openBracket = html`[{`;\n } else {\n openBracket = html`[{...}]`;\n }\n closeBracket = '}]';\n } else {\n if (schemaLevel < this.schemaExpandLevel) {\n openBracket = html`${data['::nullable'] ? 'null┃' : ''}{`;\n } else {\n openBracket = html`${data['::nullable'] ? 'null┃' : ''}{...}`;\n }\n closeBracket = '}';\n }\n } else if (data['::type'] === 'array') {\n if (dataType === 'array') {\n const arrType = arrayType !== 'object' ? arrayType : '';\n if (schemaLevel < this.schemaExpandLevel) {\n openBracket = html`[[ ${arrType} `;\n } else {\n openBracket = html`[[...]]`;\n }\n closeBracket = ']]';\n } else {\n if (schemaLevel < this.schemaExpandLevel) {\n openBracket = html`[`;\n } else {\n openBracket = html`[...]`;\n }\n closeBracket = ']';\n }\n }\n if (typeof data === 'object') {\n return html`\n
    \n
    \n ${data['::type'] === 'xxx-of-option' || data['::type'] === 'xxx-of-array' || key.startsWith('::OPTION')\n ? html` ${keyLabel}${keyDescr}`\n : keyLabel === '::props' || keyLabel === '::ARRAY~OF'\n ? ''\n : schemaLevel > 0\n ? html`\n ${(isDeprecated || data['::deprecated'])\n ? html``\n : ''\n }\n ${keyLabel.replace(/\\*$/, '')}${keyLabel.endsWith('*') ? html`*` : ''}${readOrWrite === 'readonly' ? html` 🆁` : readOrWrite === 'writeonly' ? html` 🆆` : readOrWrite}:\n `\n : ''\n }\n ${openBracket}\n
    \n
    ${unsafeHTML(marked(description || ''))}
    \n
    \n
    \n ${Array.isArray(data) && data[0]\n ? html`${this.generateTree(data[0], 'xxx-of-option', '', '::ARRAY~OF', '', newSchemaLevel, newIndentLevel, data[0]['::readwrite'], (isDeprecated || data[0]['::deprecated']))}`\n : html`\n ${Object.keys(data).map((dataKey) => html`\n ${['::title', '::description', '::type', '::props', '::deprecated', '::array-type', '::readwrite', '::dataTypeLabel', '::nullable'].includes(dataKey)\n ? data[dataKey]['::type'] === 'array' || data[dataKey]['::type'] === 'object'\n ? html`${this.generateTree(\n data[dataKey]['::type'] === 'array' ? data[dataKey]['::props'] : data[dataKey],\n data[dataKey]['::type'],\n data[dataKey]['::array-type'] || '',\n dataKey,\n data[dataKey]['::description'],\n newSchemaLevel,\n newIndentLevel,\n data[dataKey]['::readwrite'] ? data[dataKey]['::readwrite'] : '',\n (isDeprecated || data[dataKey]['::deprecated']),\n )}`\n : ''\n : html`${this.generateTree(\n data[dataKey]['::type'] === 'array' ? data[dataKey]['::props'] : data[dataKey],\n data[dataKey]['::type'],\n data[dataKey]['::array-type'] || '',\n dataKey,\n data[dataKey]?.['::description'] || '',\n newSchemaLevel,\n newIndentLevel,\n data[dataKey]['::readwrite'] ? data[dataKey]['::readwrite'] : '',\n (isDeprecated || data[dataKey]['::deprecated']),\n )}`\n }\n `)}\n `\n }\n
    \n ${data['::type'] && data['::type'].includes('xxx-of')\n ? ''\n : html`
    ${closeBracket}
    `\n }\n `;\n }\n\n // For Primitive types and array of Primitives\n // eslint-disable-next-line no-unused-vars\n const [type, primitiveReadOrWrite, constraint, defaultValue, allowedValues, pattern, schemaDescription, schemaTitle, deprecated] = data.split('~|~');\n if (primitiveReadOrWrite === '🆁' && this.schemaHideReadOnly === 'true') {\n return;\n }\n if (primitiveReadOrWrite === '🆆' && this.schemaHideWriteOnly === 'true') {\n return;\n }\n const dataTypeCss = type.replace(/┃.*/g, '').replace(/[^a-zA-Z0-9+]/g, '').substring(0, 4).toLowerCase();\n const descrExpander = `${constraint || defaultValue || allowedValues || pattern ? `` : ''}`;\n let finalReadWriteText = '';\n let finalReadWriteTip = '';\n if (dataType === 'array') {\n if (readOrWrite === 'readonly') {\n finalReadWriteText = '🆁';\n finalReadWriteTip = 'Read-Only';\n } else if (readOrWrite === 'writeonly') {\n finalReadWriteText = '🆆';\n finalReadWriteTip = 'Write-Only';\n }\n } else if (primitiveReadOrWrite === '🆁') {\n finalReadWriteText = '🆁';\n finalReadWriteTip = 'Read-Only';\n } else if (primitiveReadOrWrite === '🆆') {\n finalReadWriteText = '🆆';\n finalReadWriteTip = 'Write-Only';\n }\n\n return html`\n
    \n
    \n ${isDeprecated || deprecated\n ? html``\n : ''\n }\n ${keyLabel.endsWith('*')\n ? html`${keyLabel.substring(0, keyLabel.length - 1)}*:`\n : key.startsWith('::OPTION')\n ? html`${keyLabel}${keyDescr}`\n : html`${keyLabel}:`\n }\n \n ${dataType === 'array' ? `[${type}]` : `${type}`}\n ${finalReadWriteText}\n \n
    \n
    \n ${description || schemaTitle || schemaDescription\n ? html`${html`\n ${unsafeHTML(marked(dataType === 'array'\n ? `${descrExpander} ${description}`\n : schemaTitle\n ? `${descrExpander} ${schemaTitle}: ${schemaDescription}`\n : `${descrExpander} ${schemaDescription}`))}\n `\n }`\n : ''\n } \n ${constraint ? html`
    Constraints: ${constraint}
    ` : ''}\n ${defaultValue ? html`
    Default: ${defaultValue}
    ` : ''}\n ${allowedValues ? html`
    ${type === 'const' ? 'Value' : 'Allowed'}: ${allowedValues}
    ` : ''}\n ${pattern ? html`
    Pattern: ${pattern}
    ` : ''}\n
    \n
    \n `;\n }\n /* eslint-enable indent */\n\n handleAllEvents(e) {\n if (e.target.classList.contains('open-bracket')) {\n this.toggleObjectExpand(e);\n } else if (e.target.classList.contains('schema-multiline-toggle')) {\n this.schemaDescriptionExpanded = (this.schemaDescriptionExpanded === 'true' ? 'false' : 'true');\n } else if (e.target.classList.contains('descr-expand-toggle')) {\n const trEl = e.target.closest('.tr');\n if (trEl) {\n trEl.classList.toggle('expanded-descr');\n trEl.style.maxHeight = trEl.scrollHeight;\n }\n }\n }\n\n toggleObjectExpand(e) {\n const rowEl = e.target.closest('.tr');\n const nullable = rowEl.classList.contains('nullable');\n if (rowEl.classList.contains('expanded')) {\n rowEl.classList.replace('expanded', 'collapsed');\n e.target.innerHTML = e.target.classList.contains('array-of-object')\n ? '[{...}]'\n : e.target.classList.contains('array-of-array')\n ? '[[...]]'\n : e.target.classList.contains('array')\n ? '[...]'\n : `${nullable ? 'null┃' : ''}{...}`;\n } else {\n rowEl.classList.replace('collapsed', 'expanded');\n e.target.innerHTML = e.target.classList.contains('array-of-object')\n ? '[{'\n : e.target.classList.contains('array-of-array')\n ? `[[ ${e.target.dataset.arrayType}`\n : e.target.classList.contains('object')\n ? `${nullable ? 'null┃' : ''}{`\n : '[';\n }\n }\n}\ncustomElements.define('schema-tree', SchemaTree);\n","import { LitElement, html, css } from 'lit';\n\nexport default class TagInput extends LitElement {\n /* eslint-disable indent */\n render() {\n let tagItemTmpl = '';\n if (Array.isArray(this.value)) {\n tagItemTmpl = html`${this.value\n .filter((v) => typeof v === 'string' && v.trim() !== '')\n .map((v) => html`${v}`)\n }`;\n }\n return html`\n
    \n ${tagItemTmpl}\n this.afterPaste(e)}\" @keydown=\"${this.afterKeyDown}\" @blur=\"${this.onBlur}\" placeholder=\"${this.placeholder || ''}\">\n
    \n `;\n }\n /* eslint-enable indent */\n\n static get properties() {\n return {\n placeholder: { type: String },\n value: { type: Array, attribute: 'value' },\n };\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (name === 'value') {\n if (newVal && oldVal !== newVal) {\n this.value = newVal.split(',').filter((v) => v.trim() !== '');\n }\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n\n afterPaste(e) {\n const clipboardData = e.clipboardData || window.clipboardData;\n const pastedData = clipboardData.getData('Text');\n const pastedArray = pastedData ? pastedData.split(',').filter((v) => v.trim() !== '') : '';\n if (pastedArray) {\n if (Array.isArray(this.value)) {\n this.value = [...this.value, ...pastedArray];\n } else {\n this.value = pastedArray;\n }\n }\n e.preventDefault();\n }\n\n afterKeyDown(e) {\n if (e.keyCode === 13) {\n e.stopPropagation();\n e.preventDefault();\n if (e.target.value) {\n if (Array.isArray(this.value)) {\n this.value = [...this.value, e.target.value];\n } else {\n this.value = [e.target.value];\n }\n e.target.value = '';\n }\n } else if (e.keyCode === 8) {\n if (e.target.value.length === 0) {\n if (Array.isArray(this.value) && this.value.length > 0) {\n this.value.splice(-1);\n this.value = [...this.value];\n }\n }\n }\n }\n\n onBlur(e) {\n if (e.target.value) {\n if (Array.isArray(this.value)) {\n this.value = [...this.value, e.target.value];\n } else {\n this.value = [e.target.value];\n }\n e.target.value = '';\n }\n }\n\n static get styles() {\n return [css`\n .tags {\n display:flex;\n flex-wrap: wrap;\n outline: none;\n padding:0;\n border-radius:var(--border-radius);\n border:1px solid var(--border-color);\n cursor:text;\n overflow:hidden;\n background:var(--input-bg);\n }\n .tag, .editor {\n padding:3px;\n margin:2px;\n }\n .tag{\n border:1px solid var(--border-color);\n background-color:var(--bg3);\n color:var(--fg3);\n border-radius:var(--border-radius);\n word-break: break-all;\n font-size: var(--font-size-small);\n }\n .tag:hover ~ #cursor {\n display: block;\n }\n .editor {\n flex:1;\n border:1px solid transparent;\n color:var(--fg);\n min-width:60px;\n outline: none;\n line-height: inherit;\n font-family:inherit;\n background:transparent;\n font-size: calc(var(--font-size-small) + 1px);\n }\n .editor:focus-visible {\n outline: 1px solid;\n }\n .editor::placeholder {\n color: var(--placeholder-color);\n opacity:1;\n }\n `];\n }\n}\n// Register the element with the browser\ncustomElements.define('tag-input', TagInput);\n","import { LitElement, html, css } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { guard } from 'lit/directives/guard.js'; // eslint-disable-line import/extensions\nimport { live } from 'lit/directives/live.js'; // eslint-disable-line import/extensions\nimport { ifDefined } from 'lit/directives/if-defined.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport formatXml from 'xml-but-prettier';\nimport Prism from 'prismjs';\nimport TableStyles from '~/styles/table-styles';\nimport FlexStyles from '~/styles/flex-styles';\nimport InputStyles from '~/styles/input-styles';\nimport FontStyles from '~/styles/font-styles';\nimport BorderStyles from '~/styles/border-styles';\nimport TabStyles from '~/styles/tab-styles';\nimport PrismStyles from '~/styles/prism-styles';\nimport CustomStyles from '~/styles/custom-styles';\nimport { copyToClipboard, downloadResource, viewResource } from '~/utils/common-utils';\nimport { schemaInObjectNotation,\n getTypeInfo,\n generateExample,\n normalizeExamples,\n getSchemaFromParam,\n json2xml,\n standardizeExample,\n anyExampleWithSummaryOrDescription } from '~/utils/schema-utils';\nimport '~/components/json-tree';\nimport '~/components/schema-tree';\nimport '~/components/tag-input';\n\nexport default class ApiRequest extends LitElement {\n constructor() {\n super();\n this.responseMessage = '';\n this.responseStatus = 'success';\n this.responseHeaders = '';\n this.responseText = '';\n this.responseUrl = '';\n this.curlSyntax = '';\n this.activeResponseTab = 'response'; // allowed values: response, headers, curl\n this.selectedRequestBodyType = '';\n this.selectedRequestBodyExample = '';\n this.activeParameterSchemaTabs = {};\n }\n\n static get properties() {\n return {\n serverUrl: { type: String, attribute: 'server-url' },\n servers: { type: Array },\n method: { type: String },\n path: { type: String },\n security: { type: Array },\n parameters: { type: Array },\n request_body: { type: Object },\n api_keys: { type: Array },\n parser: { type: Object },\n accept: { type: String },\n callback: { type: String },\n webhook: { type: String },\n responseMessage: { type: String, attribute: false },\n responseText: { type: String, attribute: false },\n responseHeaders: { type: String, attribute: false },\n responseStatus: { type: String, attribute: false },\n responseUrl: { type: String, attribute: false },\n curlSyntax: { type: String, attribute: false },\n fillRequestFieldsWithExample: { type: String, attribute: 'fill-request-fields-with-example' },\n allowTry: { type: String, attribute: 'allow-try' },\n showCurlBeforeTry: { type: String, attribute: 'show-curl-before-try' },\n renderStyle: { type: String, attribute: 'render-style' },\n schemaStyle: { type: String, attribute: 'schema-style' },\n activeSchemaTab: { type: String, attribute: 'active-schema-tab' },\n activeParameterSchemaTabs: {\n type: Object,\n converter: {\n fromAttribute: (attr) => JSON.parse(attr),\n toAttribute: (prop) => JSON.stringify(prop),\n },\n attribute: 'active-parameter-schema-tabs',\n },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n schemaHideReadOnly: { type: String, attribute: 'schema-hide-read-only' },\n schemaHideWriteOnly: { type: String, attribute: 'schema-hide-write-only' },\n fetchCredentials: { type: String, attribute: 'fetch-credentials' },\n\n // properties for internal tracking\n activeResponseTab: { type: String }, // internal tracking of response-tab not exposed as a attribute\n selectedRequestBodyType: { type: String, attribute: 'selected-request-body-type' }, // internal tracking of selected request-body type\n selectedRequestBodyExample: { type: String, attribute: 'selected-request-body-example' }, // internal tracking of selected request-body example\n };\n }\n\n static get styles() {\n return [\n TableStyles,\n InputStyles,\n FontStyles,\n FlexStyles,\n BorderStyles,\n TabStyles,\n PrismStyles,\n css`\n :host {\n container-type: inline-size;\n }\n *, *:before, *:after { box-sizing: border-box; }\n :where(button, input[type=\"checkbox\"], [tabindex=\"0\"]):focus-visible { box-shadow: var(--focus-shadow); }\n :where(input[type=\"text\"], input[type=\"password\"], select, textarea):focus-visible { border-color: var(--primary-color); }\n tag-input:focus-within { outline: 1px solid;}\n .read-mode {\n margin-top: 24px;\n }\n .param-name,\n .param-type {\n margin: 1px 0;\n text-align: right;\n line-height: var(--font-size-small);\n }\n .param-name {\n color: var(--fg); \n font-family: var(--font-mono);\n }\n .param-name.deprecated { \n color: var(--red);\n }\n .param-type{\n color: var(--light-fg); \n font-family: var(--font-regular);\n }\n .param-constraint{\n min-width:100px;\n }\n .param-constraint:empty{\n display:none;\n }\n .top-gap{margin-top:24px;}\n\n .textarea {\n min-height:220px; \n padding:5px;\n resize:vertical;\n direction: ltr;\n }\n .example:first-child {\n margin-top: -9px;\n }\n\n .response-message{\n font-weight:bold;\n text-overflow: ellipsis;\n }\n .response-message.error {\n color:var(--red);\n }\n .response-message.success {\n color:var(--blue);\n }\n\n .file-input-container {\n align-items:flex-end;\n }\n .file-input-container .input-set:first-child .file-input-remove-btn{\n visibility:hidden;\n }\n\n .file-input-remove-btn{\n font-size:16px;\n color:var(--red);\n outline: none;\n border: none;\n background:none;\n cursor:pointer;\n }\n\n .v-tab-btn {\n font-size: var(--smal-font-size);\n height:24px; \n border:none; \n background:none; \n opacity: 0.3;\n cursor: pointer;\n padding: 4px 8px;\n }\n .v-tab-btn.active {\n font-weight: bold;\n background: var(--bg);\n opacity: 1;\n }\n\n @container (min-width: 768px) {\n .textarea {\n padding:8px;\n }\n }\n\n @container (max-width: 470px) {\n .hide-in-small-screen {\n display:none;\n }\n }\n `,\n CustomStyles,\n ];\n }\n\n /* eslint-disable indent */\n render() {\n return html`\n
    \n
    \n ${this.callback === 'true' ? 'CALLBACK REQUEST' : 'REQUEST'}\n
    \n
    \n ${guard([this.method, this.path, this.allowTry, this.parameters, this.activeParameterSchemaTabs], () => this.inputParametersTemplate('path'))}\n ${guard([this.method, this.path, this.allowTry, this.parameters, this.activeParameterSchemaTabs], () => this.inputParametersTemplate('query'))}\n ${this.requestBodyTemplate()}\n ${guard([this.method, this.path, this.allowTry, this.parameters, this.activeParameterSchemaTabs], () => this.inputParametersTemplate('header'))}\n ${guard([this.method, this.path, this.allowTry, this.parameters, this.activeParameterSchemaTabs], () => this.inputParametersTemplate('cookie'))}\n ${this.allowTry === 'false' ? '' : html`${this.apiCallTemplate()}`}\n
    \n
    \n `;\n }\n\n async updated() {\n if (this.showCurlBeforeTry === 'true') {\n this.applyCURLSyntax(this.shadowRoot);\n }\n\n // In focused mode after rendering the request component, update the text-areas(which contains examples) using\n // the original values from hidden textareas\n // This is done coz, user may update the dom by editing the textarea's and once the DOM is updated externally change detection wont happen, therefore update the values manually\n\n // if (this.renderStyle === 'focused') {\n // if (changedProperties.size === 1 && changedProperties.has('activeSchemaTab')) {\n // // dont update example as only tabs is switched\n // } else {\n // this.requestUpdate();\n // }\n // }\n\n if (this.webhook === 'true') {\n this.allowTry = 'false';\n }\n }\n\n async saveExampleState() {\n if (this.renderStyle === 'focused') {\n const reqBodyTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea.request-body-param-user-input')];\n reqBodyTextAreaEls.forEach((el) => {\n el.dataset.user_example = el.value;\n });\n const exampleTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea[data-ptype=\"form-data\"]')];\n exampleTextAreaEls.forEach((el) => {\n el.dataset.user_example = el.value;\n });\n this.requestUpdate();\n }\n }\n\n async updateExamplesFromDataAttr() {\n // In focused mode after rendering the request component, update the text-areas(which contains examples) using\n // the original values from hidden textareas\n // This is done coz, user may update the dom by editing the textarea's and once the DOM is updated externally change detection wont happen, therefore update the values manually\n if (this.renderStyle === 'focused') {\n const reqBodyTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea.request-body-param-user-input')];\n reqBodyTextAreaEls.forEach((el) => {\n el.value = el.dataset.user_example || el.dataset.example;\n });\n const exampleTextAreaEls = [...this.shadowRoot.querySelectorAll('textarea[data-ptype=\"form-data\"]')];\n exampleTextAreaEls.forEach((el) => {\n el.value = el.dataset.user_example || el.dataset.example;\n });\n this.requestUpdate();\n }\n }\n\n renderExample(example, paramType, paramName) {\n return html`\n ${paramType === 'array' ? '[' : ''}\n {\n const inputEl = e.target.closest('table').querySelector(`[data-pname=\"${paramName}\"]`);\n if (inputEl) {\n inputEl.value = e.target.dataset.exampleType === 'array' ? e.target.dataset.example.split('~|~') : e.target.dataset.example;\n }\n }}\"\n > ${example.printableValue || example.value} \n ${paramType === 'array' ? '] ' : ''}\n `;\n }\n\n renderShortFormatExamples(examples, paramType, paramName) {\n return html`${examples.map((x, i) => html`\n ${i === 0 ? '' : '┃'}\n ${this.renderExample(x, paramType, paramName)}`)}`;\n }\n\n renderLongFormatExamples(exampleList, paramType, paramName) {\n return html`
      \n ${exampleList.map((v) => html`\n
    • \n ${this.renderExample(v, paramType, paramName)}\n ${v.summary?.length > 0 ? html`(${v.summary})` : ''}\n ${v.description?.length > 0 ? html`

      ${unsafeHTML(marked(v.description))}

      ` : ''}\n
    • \n `)}\n
    `;\n }\n\n exampleListTemplate(paramName, paramType, exampleList = []) {\n return html` ${\n exampleList.length > 0\n ? html`Examples: \n ${anyExampleWithSummaryOrDescription(exampleList)\n ? this.renderLongFormatExamples(exampleList, paramType, paramName)\n : this.renderShortFormatExamples(exampleList, paramType, paramName)}`\n : ''\n }`;\n }\n\n inputParametersTemplate(paramType) {\n const filteredParams = this.parameters ? this.parameters.filter((param) => param.in === paramType) : [];\n if (filteredParams.length === 0) {\n return '';\n }\n let title = '';\n if (paramType === 'path') {\n title = 'PATH PARAMETERS';\n } else if (paramType === 'query') {\n title = 'QUERY-STRING PARAMETERS';\n } else if (paramType === 'header') {\n title = 'REQUEST HEADERS';\n } else if (paramType === 'cookie') {\n title = 'COOKIES';\n }\n\n const tableRows = [];\n for (const param of filteredParams) {\n const [declaredParamSchema, serializeStyle, mimeTypeElem] = getSchemaFromParam(param);\n if (!declaredParamSchema) {\n continue;\n }\n const paramSchema = getTypeInfo(declaredParamSchema);\n if (!paramSchema) {\n continue; // eslint-disable-line no-continue\n }\n const schemaAsObj = schemaInObjectNotation(declaredParamSchema, {});\n // let exampleVal = '';\n // let exampleList = [];\n let paramStyle = 'form';\n let paramExplode = true;\n let paramAllowReserved = false;\n if (paramType === 'query' || paramType === 'header' || paramType === 'path') {\n if (param.style && 'form spaceDelimited pipeDelimited'.includes(param.style)) {\n paramStyle = param.style;\n } else if (serializeStyle) {\n paramStyle = serializeStyle;\n }\n if (typeof param.explode === 'boolean') {\n paramExplode = param.explode;\n }\n if (typeof param.allowReserved === 'boolean') {\n paramAllowReserved = param.allowReserved;\n }\n }\n // openapi 3.1.0 spec based examples (which must be Object(string : { value:any, summary?: string, description?: string})\n const example = normalizeExamples(\n (standardizeExample(param.examples)\n || standardizeExample(param.example)\n || standardizeExample(mimeTypeElem?.example)\n || standardizeExample(mimeTypeElem?.examples)\n || standardizeExample(paramSchema.examples)\n || standardizeExample(paramSchema.example)\n ),\n paramSchema.type,\n );\n if (!example.exampleVal && paramSchema.type === 'object') {\n example.exampleVal = generateExample(\n declaredParamSchema,\n serializeStyle || 'json',\n {},\n {},\n this.callback === 'true' || this.webhook === 'true' ? true : false, // eslint-disable-line no-unneeded-ternary\n this.callback === 'true' || this.webhook === 'true' ? false : true, // eslint-disable-line no-unneeded-ternary\n true,\n 'text',\n false,\n )[0].exampleValue;\n }\n const labelColWidth = 'read focused'.includes(this.renderStyle) ? '200px' : '160px';\n tableRows.push(html`\n \n \n
    \n ${param.deprecated\n ? html``\n : ''\n }\n ${param.required ? html`*` : ''}\n ${param.name}\n
    \n
    \n ${paramSchema.type === 'array'\n ? `${paramSchema.arrayType}`\n : `${paramSchema.format ? paramSchema.format : paramSchema.type}`\n }\n
    \n \n ${this.allowTry === 'true'\n ? html`\n \n ${paramSchema.type === 'array'\n ? html`\n \n `\n : paramSchema.type === 'object'\n ? html`\n
    \n
    {\n if (e.target.tagName.toLowerCase() === 'button') {\n const newState = { ...this.activeParameterSchemaTabs };\n newState[param.name] = e.target.dataset.tab;\n this.activeParameterSchemaTabs = newState;\n }\n }}\">\n \n \n
    \n\n ${html`
    \n \n
    `\n }\n ${html`
    \n \n
    `\n }\n
    `\n : html`\n {\n const requestPanelEl = this.getRequestPanel(e);\n this.liveCURLSyntaxUpdate(requestPanelEl);\n }}\n />`\n }\n `\n : ''\n }\n ${paramSchema.default || paramSchema.constrain || paramSchema.allowedValues || paramSchema.pattern\n ? html`\n \n
    \n ${paramSchema.default ? html`Default: ${paramSchema.default}
    ` : ''}\n ${paramSchema.pattern ? html`Pattern: ${paramSchema.pattern}
    ` : ''}\n ${paramSchema.constrain ? html`${paramSchema.constrain}
    ` : ''}\n ${paramSchema.allowedValues && paramSchema.allowedValues.split('┃').map((v, i) => html`\n ${i > 0 ? '┃' : html`Allowed: `}\n ${html`\n {\n const inputEl = e.target.closest('table').querySelector(`[data-pname=\"${param.name}\"]`);\n if (inputEl) {\n if (e.target.dataset.type === 'array') {\n inputEl.value = [e.target.dataset.enum];\n } else {\n inputEl.value = e.target.dataset.enum;\n }\n }\n }}\"\n >${v}`\n }`)}\n
    \n `\n : html``\n }\n \n \n ${this.allowTry === 'true' ? html` ` : ''}\n \n ${unsafeHTML(marked(param.description || ''))}\n ${this.exampleListTemplate.call(this, param.name, paramSchema.type, example.exampleList)}\n \n \n `);\n }\n\n return html`\n
    ${title}
    \n
    \n \n ${tableRows}\n
    \n
    `;\n }\n\n // This method is called before navigation change in focused mode\n async beforeNavigationFocusedMode() {\n // this.saveExampleState();\n }\n\n // This method is called after navigation change in focused mode\n async afterNavigationFocusedMode() {\n this.selectedRequestBodyType = '';\n this.selectedRequestBodyExample = '';\n this.updateExamplesFromDataAttr();\n this.clearResponseData();\n }\n\n // Request-Body Event Handlers\n onSelectExample(e) {\n this.selectedRequestBodyExample = e.target.value;\n const exampleDropdownEl = e.target;\n window.setTimeout((selectEl) => {\n const readOnlyExampleEl = selectEl.closest('.example-panel').querySelector('.request-body-param');\n const userInputExampleTextareaEl = selectEl.closest('.example-panel').querySelector('.request-body-param-user-input');\n userInputExampleTextareaEl.value = readOnlyExampleEl.innerText;\n\n const requestPanelEl = this.getRequestPanel({ target: selectEl });\n this.liveCURLSyntaxUpdate(requestPanelEl);\n }, 0, exampleDropdownEl);\n }\n\n onMimeTypeChange(e) {\n this.selectedRequestBodyType = e.target.value;\n const mimeDropdownEl = e.target;\n this.selectedRequestBodyExample = '';\n window.setTimeout((selectEl) => {\n const readOnlyExampleEl = selectEl.closest('.request-body-container').querySelector('.request-body-param');\n if (readOnlyExampleEl) {\n const userInputExampleTextareaEl = selectEl.closest('.request-body-container').querySelector('.request-body-param-user-input');\n userInputExampleTextareaEl.value = readOnlyExampleEl.innerText;\n }\n }, 0, mimeDropdownEl);\n }\n\n requestBodyTemplate() {\n if (!this.request_body) {\n return '';\n }\n if (Object.keys(this.request_body).length === 0) {\n return '';\n }\n\n // Variable to store partial HTMLs\n let reqBodyTypeSelectorHtml = '';\n let reqBodyFileInputHtml = '';\n let reqBodyFormHtml = '';\n let reqBodySchemaHtml = '';\n let reqBodyExampleHtml = '';\n\n const requestBodyTypes = [];\n const { content } = this.request_body;\n for (const mimeType in content) {\n requestBodyTypes.push({\n mimeType,\n schema: content[mimeType].schema,\n example: content[mimeType].example,\n examples: content[mimeType].examples,\n });\n if (!this.selectedRequestBodyType) {\n this.selectedRequestBodyType = mimeType;\n }\n }\n // MIME Type selector\n reqBodyTypeSelectorHtml = requestBodyTypes.length === 1\n ? ''\n : html`\n \n `;\n\n // For Loop - Main\n requestBodyTypes.forEach((reqBody) => {\n let schemaAsObj;\n let reqBodyExamples = [];\n\n if (this.selectedRequestBodyType.includes('json') || this.selectedRequestBodyType.includes('xml') || this.selectedRequestBodyType.includes('text') || this.selectedRequestBodyType.includes('jose')) {\n // Generate Example\n if (reqBody.mimeType === this.selectedRequestBodyType) {\n reqBodyExamples = generateExample(\n reqBody.schema,\n reqBody.mimeType,\n standardizeExample(reqBody.examples),\n standardizeExample(reqBody.example),\n this.callback === 'true' || this.webhook === 'true' ? true : false, // eslint-disable-line no-unneeded-ternary\n this.callback === 'true' || this.webhook === 'true' ? false : true, // eslint-disable-line no-unneeded-ternary\n 'text',\n false,\n );\n if (!this.selectedRequestBodyExample) {\n this.selectedRequestBodyExample = (reqBodyExamples.length > 0 ? reqBodyExamples[0].exampleId : '');\n }\n reqBodyExampleHtml = html`\n ${reqBodyExampleHtml}\n
    \n ${reqBodyExamples.length === 1\n ? ''\n : html`\n \n `\n }\n ${reqBodyExamples\n .filter((v) => v.exampleId === this.selectedRequestBodyExample)\n .map((v) => html`\n
    \n ${v.exampleSummary && v.exampleSummary.length > 80 ? html`
    ${v.exampleSummary}
    ` : ''}\n ${v.exampleDescription ? html`
    ${unsafeHTML(marked(v.exampleDescription || ''))}
    ` : ''}\n \n
    ${(v.exampleFormat === 'text' ? v.exampleValue : JSON.stringify(v.exampleValue, null, 2))}
    \n\n \n \n
    \n `)}\n\n
    \n `;\n }\n } else if (this.selectedRequestBodyType.includes('form-urlencoded') || this.selectedRequestBodyType.includes('form-data')) {\n if (reqBody.mimeType === this.selectedRequestBodyType) {\n const ex = generateExample(\n reqBody.schema,\n reqBody.mimeType,\n reqBody.examples,\n reqBody.example,\n this.callback === 'true' || this.webhook === 'true' ? true : false, // eslint-disable-line no-unneeded-ternary\n this.callback === 'true' || this.webhook === 'true' ? false : true, // eslint-disable-line no-unneeded-ternary\n 'text',\n false,\n );\n if (reqBody.schema) {\n reqBodyFormHtml = this.formDataTemplate(reqBody.schema, reqBody.mimeType, (ex[0] ? ex[0].exampleValue : ''));\n }\n }\n } else if ((/^audio\\/|^image\\/|^video\\/|^font\\/|tar$|zip$|7z$|rtf$|msword$|excel$|\\/pdf$|\\/octet-stream$/.test(this.selectedRequestBodyType))) {\n if (reqBody.mimeType === this.selectedRequestBodyType) {\n reqBodyFileInputHtml = html`\n
    \n \n
    \n `;\n }\n }\n\n // Generate Schema\n if (reqBody.mimeType.includes('json') || reqBody.mimeType.includes('xml') || reqBody.mimeType.includes('text') || this.selectedRequestBodyType.includes('jose')) {\n schemaAsObj = schemaInObjectNotation(reqBody.schema, {});\n if (this.schemaStyle === 'table') {\n reqBodySchemaHtml = html`\n ${reqBodySchemaHtml}\n \n `;\n } else if (this.schemaStyle === 'tree') {\n reqBodySchemaHtml = html`\n ${reqBodySchemaHtml}\n \n `;\n }\n }\n });\n\n return html`\n
    \n
    \n REQUEST BODY ${this.request_body.required ? html`*` : ''} \n ${this.selectedRequestBodyType}\n \n ${reqBodyTypeSelectorHtml}\n
    \n ${this.request_body.description ? html`
    ${unsafeHTML(marked(this.request_body.description))}
    ` : ''}\n \n ${(this.selectedRequestBodyType.includes('json') || this.selectedRequestBodyType.includes('xml') || this.selectedRequestBodyType.includes('text') || this.selectedRequestBodyType.includes('jose'))\n ? html`\n
    \n
    { if (e.target.tagName.toLowerCase() === 'button') { this.activeSchemaTab = e.target.dataset.tab; } }}\">\n \n \n
    \n ${html`
    ${reqBodyExampleHtml}
    `}\n ${html`
    ${reqBodySchemaHtml}
    `}\n
    `\n : html` \n ${reqBodyFileInputHtml}\n ${reqBodyFormHtml}`\n }\n
    \n `;\n }\n\n formDataParamAsObjectTemplate(fieldName, fieldSchema, mimeType) {\n // This template is used when form-data param should be send as a object (application/json, application/xml)\n const formdataPartSchema = schemaInObjectNotation(fieldSchema, {});\n const formdataPartExample = generateExample(\n fieldSchema,\n 'json',\n standardizeExample(fieldSchema.examples),\n standardizeExample(fieldSchema.example),\n this.callback === 'true' || this.webhook === 'true' ? true : false, // eslint-disable-line no-unneeded-ternary\n this.callback === 'true' || this.webhook === 'true' ? false : true, // eslint-disable-line no-unneeded-ternary\n 'text',\n false,\n );\n\n return html`\n
    \n
    \n
    {\n if (e.target.classList.contains('v-tab-btn')) {\n const { tab } = e.target.dataset;\n if (tab) {\n const tabPanelEl = e.target.closest('.tab-panel');\n const selectedTabBtnEl = tabPanelEl.querySelector(`.v-tab-btn[data-tab=\"${tab}\"]`);\n const otherTabBtnEl = [...tabPanelEl.querySelectorAll(`.v-tab-btn:not([data-tab=\"${tab}\"])`)];\n const selectedTabContentEl = tabPanelEl.querySelector(`.tab-content[data-tab=\"${tab}\"]`);\n const otherTabContentEl = [...tabPanelEl.querySelectorAll(`.tab-content:not([data-tab=\"${tab}\"])`)];\n selectedTabBtnEl.classList.add('active');\n selectedTabContentEl.style.display = 'block';\n otherTabBtnEl.forEach((el) => { el.classList.remove('active'); });\n otherTabContentEl.forEach((el) => { el.style.display = 'none'; });\n }\n }\n if (e.target.tagName.toLowerCase() === 'button') { this.activeSchemaTab = e.target.dataset.tab; }\n }}\">\n \n \n
    \n
    \n ${html`\n
    \n \n
    `\n }\n ${html`\n
    \n \n
    `\n }\n
    \n `;\n }\n\n formDataTemplate(schema, mimeType, exampleValue = '') {\n const formDataTableRows = [];\n if (schema.properties) {\n for (const fieldName in schema.properties) {\n const fieldSchema = schema.properties[fieldName];\n if (fieldSchema.readOnly) {\n continue;\n }\n const fieldExamples = fieldSchema.examples || fieldSchema.example || '';\n const fieldType = fieldSchema.type;\n const paramSchema = getTypeInfo(fieldSchema);\n const labelColWidth = 'read focused'.includes(this.renderStyle) ? '200px' : '160px';\n const example = normalizeExamples((paramSchema.examples || paramSchema.example), paramSchema.type);\n formDataTableRows.push(html`\n \n \n
    \n ${fieldName}${(schema.required?.includes(fieldName) || fieldSchema.required) ? html`*` : ''}\n
    \n
    ${paramSchema.type}
    \n \n \n ${fieldType === 'array'\n ? fieldSchema.items?.format === 'binary'\n ? html`\n
    this.onAddRemoveFileInput(e, fieldName, mimeType)}\">\n
    \n \n \n
    \n \n
    \n `\n : html`\n \n \n `\n : html`\n ${fieldType === 'object'\n ? this.formDataParamAsObjectTemplate.call(this, fieldName, fieldSchema, mimeType)\n : html`\n ${this.allowTry === 'true'\n ? html``\n : ''\n }\n `\n }`\n }\n \n ${fieldType === 'object'\n ? ''\n : html`\n \n ${paramSchema.default || paramSchema.constrain || paramSchema.allowedValues || paramSchema.pattern\n ? html`\n
    \n ${paramSchema.default ? html`Default: ${paramSchema.default}
    ` : ''}\n ${paramSchema.pattern ? html`Pattern: ${paramSchema.pattern}
    ` : ''}\n ${paramSchema.constrain ? html`${paramSchema.constrain}
    ` : ''}\n ${paramSchema.allowedValues && paramSchema.allowedValues.split('┃').map((v, i) => html`\n ${i > 0 ? '┃' : html`Allowed: `}\n ${html`\n {\n const inputEl = e.target.closest('table').querySelector(`[data-pname=\"${fieldName}\"]`);\n if (inputEl) {\n if (e.target.dataset.type === 'array') {\n inputEl.value = [e.target.dataset.enum];\n } else {\n inputEl.value = e.target.dataset.enum;\n }\n }\n }}\"\n > \n ${v} \n `\n }`)\n }\n
    `\n : ''\n }\n `\n }\n \n ${fieldType === 'object'\n ? ''\n : html`\n \n \n \n ${unsafeHTML(marked(fieldSchema.description || ''))}\n ${this.exampleListTemplate.call(this, fieldName, paramSchema.type, example.exampleList)}\n \n \n `\n }`);\n }\n return html`\n \n ${formDataTableRows}\n
    \n `;\n }\n\n return html`\n \n ${schema.description ? html`${unsafeHTML(marked(schema.description))}` : ''}\n `;\n }\n\n curlSyntaxTemplate(display = 'flex') {\n return html`\n
    \n \n
    ${unsafeHTML(Prism.highlight(this.curlSyntax.trim().replace(/\\\\$/, ''), Prism.languages.shell, 'shell'))}
    \n
    \n `;\n }\n\n apiResponseTabTemplate() {\n let responseFormat = '';\n let responseContent = '';\n if (!this.responseIsBlob) {\n if (this.responseHeaders.includes('application/x-ndjson')) {\n responseFormat = 'json';\n const prismLines = this.responseText.split('\\n').map((q) => Prism.highlight(q, Prism.languages[responseFormat], responseFormat)).join('\\n');\n responseContent = html`${unsafeHTML(prismLines)}`;\n } else if (this.responseHeaders.includes('json')) {\n responseFormat = 'json';\n responseContent = html`${unsafeHTML(Prism.highlight(this.responseText, Prism.languages[responseFormat], responseFormat))}`;\n } else if (this.responseHeaders.includes('html') || this.responseHeaders.includes('xml')) {\n responseFormat = 'html';\n responseContent = html`${unsafeHTML(Prism.highlight(this.responseText, Prism.languages[responseFormat], responseFormat))}`;\n } else {\n responseFormat = 'text';\n responseContent = html`${this.responseText}`;\n }\n }\n return html`\n
    \n
    Response Status: ${this.responseMessage}
    \n
    \n \n
    \n
    \n
    {\n if (e.target.classList.contains('tab-btn') === false) { return; }\n this.activeResponseTab = e.target.dataset.tab;\n }}\">\n \n \n ${this.showCurlBeforeTry === 'true'\n ? ''\n : html``}\n
    \n ${this.responseIsBlob\n ? html`\n
    \n ${this.responseBlobType === 'image'\n ? html``\n : ''\n } \n \n ${this.responseBlobType === 'view' || this.responseBlobType === 'image'\n ? html``\n : ''\n }\n
    `\n : html`\n
    \n \n
    ${responseContent}
    \n
    `\n }\n
    \n \n
    ${unsafeHTML(Prism.highlight(this.responseHeaders, Prism.languages.css, 'css'))}
    \n
    \n ${this.showCurlBeforeTry === 'true' ? '' : this.curlSyntaxTemplate(this.activeResponseTab === 'curl' ? 'flex' : 'none')}\n
    `;\n }\n\n apiCallTemplate() {\n const selectedServerHtml = html`\n
    \n ${this.serverUrl\n ? html`\n
    \n
    API Server
    \n ${this.serverUrl} \n
    \n `\n : ''\n }\n
    \n `;\n\n return html`\n
    \n
    \n
    \n ${selectedServerHtml}\n
    \n
    \n
    Authentication
    \n ${this.security?.length > 0\n ? html`\n ${this.api_keys.length > 0\n ? html`
    \n ${this.api_keys.length === 1\n ? `${this.api_keys[0]?.typeDisplay} in ${this.api_keys[0].in}`\n : `${this.api_keys.length} API keys applied`\n } \n
    `\n : html`
    Required (None Applied)
    `\n }`\n : html` Not Required `\n }\n
    \n
    \n ${\n this.parameters.length > 0 || this.request_body\n ? html`\n \n `\n : ''\n }\n \n
    \n
    \n ${this.showCurlBeforeTry === 'true' ? this.curlSyntaxTemplate() : ''}\n
    \n ${this.responseMessage === '' ? '' : this.apiResponseTabTemplate()}\n `;\n }\n /* eslint-enable indent */\n\n async onFillRequestData(e) {\n const requestPanelEl = e.target.closest('.request-panel');\n const requestPanelInputEls = [...requestPanelEl.querySelectorAll('input, tag-input, textarea:not(.is-hidden)')];\n requestPanelInputEls.forEach((el) => {\n if (el.dataset.example) {\n if (el.tagName.toUpperCase() === 'TAG-INPUT') {\n el.value = el.dataset.example.split('~|~');\n } else {\n el.value = el.dataset.example;\n }\n }\n });\n }\n\n async onClearRequestData(e) {\n const requestPanelEl = e.target.closest('.request-panel');\n const requestPanelInputEls = [...requestPanelEl.querySelectorAll('input, tag-input, textarea:not(.is-hidden)')];\n requestPanelInputEls.forEach((el) => { el.value = ''; });\n }\n\n buildFetchURL(requestPanelEl) {\n let fetchUrl;\n const pathParamEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='path']\")];\n const queryParamEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='query']\")];\n const queryParamObjTypeEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='query-object']\")];\n fetchUrl = this.path;\n // Generate URL using Path Params\n pathParamEls.map((el) => {\n fetchUrl = fetchUrl.replace(`{${el.dataset.pname}}`, encodeURIComponent(el.value));\n });\n\n // Query Params\n const urlQueryParamsMap = new Map();\n const queryParamsWithReservedCharsAllowed = [];\n if (queryParamEls.length > 0) {\n queryParamEls.forEach((el) => {\n const queryParam = new URLSearchParams();\n if (el.dataset.paramAllowReserved === 'true') {\n queryParamsWithReservedCharsAllowed.push(el.dataset.pname);\n }\n if (el.dataset.array === 'false') {\n if (el.value !== '') {\n queryParam.append(el.dataset.pname, el.value);\n }\n } else {\n const { paramSerializeStyle, paramSerializeExplode } = el.dataset;\n let vals = ((el.value && Array.isArray(el.value)) ? el.value : []);\n vals = Array.isArray(vals) ? vals.filter((v) => v !== '') : [];\n if (vals.length > 0) {\n if (paramSerializeStyle === 'spaceDelimited') {\n queryParam.append(el.dataset.pname, vals.join(' ').replace(/^\\s|\\s$/g, ''));\n } else if (paramSerializeStyle === 'pipeDelimited') {\n queryParam.append(el.dataset.pname, vals.join('|').replace(/^\\||\\|$/g, ''));\n } else {\n if (paramSerializeExplode === 'true') { // eslint-disable-line no-lonely-if\n vals.forEach((v) => { queryParam.append(el.dataset.pname, v); });\n } else {\n queryParam.append(el.dataset.pname, vals.join(',').replace(/^,|,$/g, ''));\n }\n }\n }\n }\n if (queryParam.toString()) {\n urlQueryParamsMap.set(el.dataset.pname, queryParam);\n }\n });\n }\n\n // Query Params (Dynamic - create from JSON)\n if (queryParamObjTypeEls.length > 0) {\n queryParamObjTypeEls.map((el) => {\n const queryParam = new URLSearchParams();\n try {\n let queryParamObj = {};\n const { paramSerializeStyle, paramSerializeExplode, pname } = el.dataset;\n queryParamObj = Object.assign(queryParamObj, JSON.parse(el.value.replace(/\\s+/g, ' ')));\n if (el.dataset.paramAllowReserved === 'true') {\n queryParamsWithReservedCharsAllowed.push(el.dataset.pname);\n }\n if ('json xml'.includes(paramSerializeStyle)) {\n if (paramSerializeStyle === 'json') {\n queryParam.append(el.dataset.pname, JSON.stringify(queryParamObj));\n } else if (paramSerializeStyle === 'xml') {\n queryParam.append(el.dataset.pname, json2xml(queryParamObj));\n }\n } else {\n for (const key in queryParamObj) {\n const pKey = `${pname}[${key}]`;\n if (typeof queryParamObj[key] === 'object') {\n if (Array.isArray(queryParamObj[key])) {\n if (paramSerializeStyle === 'spaceDelimited') {\n queryParam.append(pKey, queryParamObj[key].join(' '));\n } else if (paramSerializeStyle === 'pipeDelimited') {\n queryParam.append(pKey, queryParamObj[key].join('|'));\n } else {\n if (paramSerializeExplode === 'true') { // eslint-disable-line no-lonely-if\n queryParamObj[key].forEach((v) => {\n queryParam.append(pKey, v);\n });\n } else {\n queryParam.append(pKey, queryParamObj[key]);\n }\n }\n }\n } else {\n queryParam.append(pKey, queryParamObj[key]);\n }\n }\n }\n } catch {\n console.error('RapiDoc: unable to parse %s into object', el.value); // eslint-disable-line no-console\n }\n if (queryParam.toString()) {\n urlQueryParamsMap.set(el.dataset.pname, queryParam);\n }\n });\n }\n let urlQueryParamString = '';\n if (urlQueryParamsMap.size) {\n urlQueryParamsMap.forEach((val, pname) => {\n if (queryParamsWithReservedCharsAllowed.includes(pname)) {\n urlQueryParamString += `${pname}=`;\n urlQueryParamString += val.getAll(pname).join(`&${pname}=`);\n urlQueryParamString += '&';\n } else {\n urlQueryParamString += `${val.toString()}&`;\n }\n });\n urlQueryParamString = urlQueryParamString.slice(0, -1);\n }\n if (urlQueryParamString.length !== 0) {\n fetchUrl = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${urlQueryParamString}`;\n }\n\n // Add authentication Query-Param if provided\n this.api_keys\n .filter((v) => (v.in === 'query'))\n .forEach((v) => {\n fetchUrl = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${v.name}=${encodeURIComponent(v.finalKeyValue)}`;\n });\n\n fetchUrl = `${this.serverUrl.replace(/\\/$/, '')}${fetchUrl}`;\n return fetchUrl;\n }\n\n buildFetchHeaders(requestPanelEl) {\n const respEl = this.closest('.expanded-req-resp-container, .req-resp-container')?.getElementsByTagName('api-response')[0];\n const headerParamEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='header'], [data-ptype='header-object']\")];\n const requestBodyContainerEl = requestPanelEl.querySelector('.request-body-container');\n const acceptHeader = respEl?.selectedMimeType;\n const reqHeaders = new Headers();\n if (acceptHeader) {\n // Uses the acceptHeader from Response panel\n reqHeaders.append('Accept', acceptHeader);\n } else if (this.accept) {\n reqHeaders.append('Accept', this.accept);\n }\n\n // Add Authentication Header if provided\n this.api_keys\n .filter((v) => (v.in === 'header'))\n .forEach((v) => {\n reqHeaders.append(v.name, v.finalKeyValue);\n });\n\n // Add Header Params\n headerParamEls.map((el) => {\n if (el.value) {\n if (el.dataset.ptype === 'header-object') {\n /* CONVERT\n a header value from below object style\n {\n \"key1\": \"val1\",\n \"key2\": {\n \"key2_1\": \"val2_1\",\n \"key2_2\": {\n \"key2_2_1\": \"val2_2_1\"\n }\n },\n \"key3\": \"val3\"\n };\n\n TO >>>\n key1=val1, key2={\"key2_1\":\"val2_1\",\"key2_2\":{\"key2_2_1\":\"val2_2_1\"}}, key3=val3\n */\n const headerObjVal = JSON.parse(el.value.replace(/\\n/g, '').trim());\n const firstLevelKeySeparator = el.dataset.paramSerializeExplode === 'true' ? '=' : ',';\n const headerStrVal = Object.keys(headerObjVal)\n .map((key) => {\n const value = headerObjVal[key];\n if (typeof value === 'object') {\n return `${key}${firstLevelKeySeparator}${JSON.stringify(value)}`;\n }\n return `${key}${firstLevelKeySeparator}${value}`;\n })\n .join(',');\n reqHeaders.append(el.dataset.pname, headerStrVal);\n } else {\n reqHeaders.append(el.dataset.pname, el.value);\n }\n }\n });\n\n if (requestBodyContainerEl) {\n const requestBodyType = requestBodyContainerEl.dataset.selectedRequestBodyType;\n // Common for all request-body\n if (!requestBodyType.includes('form-data')) {\n // For multipart/form-data dont set the content-type to allow creation of browser generated part boundaries\n reqHeaders.append('Content-Type', requestBodyType);\n }\n }\n return reqHeaders;\n }\n\n buildFetchBodyOptions(requestPanelEl) {\n const requestBodyContainerEl = requestPanelEl.querySelector('.request-body-container');\n const fetchOptions = {\n method: this.method.toUpperCase(),\n };\n if (requestBodyContainerEl) {\n const requestBodyType = requestBodyContainerEl.dataset.selectedRequestBodyType;\n if (requestBodyType.includes('form-urlencoded')) {\n // url-encoded Form Params (dynamic) - Parse JSON and generate Params\n const formUrlDynamicTextAreaEl = requestPanelEl.querySelector(\"[data-ptype='dynamic-form']\");\n if (formUrlDynamicTextAreaEl) {\n const val = formUrlDynamicTextAreaEl.value;\n const formUrlDynParams = new URLSearchParams();\n let proceed = true;\n let tmpObj;\n if (val) {\n try {\n tmpObj = JSON.parse(val);\n } catch (err) {\n proceed = false;\n console.warn('RapiDoc: Invalid JSON provided', err); // eslint-disable-line no-console\n }\n } else {\n proceed = false;\n }\n if (proceed) {\n for (const prop in tmpObj) {\n formUrlDynParams.append(prop, JSON.stringify(tmpObj[prop]));\n }\n fetchOptions.body = formUrlDynParams;\n }\n } else {\n // url-encoded Form Params (regular)\n const formUrlEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='form-urlencode']\")];\n const formUrlParams = new URLSearchParams();\n formUrlEls\n .filter((v) => (v.type !== 'file'))\n .forEach((el) => {\n if (el.dataset.array === 'false') {\n if (el.value) {\n formUrlParams.append(el.dataset.pname, el.value);\n }\n } else {\n const vals = (el.value && Array.isArray(el.value)) ? el.value.join(',') : '';\n formUrlParams.append(el.dataset.pname, vals);\n }\n });\n fetchOptions.body = formUrlParams;\n }\n } else if (requestBodyType.includes('form-data')) {\n const formDataParams = new FormData();\n const formDataEls = [...requestPanelEl.querySelectorAll(\"[data-ptype='form-data']\")];\n formDataEls.forEach((el) => {\n if (el.dataset.array === 'false') {\n if (el.type === 'file' && el.files[0]) {\n formDataParams.append(el.dataset.pname, el.files[0], el.files[0].name);\n } else if (el.value) {\n formDataParams.append(el.dataset.pname, el.value);\n }\n } else if (el.value && Array.isArray(el.value)) {\n formDataParams.append(el.dataset.pname, el.value.join(','));\n }\n });\n fetchOptions.body = formDataParams;\n } else if (/^audio\\/|^image\\/|^video\\/|^font\\/|tar$|zip$|7z$|rtf$|msword$|excel$|\\/pdf$|\\/octet-stream$/.test(requestBodyType)) {\n const bodyParamFileEl = requestPanelEl.querySelector('.request-body-param-file');\n if (bodyParamFileEl?.files[0]) {\n fetchOptions.body = bodyParamFileEl.files[0]; // eslint-disable-line prefer-destructuring\n }\n } else if (requestBodyType.includes('json') || requestBodyType.includes('xml') || requestBodyType.includes('text')) {\n const exampleTextAreaEl = requestPanelEl.querySelector('.request-body-param-user-input');\n if (exampleTextAreaEl?.value) {\n fetchOptions.body = exampleTextAreaEl.value;\n }\n }\n }\n\n return fetchOptions;\n }\n\n async onTryClick(e) {\n const tryBtnEl = e.target;\n const requestPanelEl = tryBtnEl.closest('.request-panel');\n const fetchUrl = this.buildFetchURL(requestPanelEl);\n const fetchOptions = this.buildFetchBodyOptions(requestPanelEl);\n const reqHeaders = this.buildFetchHeaders(requestPanelEl);\n this.responseUrl = '';\n this.responseHeaders = [];\n this.curlSyntax = this.generateCURLSyntax(fetchUrl, reqHeaders, fetchOptions, requestPanelEl);\n this.responseStatus = 'success';\n this.responseIsBlob = false;\n\n this.respContentDisposition = '';\n if (this.responseBlobUrl) {\n URL.revokeObjectURL(this.responseBlobUrl);\n this.responseBlobUrl = '';\n }\n if (this.fetchCredentials) {\n fetchOptions.credentials = this.fetchCredentials;\n }\n const controller = new AbortController();\n const { signal } = controller;\n fetchOptions.headers = reqHeaders;\n const tempRequest = { url: fetchUrl, ...fetchOptions };\n this.dispatchEvent(new CustomEvent('before-try', {\n bubbles: true,\n composed: true,\n detail: {\n request: tempRequest,\n controller,\n },\n }));\n const updatedFetchOptions = {\n method: tempRequest.method,\n headers: tempRequest.headers,\n credentials: tempRequest.credentials,\n body: tempRequest.body,\n };\n const fetchRequest = new Request(tempRequest.url, updatedFetchOptions);\n\n let fetchResponse;\n let responseClone;\n try {\n let respBlob;\n let respJson;\n let respText;\n tryBtnEl.disabled = true;\n this.responseText = '⌛';\n this.responseMessage = '';\n this.requestUpdate();\n const startTime = performance.now();\n fetchResponse = await fetch(fetchRequest, { signal });\n const endTime = performance.now();\n // Allow to modify response\n /*\n let resolveModifiedResponse; // Create a promise that will be resolved from the event listener\n const modifiedResponsePromise = new Promise((resolve) => {\n resolveModifiedResponse = resolve;\n });\n this.dispatchEvent(new CustomEvent('fetched-try', {\n bubbles: true,\n composed: true,\n detail: {\n request: fetchRequest,\n response: fetchResponse,\n resolveModifiedResponse, // pass the resolver function\n },\n }));\n fetchResponse = await modifiedResponsePromise; // Wait for the modified response\n */\n responseClone = fetchResponse.clone(); // create a response clone to allow reading response body again (response.json, response.text etc)\n tryBtnEl.disabled = false;\n this.responseMessage = html`${fetchResponse.statusText ? `${fetchResponse.statusText}:${fetchResponse.status}` : fetchResponse.status}
    Took ${Math.round(endTime - startTime)} milliseconds
    `;\n this.responseUrl = fetchResponse.url;\n const respHeadersObj = {};\n fetchResponse.headers.forEach((hdrVal, hdr) => {\n respHeadersObj[hdr] = hdrVal;\n this.responseHeaders = `${this.responseHeaders}${hdr}: ${hdrVal}\\n`;\n });\n let contentType = fetchResponse.headers.get('content-type');\n const respEmpty = (await fetchResponse.clone().text()).length === 0;\n if (respEmpty) {\n this.responseText = '';\n } else if (contentType) {\n contentType = contentType.split(';')[0].trim();\n if (contentType === 'application/x-ndjson') {\n this.responseText = await fetchResponse.text();\n } else if (contentType.includes('json')) {\n if ((/charset=[^\"']+/).test(contentType)) {\n const encoding = contentType.split('charset=')[1];\n const buffer = await fetchResponse.arrayBuffer();\n try {\n respText = new TextDecoder(encoding).decode(buffer);\n } catch {\n respText = new TextDecoder('utf-8').decode(buffer);\n }\n try {\n respJson = JSON.parse(respText);\n this.responseText = JSON.stringify(respJson, null, 2);\n } catch {\n this.responseText = respText;\n }\n } else {\n respJson = await fetchResponse.json();\n this.responseText = JSON.stringify(respJson, null, 2);\n }\n // eslint-disable-next-line no-useless-escape\n } else if (/^font\\/|tar$|zip$|7z$|rtf$|msword$|excel$|\\/pdf$|\\/octet-stream$|^application\\/vnd\\./.test(contentType)) {\n this.responseIsBlob = true;\n this.responseBlobType = 'download';\n } else if (/^image/.test(contentType)) {\n this.responseIsBlob = true;\n this.responseBlobType = 'image';\n } else if (/^audio|^image|^video/.test(contentType)) {\n this.responseIsBlob = true;\n this.responseBlobType = 'view';\n } else {\n respText = await fetchResponse.text();\n if (contentType.includes('xml')) {\n this.responseText = formatXml(respText, { textNodesOnSameLine: true, indentor: ' ' });\n } else {\n this.responseText = respText;\n }\n }\n if (this.responseIsBlob) {\n const contentDisposition = fetchResponse.headers.get('content-disposition') || '';\n let filenameFromContentDeposition = 'filename';\n if (contentDisposition) {\n const filenameStarRegexMatch = contentDisposition.match(/filename\\*=\\s*UTF-8''([^;]+)/); // Support Headers like >>> Content-Disposition: attachment; filename*=UTF-8''example%20file.pdf\n if (filenameStarRegexMatch) {\n filenameFromContentDeposition = decodeURIComponent(filenameStarRegexMatch[1]); // the filename* format in the Content-Disposition header follows RFC 5987, which allows encoding non-ASCII characters using percent encoding. so example%20file.pdf becomes example file.pdf\n } else {\n // Fallback to the regular filename format\n const filenameMatch = contentDisposition.match(/filename=\"?([^\"]+)\"?/); // Content-Disposition: attachment; filename=example.pdf\n if (filenameMatch) {\n filenameFromContentDeposition = filenameMatch[1];\n }\n }\n }\n this.respContentDisposition = filenameFromContentDeposition;\n respBlob = await fetchResponse.blob();\n this.responseBlobUrl = URL.createObjectURL(respBlob);\n }\n } else {\n respText = await fetchResponse.text();\n this.responseText = respText;\n }\n this.dispatchEvent(new CustomEvent('after-try', {\n bubbles: true,\n composed: true,\n detail: {\n request: fetchRequest,\n response: responseClone,\n responseHeaders: respHeadersObj,\n responseBody: respJson || respText || respBlob,\n responseStatus: responseClone.ok,\n },\n }));\n } catch (err) {\n tryBtnEl.disabled = false;\n if (err.name === 'AbortError') {\n this.dispatchEvent(new CustomEvent('request-aborted', {\n bubbles: true,\n composed: true,\n detail: {\n err,\n request: fetchRequest,\n },\n }));\n this.responseMessage = 'Request Aborted';\n this.responseText = 'Request Aborted';\n } else {\n this.dispatchEvent(new CustomEvent('after-try', {\n bubbles: true,\n composed: true,\n detail: {\n err,\n request: fetchRequest,\n },\n }));\n this.responseMessage = `${err.message} (CORS or Network Issue)`;\n }\n }\n this.requestUpdate();\n }\n\n liveCURLSyntaxUpdate(requestPanelEl) {\n this.applyCURLSyntax(requestPanelEl);\n this.requestUpdate();\n }\n\n onGenerateCURLClick(e) {\n const requestPanelEl = this.getRequestPanel(e);\n this.applyCURLSyntax(requestPanelEl);\n }\n\n getRequestPanel(e) {\n return e.target.closest('.request-panel');\n }\n\n applyCURLSyntax(requestPanelEl) {\n const fetchUrl = this.buildFetchURL(requestPanelEl);\n const fetchOptions = this.buildFetchBodyOptions(requestPanelEl);\n const fetchHeaders = this.buildFetchHeaders(requestPanelEl);\n\n this.curlSyntax = this.generateCURLSyntax(fetchUrl, fetchHeaders, fetchOptions, requestPanelEl);\n }\n\n generateCURLSyntax(fetchUrl, fetchHeaders, fetchOptions, requestPanelEl) {\n let curlUrl;\n let curl = '';\n let curlHeaders = '';\n let curlData = '';\n let curlForm = '';\n const requestBodyContainerEl = requestPanelEl.querySelector('.request-body-container');\n\n if (fetchUrl.startsWith('http') === false) {\n const url = new URL(fetchUrl, window.location.href);\n curlUrl = url.href;\n } else {\n curlUrl = fetchUrl;\n }\n\n curl = `curl -X ${this.method.toUpperCase()} \"${curlUrl}\" \\\\\\n`;\n\n fetchHeaders.forEach((value, key) => {\n let tempHeaderArray = value.split(',');\n tempHeaderArray = tempHeaderArray.map((el) => el.trim()).filter((string, index) => tempHeaderArray.indexOf(string) === index);\n fetchHeaders.set(key, tempHeaderArray.join(', '));\n });\n\n curlHeaders = Array.from(fetchHeaders).map(([key, value]) => ` -H '${key}: ${value}'`).join('\\\\\\n');\n if (curlHeaders) {\n curlHeaders = `${curlHeaders} \\\\\\n`;\n }\n if (fetchOptions.body instanceof URLSearchParams) {\n curlData = ` -d ${fetchOptions.body.toString()} \\\\\\n`;\n } else if (fetchOptions.body instanceof File) {\n curlData = ` --data-binary @${fetchOptions.body.name} \\\\\\n`;\n } else if (fetchOptions.body instanceof FormData) {\n curlForm = Array.from(fetchOptions.body).reduce((aggregator, [key, value]) => {\n if (value instanceof File) {\n return [...aggregator, ` -F \"${key}=@${value.name}\"`];\n }\n\n const multiple = value.match(/([^,],)/gm);\n\n if (multiple) {\n const multipleResults = multiple.map((one) => `-F \"${key}[]=${one}\"`);\n\n return [...aggregator, ...multipleResults];\n }\n\n return [...aggregator, ` -F \"${key}=${value}\"`];\n }, []).join('\\\\\\n');\n } else if (requestBodyContainerEl && requestBodyContainerEl.dataset.selectedRequestBodyType) {\n const requestBodyType = requestBodyContainerEl.dataset.selectedRequestBodyType;\n const exampleTextAreaEl = requestPanelEl.querySelector('.request-body-param-user-input');\n if (exampleTextAreaEl?.value) {\n fetchOptions.body = exampleTextAreaEl.value;\n if (requestBodyType.includes('json')) {\n try {\n curlData = ` -d '${JSON.stringify(JSON.parse(exampleTextAreaEl.value))}' \\\\\\n`;\n } catch {\n // Ignore.\n }\n }\n if (!curlData) {\n curlData = ` -d '${exampleTextAreaEl.value.replace(/'/g, '\\'\"\\'\"\\'')}' \\\\\\n`;\n }\n }\n }\n\n return `${curl}${curlHeaders}${curlData}${curlForm}`;\n }\n\n onAddRemoveFileInput(e, pname, ptype) {\n if (e.target.tagName.toLowerCase() !== 'button') {\n return;\n }\n\n if (e.target.classList.contains('file-input-remove-btn')) {\n // Remove File Input Set\n const el = e.target.closest('.input-set');\n el.remove();\n return;\n }\n const el = e.target.closest('.file-input-container');\n\n // Add File Input Set\n\n // Container\n const newInputContainerEl = document.createElement('div');\n newInputContainerEl.setAttribute('class', 'input-set row');\n\n // File Input\n const newInputEl = document.createElement('input');\n newInputEl.type = 'file';\n newInputEl.style = 'width:200px; margin-top:2px;';\n newInputEl.setAttribute('data-pname', pname);\n newInputEl.setAttribute('data-ptype', ptype.includes('form-urlencode') ? 'form-urlencode' : 'form-data');\n newInputEl.setAttribute('data-array', 'false');\n newInputEl.setAttribute('data-file-array', 'true');\n\n // Remover Button\n const newRemoveBtnEl = document.createElement('button');\n newRemoveBtnEl.setAttribute('class', 'file-input-remove-btn');\n newRemoveBtnEl.innerHTML = '✕';\n\n newInputContainerEl.appendChild(newInputEl);\n newInputContainerEl.appendChild(newRemoveBtnEl);\n el.insertBefore(newInputContainerEl, e.target);\n // el.appendChild(newInputContainerEl);\n }\n\n clearResponseData() {\n this.responseUrl = '';\n this.responseHeaders = '';\n this.responseText = '';\n this.responseStatus = 'success';\n this.responseMessage = '';\n this.responseIsBlob = false;\n this.responseBlobType = '';\n this.respContentDisposition = '';\n if (this.responseBlobUrl) {\n URL.revokeObjectURL(this.responseBlobUrl);\n this.responseBlobUrl = '';\n }\n }\n\n disconnectedCallback() {\n this.curlSyntax = '';\n // Cleanup ObjectURL for the blob data if this component created one\n if (this.responseBlobUrl) {\n URL.revokeObjectURL(this.responseBlobUrl);\n this.responseBlobUrl = '';\n }\n super.disconnectedCallback();\n }\n}\n\n// Register the element with the browser\ncustomElements.define('api-request', ApiRequest);\n","import RandExp from 'randexp';\n\n// Make RandExp determinist\nRandExp.prototype.randInt = (from) => from;\n\n// Takes a value as input and provides a printable string to replresent null values, spaces, blankstring etc\nexport function getPrintableVal(val) {\n if (val === undefined) {\n return '';\n }\n if (val === null) {\n return 'null';\n }\n if (val === '') {\n return '∅';\n }\n if (typeof val === 'boolean' || typeof val === 'number') {\n return `${val}`;\n }\n if (Array.isArray(val)) {\n return val.map((v) => (v === null ? 'null' : v === '' ? '∅' : v.toString().replace(/^ +| +$/g, (m) => '●'.repeat(m.length)) || '')).join(', ');\n }\n if (typeof val === 'object') {\n const keys = Object.keys(val);\n return `{ ${keys[0]}:${val[keys[0]]}${keys.length > 1 ? ',' : ''} ... }`;\n }\n return val.toString().replace(/^ +| +$/g, (m) => '●'.repeat(m.length)) || '';\n}\n\n/* Generates an schema object containing type and constraint info */\nexport function getTypeInfo(schema) {\n if (!schema) {\n return;\n }\n let dataType = '';\n let constrain = '';\n // let examples;\n\n if (schema.$ref) {\n const n = schema.$ref.lastIndexOf('/');\n const schemaNode = schema.$ref.substring(n + 1);\n dataType = `{recursive: ${schemaNode}} `;\n } else if (schema.type) {\n dataType = Array.isArray(schema.type) ? schema.type.join(schema.length === 2 ? ' or ' : '┃') : schema.type;\n if (schema.format || schema.enum || schema.const) {\n dataType = dataType.replace('string', schema.enum ? 'enum' : schema.const ? 'const' : schema.format);\n }\n if (schema.nullable) {\n dataType += '┃null';\n }\n } else if (schema.const) {\n dataType = 'const';\n } else if (Object.keys(schema).length === 0) {\n dataType = 'any';\n } else {\n dataType = '{missing-type-info}';\n }\n\n const info = {\n type: dataType,\n format: schema.format || '',\n pattern: (schema.pattern && !schema.enum) ? schema.pattern : '',\n readOrWriteOnly: (schema.readOnly ? '🆁' : schema.writeOnly ? '🆆' : ''),\n deprecated: schema.deprecated ? '❌' : '',\n examples: schema.examples || schema.example,\n default: getPrintableVal(schema.default),\n description: schema.description || '',\n constrain: '',\n allowedValues: '',\n arrayType: '',\n html: '',\n };\n\n if (info.type === '{recursive}') {\n info.description = schema.$ref.substring(schema.$ref.lastIndexOf('/') + 1);\n } else if (info.type === '{missing-type-info}' || info.type === 'any') {\n info.description = info.description || '';\n }\n // Set Allowed Values\n info.allowedValues = schema.const\n ? schema.const\n : Array.isArray(schema.enum)\n ? schema.enum.map((v) => (getPrintableVal(v))).join('┃')\n : '';\n\n if (dataType === 'array' && schema.items) {\n const arrayItemType = schema.items?.type;\n const arrayItemDefault = getPrintableVal(schema.items.default);\n\n info.arrayType = `${schema.type} of ${Array.isArray(arrayItemType) ? arrayItemType.join('') : arrayItemType}`;\n info.default = arrayItemDefault;\n info.allowedValues = schema.items.const\n ? schema.const\n : Array.isArray(schema.items?.enum)\n ? schema.items.enum.map((v) => (getPrintableVal(v))).join('┃')\n : '';\n }\n if (dataType.match(/integer|number/g)) {\n if (schema.minimum !== undefined || schema.exclusiveMinimum !== undefined) {\n constrain += schema.minimum !== undefined ? `Min ${schema.minimum}` : `More than ${schema.exclusiveMinimum}`;\n }\n if (schema.maximum !== undefined || schema.exclusiveMaximum !== undefined) {\n constrain += schema.maximum !== undefined ? `${constrain ? '┃' : ''}Max ${schema.maximum}` : `${constrain ? '┃' : ''}Less than ${schema.exclusiveMaximum}`;\n }\n if (schema.multipleOf !== undefined) {\n constrain += `${constrain ? '┃' : ''} multiple of ${schema.multipleOf}`;\n }\n }\n if (dataType.match(/string/g)) {\n if (schema.minLength !== undefined && schema.maxLength !== undefined) {\n constrain += `${constrain ? '┃' : ''}${schema.minLength} to ${schema.maxLength} chars`;\n } else if (schema.minLength !== undefined) {\n constrain += `${constrain ? '┃' : ''}Min ${schema.minLength} chars`;\n } else if (schema.maxLength !== undefined) {\n constrain += `Max ${constrain ? '┃' : ''}${schema.maxLength} chars`;\n }\n }\n info.constrain = constrain;\n info.html = `${info.type}~|~${info.readOrWriteOnly}~|~${info.constrain}~|~${info.default}~|~${info.allowedValues}~|~${info.pattern}~|~${info.description}~|~${schema.title || ''}~|~${info.deprecated ? 'deprecated' : ''}`;\n return info;\n}\n\n/**\n *\n * @param {*} ex if the value\n * - Is an Object with 'value' property like\n * { 'value': 'example_val1', 'description': 'some description' }\n * Returns >>>\n * {\n * 'Example': { 'value' : 'example_val1', 'description': 'some description' },\n * }\n * - Is an object where each key represents a valid example object (i,e has a value property)\n * {\n * 'example1': { 'value' : 'example_val1', 'description': 'some description' },\n * 'example2': { 'value' : 'example_val2', 'description': 'some other description' },\n * 'invalid': { 'description': 'invalid example object without any value property' }\n * }\n * Returns >>>\n * {\n * 'example1': { 'value' : 'example_val1', 'description': 'some description' },\n * 'example2': { 'value' : 'example_val2', 'description': 'some other description' }\n * }\n * if none of the keys represents an object with 'value' property then return undefined\n * - Is an array of premitive values\n * ['example_val1', 'example_val2']\n * Returns >>>\n * {\n * 'Example1': {value:'value1'}\n * 'Example2': {value:'value2'}\n * }\n * - Is a premitive value\n * 'example_val1'\n * Returns >>>\n * {\n * 'Example': { 'value': 'example_val1' }\n * }\n * - Is undefined\n * returns undefined\n * @returns\n */\n\nexport function standardizeExample(ex) {\n if (typeof ex === 'object' && !Array.isArray(ex)) {\n if (ex.value !== undefined) {\n // Case 1: Single object with 'value' property\n return { Example: { ...ex } };\n }\n // Case 2: Object where each key is an object with a 'value' property\n const filteredEntries = Object.entries(ex).filter(([_, obj]) => obj.value !== undefined); // eslint-disable-line\n // If no valid entries found, return JSON.stringify of the input\n if (filteredEntries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(filteredEntries);\n } if (Array.isArray(ex)) {\n // Case 3: Array of primitive values\n return ex.reduce((acc, value, index) => {\n acc[`Example${index + 1}`] = { value };\n return acc;\n }, {});\n }\n // Case 4: Single primitive value\n return ex ? { Example: { value: ex } } : undefined;\n}\n\n/**\n * Normalize example object in the following format (List of object which is used to render example links and fill the input boxes)\n * [{\n * exampleVal : 'value to be rendered on the input control (text-box)',\n * exampleList : [\n * value : '',\n * printableValue: '',\n * summary : '',\n * description : ''\n * ]\n * }]\n * */\nexport function normalizeExamples(examples, dataType = 'string') {\n if (!examples) {\n return {\n exampleVal: '',\n exampleList: [],\n };\n }\n if (examples.constructor === Object) {\n const exampleList = Object.values(examples)\n .filter((v) => (v['x-example-show-value'] !== false))\n .map((v) => ({\n value: (typeof v.value === 'boolean' || typeof v.value === 'number' ? `${v.value}` : (v.value || '')),\n printableValue: getPrintableVal(v.value),\n summary: v.summary || '',\n description: v.description || '',\n }));\n const exampleVal = exampleList.length > 0\n ? exampleList[0].value\n : '';\n return { exampleVal, exampleList };\n }\n\n // This is non-standard way to provide example but will support for now\n if (!Array.isArray(examples)) {\n examples = examples ? [examples] : [];\n }\n\n if (examples.length === 0) {\n return {\n exampleVal: '',\n exampleList: [],\n };\n }\n\n if (dataType === 'array') {\n const [exampleVal] = examples;\n const exampleList = examples.map((v) => ({\n value: v,\n printableValue: getPrintableVal(v),\n }));\n return { exampleVal, exampleList };\n }\n\n const exampleVal = examples[0].toString();\n const exampleList = examples.map((v) => ({\n value: v.toString(),\n printableValue: getPrintableVal(v),\n }));\n return { exampleVal, exampleList };\n}\n\nexport function anyExampleWithSummaryOrDescription(examples) {\n return examples.some((x) => x.summary?.length > 0 || x.description?.length > 0);\n}\n\nexport function getSampleValueByType(schemaObj) {\n const example = schemaObj.examples\n ? schemaObj.examples[0]\n : schemaObj.example === null\n ? null\n : schemaObj.example || undefined;\n if (example === '') { return ''; }\n if (example === null) { return null; }\n if (example === 0) { return 0; }\n if (example === false) { return false; }\n if (example instanceof Date) {\n switch (schemaObj.format.toLowerCase()) {\n case 'date':\n return example.toISOString().split('T')[0];\n case 'time':\n return example.toISOString().split('T')[1];\n default:\n return example.toISOString();\n }\n }\n if (example) { return example; }\n\n if (Object.keys(schemaObj).length === 0) {\n return null;\n }\n if (schemaObj.$ref) {\n // Indicates a Circular ref\n return {};\n }\n if (schemaObj.const === false || schemaObj.const === 0 || schemaObj.const === null || schemaObj.const === '') {\n return schemaObj.const;\n }\n if (schemaObj.const) {\n return schemaObj.const;\n }\n if (schemaObj.default) {\n return schemaObj.default;\n }\n const typeValue = Array.isArray(schemaObj.type) ? schemaObj.type[0] : schemaObj.type;\n if (!typeValue) {\n return null;\n }\n if (typeValue.match(/^integer|^number/g)) {\n const multipleOf = Number.isNaN(Number(schemaObj.multipleOf)) ? undefined : Number(schemaObj.multipleOf);\n const maximum = Number.isNaN(Number(schemaObj.maximum)) ? undefined : Number(schemaObj.maximum);\n const minimumPossibleVal = Number.isNaN(Number(schemaObj.minimum))\n ? Number.isNaN(Number(schemaObj.exclusiveMinimum))\n ? maximum || 0\n : Number(schemaObj.exclusiveMinimum) + (typeValue.startsWith('integer') ? 1 : 0.001)\n : Number(schemaObj.minimum);\n const finalVal = multipleOf\n ? multipleOf >= minimumPossibleVal\n ? multipleOf\n : minimumPossibleVal % multipleOf === 0\n ? minimumPossibleVal\n : Math.ceil(minimumPossibleVal / multipleOf) * multipleOf\n : minimumPossibleVal;\n return finalVal;\n }\n if (typeValue.match(/^boolean/g)) { return false; }\n if (typeValue.match(/^null/g)) { return null; }\n if (typeValue.match(/^string/g)) {\n if (schemaObj.enum) { return schemaObj.enum[0]; }\n if (schemaObj.const) { return schemaObj.const; }\n if (schemaObj.pattern) {\n try {\n return new RandExp(schemaObj.pattern).gen();\n } catch {\n return schemaObj.pattern;\n }\n }\n if (schemaObj.format) {\n const u = `${Date.now().toString(16)}${Math.random().toString(16)}0`.repeat(16);\n switch (schemaObj.format.toLowerCase()) {\n case 'url':\n case 'uri':\n return 'http://example.com';\n case 'date':\n return (new Date(0)).toISOString().split('T')[0];\n case 'time':\n return (new Date(0)).toISOString().split('T')[1];\n case 'date-time':\n return (new Date(0)).toISOString();\n case 'duration':\n return 'P3Y6M4DT12H30M5S'; // P=Period 3-Years 6-Months 4-Days 12-Hours 30-Minutes 5-Seconds\n case 'email':\n case 'idn-email':\n return 'user@example.com';\n case 'hostname':\n case 'idn-hostname':\n return 'www.example.com';\n case 'ipv4':\n return '198.51.100.42';\n case 'ipv6':\n return '2001:0db8:5b96:0000:0000:426f:8e17:642a';\n case 'uuid':\n return [u.substring(0, 8), u.substring(8, 12), `4000-8${u.substring(13, 16)}`, u.substring(16, 28)].join('-');\n case 'byte':\n return 'ZXhhbXBsZQ=='; // 'example' base64 encoded. See https://spec.openapis.org/oas/v3.0.0#data-types\n default:\n return '';\n }\n } else {\n const minLength = Number.isNaN(schemaObj.minLength) ? undefined : Number(schemaObj.minLength);\n const maxLength = Number.isNaN(schemaObj.maxLength) ? undefined : Number(schemaObj.maxLength);\n const finalLength = minLength || (maxLength > 6 ? 6 : maxLength || undefined);\n return finalLength ? 'A'.repeat(finalLength) : 'string';\n }\n }\n // If type cannot be determined\n return null;\n}\n\n/*\njson2xml- TestCase\n {\n 'prop1' : 'one',\n 'prop2' : 'two',\n 'prop3' : [ 'a', 'b', 'c' ],\n 'prop4' : {\n 'ob1' : 'val-1',\n 'ob2' : 'val-2'\n }\n }\n \n simple\n \n <0>a\n <1>b\n <2>c\n \n \n val-1\n val-2\n \n \n*/\nexport function json2xml(obj, level = 1) {\n const indent = ' '.repeat(level);\n let xmlText = '';\n if (level === 1 && typeof obj !== 'object') {\n return `\\n${indent}${obj.toString()}`;\n }\n for (const prop in obj) {\n const tagNameOrProp = (obj[prop]['::XML_TAG'] || prop);\n let tagName = '';\n if (Array.isArray(obj[prop])) {\n tagName = tagNameOrProp[0]['::XML_TAG'] || `${prop}`;\n } else {\n tagName = tagNameOrProp;\n }\n if (prop.startsWith('::')) {\n continue;\n }\n if (Array.isArray(obj[prop])) {\n xmlText = `${xmlText}\\n${indent}<${tagName}>${json2xml(obj[prop], level + 1)}\\n${indent}`;\n } else if (typeof obj[prop] === 'object') {\n xmlText = `${xmlText}\\n${indent}<${tagName}>${json2xml(obj[prop], level + 1)}\\n${indent}`;\n } else {\n xmlText = `${xmlText}\\n${indent}<${tagName}>${obj[prop].toString()}`;\n }\n }\n return xmlText;\n}\n\nfunction addSchemaInfoToExample(schema, obj) {\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n if (schema.title) {\n obj['::TITLE'] = schema.title;\n }\n if (schema.description) {\n obj['::DESCRIPTION'] = schema.description;\n }\n if (schema.xml?.name) {\n obj['::XML_TAG'] = schema.xml?.name;\n }\n if (schema.xml?.wrapped) {\n obj['::XML_WRAP'] = schema.xml?.wrapped.toString();\n }\n}\n\nfunction removeTitlesAndDescriptions(obj) {\n if (typeof obj !== 'object' || obj === null) {\n return;\n }\n delete obj['::TITLE'];\n delete obj['::DESCRIPTION'];\n delete obj['::XML_TAG'];\n delete obj['::XML_WRAP'];\n for (const k in obj) {\n removeTitlesAndDescriptions(obj[k]);\n }\n}\n\nfunction addPropertyExampleToObjectExamples(example, obj, propertyKey) {\n for (const key in obj) {\n obj[key][propertyKey] = example;\n }\n}\n\nfunction mergePropertyExamples(obj, propertyName, propExamples) {\n // Create an example for each variant of the propertyExample, merging them with the current (parent) example\n let i = 0;\n const maxCombinations = 10;\n const mergedObj = {};\n for (const exampleKey in obj) {\n for (const propExampleKey in propExamples) {\n mergedObj[`example-${i}`] = { ...obj[exampleKey] };\n mergedObj[`example-${i}`][propertyName] = propExamples[propExampleKey];\n i++;\n if (i >= maxCombinations) {\n break;\n }\n }\n if (i >= maxCombinations) {\n break;\n }\n }\n return mergedObj;\n}\n\n/* For changing JSON-Schema to a Sample Object, as per the schema (to generate examples based on schema) */\nexport function schemaToSampleObj(schema, config = { }) {\n let obj = {};\n if (!schema) {\n return;\n }\n if (schema.allOf) {\n const objWithAllProps = {};\n\n if (schema.allOf.length === 1 && !schema.allOf[0]?.properties && !schema.allOf[0]?.items) {\n // If allOf has single item and the type is not an object or array, then its a primitive\n if (schema.allOf[0].$ref) {\n return '{ }';\n }\n if (schema.allOf[0].readOnly && config.includeReadOnly) {\n const tempSchema = schema.allOf[0];\n return getSampleValueByType(tempSchema);\n }\n return;\n }\n\n schema.allOf.forEach((v) => {\n if (v.type === 'object' || v.properties || v.allOf || v.anyOf || v.oneOf) {\n const partialObj = schemaToSampleObj(v, config);\n Object.assign(objWithAllProps, partialObj);\n } else if (v.type === 'array' || v.items) {\n const partialObj = [schemaToSampleObj(v, config)];\n Object.assign(objWithAllProps, partialObj);\n } else if (v.type) {\n const prop = `prop${Object.keys(objWithAllProps).length}`;\n objWithAllProps[prop] = getSampleValueByType(v);\n } else {\n return '';\n }\n });\n\n obj = objWithAllProps;\n } else if (schema.oneOf) {\n // 1. First create example with scheme.properties\n const objWithSchemaProps = {};\n if (schema.properties) {\n for (const propertyName in schema.properties) {\n if (schema.properties[propertyName].properties || schema.properties[propertyName].properties?.items) {\n objWithSchemaProps[propertyName] = schemaToSampleObj(schema.properties[propertyName], config);\n } else {\n objWithSchemaProps[propertyName] = getSampleValueByType(schema.properties[propertyName]);\n }\n }\n }\n\n if (schema.oneOf.length > 0) {\n /*\n oneOf:\n - type: object\n properties:\n option1_PropA:\n type: string\n option1_PropB:\n type: string\n - type: object\n properties:\n option2_PropX:\n type: string\n properties:\n prop1:\n type: string\n prop2:\n type: string\n minLength: 10\n\n The aboove Schem should generate the following 2 examples\n\n Example-1\n {\n prop1: 'string',\n prop2: 'AAAAAAAAAA', <-- min-length 10\n option1_PropA: 'string',\n option1_PropB: 'string'\n }\n\n Example-2\n {\n prop1: 'string',\n prop2: 'AAAAAAAAAA', <-- min-length 10\n option2_PropX: 'string'\n }\n */\n let i = 0;\n // Merge all examples of each oneOf-schema\n for (const key in schema.oneOf) {\n const oneOfSamples = schemaToSampleObj(schema.oneOf[key], config);\n for (const sampleKey in oneOfSamples) {\n // 2. In the final example include a one-of item along with properties\n let finalExample;\n if (Object.keys(objWithSchemaProps).length > 0) {\n if (oneOfSamples[sampleKey] === null || typeof oneOfSamples[sampleKey] !== 'object') {\n // This doesn't really make sense since every oneOf schema _should_ be an object if there are common properties, so we'll skip this\n continue;\n } else {\n finalExample = Object.assign(oneOfSamples[sampleKey], objWithSchemaProps);\n }\n } else {\n finalExample = oneOfSamples[sampleKey];\n }\n obj[`example-${i}`] = finalExample;\n addSchemaInfoToExample(schema.oneOf[key], obj[`example-${i}`]);\n i++;\n }\n }\n }\n } else if (schema.anyOf) {\n // First generate values for regular properties\n let commonObj;\n if (schema.type === 'object' || schema.properties) {\n commonObj = { 'example-0': {} };\n for (const propertyName in schema.properties) {\n if (schema.example) {\n commonObj = schema;\n break;\n }\n if (schema.properties[propertyName].deprecated && !config.includeDeprecated) { continue; }\n if (schema.properties[propertyName].readOnly && !config.includeReadOnly) { continue; }\n if (schema.properties[propertyName].writeOnly && !config.includeWriteOnly) { continue; }\n commonObj = mergePropertyExamples(commonObj, propertyName, schemaToSampleObj(schema.properties[propertyName], config));\n }\n }\n\n // Combine every variant of the regular properties with every variant of the anyOf samples\n let i = 0;\n for (const key in schema.anyOf) {\n const anyOfSamples = schemaToSampleObj(schema.anyOf[key], config);\n for (const sampleKey in anyOfSamples) {\n if (typeof commonObj !== 'undefined') {\n for (const commonKey in commonObj) {\n obj[`example-${i}`] = { ...commonObj[commonKey], ...anyOfSamples[sampleKey] };\n }\n } else {\n obj[`example-${i}`] = anyOfSamples[sampleKey];\n }\n addSchemaInfoToExample(schema.anyOf[key], obj[`example-${i}`]);\n i++;\n }\n }\n } else if (schema.type === 'object' || schema.properties) {\n obj['example-0'] = {};\n addSchemaInfoToExample(schema, obj['example-0']);\n if (schema.example) {\n obj['example-0'] = schema.example;\n } else {\n for (const propertyName in schema.properties) {\n if (schema.properties[propertyName]?.deprecated && !config.includeDeprecated) { continue; }\n if (schema.properties[propertyName]?.readOnly && !config.includeReadOnly) { continue; }\n if (schema.properties[propertyName]?.writeOnly && !config.includeWriteOnly) { continue; }\n if (schema.properties[propertyName]?.type === 'array' || schema.properties[propertyName]?.items) {\n if (schema.properties[propertyName].example) {\n addPropertyExampleToObjectExamples(schema.properties[propertyName].example, obj, propertyName);\n } else if (schema.properties[propertyName]?.items?.example) { // schemas and properties support single example but not multiple examples.\n addPropertyExampleToObjectExamples([schema.properties[propertyName].items.example], obj, propertyName);\n } else {\n const itemSamples = schemaToSampleObj(schema.properties[propertyName].items, config);\n if (config.useXmlTagForProp) {\n const xmlTagName = schema.properties[propertyName].xml?.name || propertyName;\n if (schema.properties[propertyName].xml?.wrapped) {\n const wrappedItemSample = JSON.parse(`{ \"${xmlTagName}\" : { \"${xmlTagName}\" : ${JSON.stringify(itemSamples['example-0'])} } }`);\n obj = mergePropertyExamples(obj, xmlTagName, wrappedItemSample);\n } else {\n obj = mergePropertyExamples(obj, xmlTagName, itemSamples);\n }\n } else {\n const arraySamples = [];\n for (const key in itemSamples) {\n arraySamples[key] = [itemSamples[key]];\n }\n obj = mergePropertyExamples(obj, propertyName, arraySamples);\n }\n }\n continue;\n }\n obj = mergePropertyExamples(obj, propertyName, schemaToSampleObj(schema.properties[propertyName], config));\n }\n if (typeof schema.additionalProperties === 'object') {\n const propertyName = schema.additionalProperties['x-additionalPropertiesName'] || 'property';\n obj = mergePropertyExamples(obj, `${propertyName}1`, schemaToSampleObj(schema.additionalProperties, config));\n obj = mergePropertyExamples(obj, `${propertyName}2`, schemaToSampleObj(schema.additionalProperties, config));\n }\n }\n } else if (schema.type === 'array' || schema.items) {\n if (schema.items || schema.example) {\n if (schema.example) {\n obj['example-0'] = schema.example;\n } else if (schema.items?.example) { // schemas and properties support single example but not multiple examples.\n obj['example-0'] = [schema.items.example];\n } else {\n const samples = schemaToSampleObj(schema.items, config);\n let i = 0;\n for (const key in samples) {\n obj[`example-${i}`] = [samples[key]];\n addSchemaInfoToExample(schema.items, obj[`example-${i}`]);\n i++;\n }\n }\n } else {\n obj['example-0'] = [];\n }\n } else {\n return { 'example-0': getSampleValueByType(schema) };\n }\n return obj;\n}\n\nfunction generateMarkdownForArrayAndObjectDescription(schema, level = 0) {\n let markdown = ((schema.description || schema.title) && (schema.minItems || schema.maxItems)) ? '' : '';\n if (schema.title) {\n if (schema.description) {\n markdown = `${markdown} ${schema.title}: ${schema.description}
    `;\n } else {\n markdown = `${markdown} ${schema.title}
    `;\n }\n } else if (schema.description) {\n markdown = `${markdown} ${schema.description}
    `;\n }\n if (schema.minItems) {\n markdown = `${markdown} Min Items: ${schema.minItems}`;\n }\n if (schema.maxItems) {\n markdown = `${markdown} Max Items: ${schema.maxItems}`;\n }\n if (schema.uniqueItems === true) {\n markdown = `${markdown} Must have unique items`;\n }\n if (level > 0 && schema.items?.description) {\n let itemsMarkdown = '';\n if (schema.items.minProperties) {\n itemsMarkdown = `Min Properties: ${schema.items.minProperties}`;\n }\n if (schema.items.maxProperties) {\n itemsMarkdown = `${itemsMarkdown} Max Properties: ${schema.items.maxProperties}`;\n }\n markdown = `${markdown} ⮕ ${itemsMarkdown} [ ${schema.items.description} ] `;\n }\n return markdown;\n}\n/**\n * For changing OpenAPI-Schema to an Object Notation,\n * This Object would further be an input to UI Components to generate an Object-Tree\n * @param {object} schema - Schema object from OpenAPI spec\n * @param {object} obj - recursivly pass this object to generate object notation\n * @param {number} level - recursion level\n * @param {string} suffix - used for suffixing property names to avoid duplicate props during object composion\n */\nexport function schemaInObjectNotation(schema, obj, level = 0, suffix = '') {\n if (!schema) {\n return;\n }\n if (schema.allOf) {\n const objWithAllProps = {};\n if (schema.allOf.length === 1 && !schema.allOf[0].properties && !schema.allOf[0].items) {\n // If allOf has single item and the type is not an object or array, then its a primitive\n const tempSchema = schema.allOf[0];\n return `${getTypeInfo(tempSchema).html}`;\n }\n // If allOf is an array of multiple elements, then all the keys makes a single object\n schema.allOf.map((v, i) => {\n if (v.type === 'object' || v.properties || v.allOf || v.anyOf || v.oneOf) {\n const propSuffix = (v.anyOf || v.oneOf) && i > 0 ? i : '';\n const partialObj = schemaInObjectNotation(v, {}, (level + 1), propSuffix);\n Object.assign(objWithAllProps, partialObj);\n } else if (v.type === 'array' || v.items) {\n const partialObj = schemaInObjectNotation(v, {}, (level + 1));\n Object.assign(objWithAllProps, partialObj);\n } else if (v.type) {\n const prop = `prop${Object.keys(objWithAllProps).length}`;\n const typeObj = getTypeInfo(v);\n objWithAllProps[prop] = `${typeObj.html}`;\n } else {\n return '';\n }\n });\n obj = objWithAllProps;\n } else if (schema.anyOf || schema.oneOf) {\n obj['::description'] = schema.description || '';\n // 1. First iterate the regular properties\n if (schema.type === 'object' || schema.properties) {\n obj['::description'] = schema.description || '';\n obj['::type'] = 'object';\n // obj['::deprecated'] = schema.deprecated || false;\n for (const key in schema.properties) {\n if (schema.required && schema.required.includes(key)) {\n obj[`${key}*`] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n } else {\n obj[key] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n }\n }\n }\n // 2. Then show allof/anyof objects\n const objWithAnyOfProps = {};\n const xxxOf = schema.anyOf ? 'anyOf' : 'oneOf';\n schema[xxxOf].forEach((v, index) => {\n if (v.type === 'object' || v.properties || v.allOf || v.anyOf || v.oneOf) {\n const partialObj = schemaInObjectNotation(v, {});\n objWithAnyOfProps[`::OPTION~${index + 1}${v.title ? `~${v.title}` : ''}`] = partialObj;\n objWithAnyOfProps[`::OPTION~${index + 1}${v.title ? `~${v.title}` : ''}`]['::readwrite'] = ''; // xxx-options cannot be read or write only\n objWithAnyOfProps['::type'] = 'xxx-of-option';\n } else if (v.type === 'array' || v.items) {\n // This else-if block never seems to get executed\n const partialObj = schemaInObjectNotation(v, {});\n objWithAnyOfProps[`::OPTION~${index + 1}${v.title ? `~${v.title}` : ''}`] = partialObj;\n objWithAnyOfProps[`::OPTION~${index + 1}${v.title ? `~${v.title}` : ''}`]['::readwrite'] = ''; // xxx-options cannot be read or write only\n objWithAnyOfProps['::type'] = 'xxx-of-array';\n } else {\n const prop = `::OPTION~${index + 1}${v.title ? `~${v.title}` : ''}`;\n objWithAnyOfProps[prop] = `${getTypeInfo(v).html}`;\n objWithAnyOfProps['::type'] = 'xxx-of-option';\n }\n });\n obj[(schema.anyOf ? `::ANY~OF ${suffix}` : `::ONE~OF ${suffix}`)] = objWithAnyOfProps;\n // obj['::type'] = 'object';\n obj['::type'] = 'object';\n } else if (Array.isArray(schema.type)) {\n // When a property has multiple types, then check further if any of the types are array or object, if yes then modify the schema using one-of\n // Clone the schema - as it will be modified to replace multi-data-types with one-of;\n const subSchema = JSON.parse(JSON.stringify(schema));\n const primitiveType = [];\n const complexTypes = [];\n subSchema.type.forEach((v) => {\n if (v.match(/integer|number|string|null|boolean/g)) {\n primitiveType.push(v);\n } else if (v === 'array' && typeof subSchema.items?.type === 'string' && subSchema.items?.type.match(/integer|number|string|null|boolean/g)) {\n // Array with primitive types should also be treated as primitive type\n if (subSchema.items.type === 'string' && subSchema.items.format) {\n primitiveType.push(`[${subSchema.items.format}]`);\n } else {\n primitiveType.push(`[${subSchema.items.type}]`);\n }\n } else {\n complexTypes.push(v);\n }\n });\n let multiPrimitiveTypes;\n if (primitiveType.length > 0) {\n subSchema.type = primitiveType.join(primitiveType.length === 2 ? ' or ' : '┃');\n multiPrimitiveTypes = getTypeInfo(subSchema);\n if (complexTypes.length === 0) {\n return `${multiPrimitiveTypes?.html || ''}`;\n }\n }\n if (complexTypes.length > 0) {\n obj['::type'] = 'object';\n const multiTypeOptions = {\n '::type': 'xxx-of-option',\n };\n\n // Generate ONE-OF options for complexTypes\n complexTypes.forEach((v, i) => {\n if (v === 'null') {\n multiTypeOptions[`::OPTION~${i + 1}`] = 'NULL~|~~|~~|~~|~~|~~|~~|~~|~';\n } else if ('integer, number, string, boolean,'.includes(`${v},`)) {\n subSchema.type = Array.isArray(v) ? v.join('┃') : v;\n const primitiveTypeInfo = getTypeInfo(subSchema);\n multiTypeOptions[`::OPTION~${i + 1}`] = primitiveTypeInfo.html;\n } else if (v === 'object') {\n // If object type iterate all the properties and create an object-type-option\n const objTypeOption = {\n '::title': schema.title || '',\n '::description': schema.description || '',\n '::type': 'object',\n '::deprecated': schema.deprecated || false,\n };\n for (const key in schema.properties) {\n if (schema.required && schema.required.includes(key)) {\n objTypeOption[`${key}*`] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n } else {\n objTypeOption[key] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n }\n }\n multiTypeOptions[`::OPTION~${i + 1}`] = objTypeOption;\n } else if (v === 'array') {\n multiTypeOptions[`::OPTION~${i + 1}`] = {\n '::title': schema.title || '',\n '::description': schema.description || '',\n '::type': 'array',\n '::props': schemaInObjectNotation(schema.items, {}, (level + 1)),\n };\n }\n });\n multiTypeOptions[`::OPTION~${complexTypes.length + 1}`] = multiPrimitiveTypes?.html || '';\n obj['::ONE~OF'] = multiTypeOptions;\n }\n } else if (schema.type === 'object' || schema.properties) { // If Object\n obj['::title'] = schema.title || '';\n obj['::description'] = generateMarkdownForArrayAndObjectDescription(schema, level);\n obj['::type'] = 'object';\n if ((Array.isArray(schema.type) && schema.type.includes('null')) || schema.nullable) {\n obj['::dataTypeLabel'] = 'object or null';\n obj['::nullable'] = true;\n }\n obj['::deprecated'] = schema.deprecated || false;\n obj['::readwrite'] = schema.readOnly ? 'readonly' : schema.writeOnly ? 'writeonly' : '';\n for (const key in schema.properties) {\n if (schema.required && schema.required.includes(key)) {\n obj[`${key}*`] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n } else {\n obj[key] = schemaInObjectNotation(schema.properties[key], {}, (level + 1));\n }\n }\n for (const key in schema.patternProperties) {\n obj[`[pattern: ${key}]`] = schemaInObjectNotation(schema.patternProperties[key], obj, (level + 1));\n }\n if (schema.additionalProperties) {\n obj['[any-key]'] = schemaInObjectNotation(schema.additionalProperties, {});\n }\n } else if (schema.type === 'array' || schema.items) { // If Array\n obj['::title'] = schema.title || '';\n obj['::description'] = generateMarkdownForArrayAndObjectDescription(schema, level);\n obj['::type'] = 'array';\n if ((Array.isArray(schema.type) && schema.type.includes('null')) || schema.nullable) {\n obj['::dataTypeLabel'] = 'array or null';\n obj['::nullable'] = true;\n }\n obj['::deprecated'] = schema.deprecated || false;\n obj['::readwrite'] = schema.readOnly ? 'readonly' : schema.writeOnly ? 'writeonly' : '';\n if (schema.items?.items) {\n obj['::array-type'] = schema.items.items.type;\n }\n obj['::props'] = schemaInObjectNotation(schema.items, {}, (level + 1));\n } else {\n const typeObj = getTypeInfo(schema);\n if (typeObj?.html) {\n return `${typeObj.html}`;\n }\n return '';\n }\n return obj;\n}\n\n/* Create Example object */\nexport function generateExample(schema, mimeType, examples = {}, example = {}, includeReadOnly = true, includeWriteOnly = true, outputType = 'json', includeGeneratedExample = false) {\n const finalExamples = [];\n // First check if examples is provided\n if (examples) {\n for (const eg in examples) {\n let egContent = '';\n let egFormat = 'json';\n if (mimeType?.toLowerCase().includes('json')) {\n if (outputType === 'text') {\n egContent = typeof examples[eg].value === 'string' ? examples[eg].value : JSON.stringify(examples[eg].value, undefined, 2);\n egFormat = 'text';\n } else {\n egContent = examples[eg].value;\n if (typeof examples[eg].value === 'string') {\n try {\n // const fixedJsonString = examples[eg].value.replace((/([\\w]+)(:)/g), '\"$1\"$2').replace((/'/g), '\"');\n const fixedJsonString = examples[eg].value;\n egContent = JSON.parse(fixedJsonString);\n egFormat = 'json';\n } catch {\n egFormat = 'text';\n egContent = examples[eg].value;\n }\n }\n }\n } else {\n egContent = examples[eg].value;\n egFormat = 'text';\n }\n\n finalExamples.push({\n exampleId: eg,\n exampleSummary: examples[eg].summary || eg,\n exampleDescription: examples[eg].description || '',\n exampleType: mimeType,\n exampleValue: egContent,\n exampleFormat: egFormat,\n });\n }\n } else if (example) {\n let egContent = '';\n let egFormat = 'json';\n if (mimeType?.toLowerCase().includes('json')) {\n if (outputType === 'text') {\n egContent = typeof example === 'string' ? example : JSON.stringify(example, undefined, 2);\n egFormat = 'text';\n } else if (typeof example === 'object') {\n egContent = example;\n egFormat = 'json';\n } else if (typeof example === 'string') {\n try {\n egContent = JSON.parse(example);\n egFormat = 'json';\n } catch {\n egFormat = 'text';\n egContent = example;\n }\n }\n } else {\n egContent = example;\n egFormat = 'text';\n }\n finalExamples.push({\n exampleId: 'Example',\n exampleSummary: '',\n exampleDescription: '',\n exampleType: mimeType,\n exampleValue: egContent,\n exampleFormat: egFormat,\n });\n }\n // If schema-level examples are not provided or includeGeneratedExample === true then generate one based on the schema field types\n if (finalExamples.length === 0 || includeGeneratedExample === true) {\n if (schema) {\n if (schema.example) {\n // Note: Deprecated: The 'example' property has been deprecated in 3.1.0 in favor of the JSON Schema 'examples' keyword\n finalExamples.push({\n exampleId: 'Example',\n exampleSummary: '',\n exampleDescription: '',\n exampleType: mimeType,\n exampleValue: schema.example,\n exampleFormat: ((mimeType?.toLowerCase().includes('json') && typeof schema.example === 'object') ? 'json' : 'text'),\n });\n } else if (mimeType?.toLowerCase().includes('json') || mimeType?.toLowerCase().includes('text') || mimeType?.toLowerCase().includes('*/*') || mimeType?.toLowerCase().includes('xml')) {\n let xmlRootStart = '';\n let xmlRootEnd = '';\n let exampleFormat = '';\n let exampleValue = '';\n if (mimeType?.toLowerCase().includes('xml')) {\n xmlRootStart = schema.xml?.name ? `<${schema.xml.name} ${schema.xml.namespace ? `xmlns=\"${schema.xml.namespace}\"` : ''}>` : '';\n xmlRootEnd = schema.xml?.name ? `` : '';\n exampleFormat = 'text';\n } else {\n exampleFormat = outputType;\n }\n const samples = schemaToSampleObj(schema, { includeReadOnly, includeWriteOnly, deprecated: true, useXmlTagForProp: mimeType?.toLowerCase().includes('xml') });\n let i = 0;\n for (const samplesKey in samples) {\n if (!samples[samplesKey]) {\n continue;\n }\n const summary = samples[samplesKey]['::TITLE'] || `Example ${++i}`;\n const description = samples[samplesKey]['::DESCRIPTION'] || '';\n if (mimeType?.toLowerCase().includes('xml')) {\n exampleValue = `\\n${xmlRootStart}${json2xml(samples[samplesKey], 1)}\\n${xmlRootEnd}`;\n } else {\n removeTitlesAndDescriptions(samples[samplesKey]);\n exampleValue = outputType === 'text' ? JSON.stringify(samples[samplesKey], null, 2) : samples[samplesKey];\n }\n\n finalExamples.push({\n exampleId: samplesKey,\n exampleSummary: summary,\n exampleDescription: description,\n exampleType: mimeType,\n exampleFormat,\n exampleValue,\n });\n }\n } else if (mimeType?.toLowerCase().includes('jose')) {\n finalExamples.push({\n exampleId: 'Example',\n exampleSummary: 'Base64 Encoded',\n exampleDescription: '',\n exampleType: mimeType,\n exampleValue: schema.pattern || 'bXJpbg==',\n exampleFormat: 'text',\n });\n } else {\n finalExamples.push({\n exampleId: 'Example',\n exampleSummary: '',\n exampleDescription: '',\n exampleType: mimeType,\n exampleValue: '',\n exampleFormat: 'text',\n });\n }\n } else {\n // No Example or Schema provided (should never reach here)\n finalExamples.push({\n exampleId: 'Example',\n exampleSummary: '',\n exampleDescription: '',\n exampleType: mimeType,\n exampleValue: '',\n exampleFormat: 'text',\n });\n }\n }\n return finalExamples;\n}\n\nfunction getSerializeStyleForContentType(contentType) {\n if (contentType === 'application/json') {\n return 'json';\n }\n if (contentType === 'application/xml') {\n return 'xml';\n }\n return null;\n}\n\nexport function getSchemaFromParam(param) {\n if (param.schema) {\n return [param.schema, null, null];\n }\n if (param.content) {\n // we gonna use the first content-encoding\n for (const contentType of Object.keys(param.content)) {\n if (param.content[contentType].schema) {\n return [param.content[contentType].schema, getSerializeStyleForContentType(contentType), param.content[contentType]];\n }\n }\n }\n return [null, null, null];\n}\n","import { LitElement, html, css } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport FontStyles from '~/styles/font-styles';\nimport SchemaStyles from '~/styles/schema-styles';\nimport CustomStyles from '~/styles/custom-styles';\n\nexport default class SchemaTable extends LitElement {\n static get properties() {\n return {\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n schemaHideReadOnly: { type: String, attribute: 'schema-hide-read-only' },\n schemaHideWriteOnly: { type: String, attribute: 'schema-hide-write-only' },\n data: { type: Object },\n };\n }\n\n connectedCallback() {\n super.connectedCallback();\n if (!this.schemaExpandLevel || this.schemaExpandLevel < 1) { this.schemaExpandLevel = 99999; }\n if (!this.schemaDescriptionExpanded || !'true false'.includes(this.schemaDescriptionExpanded)) { this.schemaDescriptionExpanded = 'false'; }\n if (!this.schemaHideReadOnly || !'true false'.includes(this.schemaHideReadOnly)) { this.schemaHideReadOnly = 'true'; }\n if (!this.schemaHideWriteOnly || !'true false'.includes(this.schemaHideWriteOnly)) { this.schemaHideWriteOnly = 'true'; }\n }\n\n static get styles() {\n return [\n FontStyles,\n SchemaStyles,\n css`\n .table {\n font-size: var(--font-size-small);\n text-align: left;\n line-height: calc(var(--font-size-small) + 6px);\n }\n .table .tr {\n width: calc(100% - 5px);\n padding: 0 0 0 5px;\n border-bottom: 1px dotted var(--light-border-color);\n }\n .table .td {\n padding: 4px 0;\n }\n .table .key {\n width: 240px;\n }\n .key .key-label {\n font-size: var(--font-size-mono);\n }\n .key.deprecated .key-label {\n color: var(--red);\n }\n\n .table .key-type {\n white-space: normal;\n width: 150px;\n }\n .collapsed-all-descr .tr:not(.expanded-descr) {\n max-height: calc(var(--font-size-small) + var(--font-size-small));\n }\n\n .obj-toggle {\n padding: 0 2px;\n border-radius:2px;\n border: 1px solid transparent;\n display: inline-block;\n margin-left: -16px;\n color:var(--primary-color);\n cursor:pointer;\n font-size: calc(var(--font-size-small) + 4px);\n font-family: var(--font-mono);\n background-clip: border-box;\n }\n .obj-toggle:hover {\n border-color: var(--primary-color);\n }\n .tr.expanded + .object-body {\n display:block;\n }\n .tr.collapsed + .object-body {\n display:none;\n }`,\n CustomStyles,\n ];\n }\n\n /* eslint-disable indent */\n render() {\n return html`\n
    this.handleAllEvents(e)}\">\n
    \n
    ${this.data?.['::type'] || ''}
    \n ${this.allowSchemaDescriptionExpandToggle === 'true'\n ? html`\n
    \n
    \n ${this.schemaDescriptionExpanded === 'true' ? 'Single line description' : 'Multiline description'}\n
    \n `\n : ''\n }\n
    \n ${unsafeHTML(marked(this.data?.['::description'] || ''))} \n
    \n
    \n
    Field
    \n
    Type
    \n
    Description
    \n
    \n ${this.data\n ? html`\n ${this.generateTree(\n this.data['::type'] === 'array' ? this.data['::props'] : this.data,\n this.data['::type'],\n this.data['::array-type'],\n )}`\n : ''\n } \n
    \n
    \n `;\n }\n\n generateTree(data, dataType = 'object', arrayType = '', key = '', description = '', schemaLevel = 0, indentLevel = 0, readOrWrite = '', isDeprecated = false) {\n if (this.schemaHideReadOnly === 'true') {\n if (dataType === 'array') {\n if (readOrWrite === 'readonly') {\n return;\n }\n }\n if (data && data['::readwrite'] === 'readonly') {\n return;\n }\n }\n if (this.schemaHideWriteOnly === 'true') {\n if (dataType === 'array') {\n if (readOrWrite === 'writeonly') {\n return;\n }\n }\n if (data && data['::readwrite'] === 'writeonly') {\n return;\n }\n }\n if (!data) {\n return html`
    \n   \n ${key.replace('::OPTION~', '')}\n ${\n dataType === 'array'\n ? html` [ ] `\n : dataType === 'object'\n ? html` { } `\n : html` schema undefined `\n }\n
    `;\n }\n\n const newSchemaLevel = data['::type']?.startsWith('xxx-of') ? schemaLevel : (schemaLevel + 1);\n const newIndentLevel = dataType === 'xxx-of-option' || data['::type'] === 'xxx-of-option' || key.startsWith('::OPTION') ? indentLevel : (indentLevel + 1);\n const leftPadding = 16 * newIndentLevel; // 2 space indentation at each level\n if (Object.keys(data).length === 0) {\n return html`${key}`;\n }\n let keyLabel = '';\n let keyDescr = '';\n let isOneOfLabel = false;\n if (key.startsWith('::ONE~OF') || key.startsWith('::ANY~OF')) {\n keyLabel = key.replace('::', '').replace('~', ' ');\n isOneOfLabel = true;\n } else if (key.startsWith('::OPTION')) {\n const parts = key.split('~');\n keyLabel = parts[1]; // eslint-disable-line prefer-destructuring\n keyDescr = parts[2]; // eslint-disable-line prefer-destructuring\n } else {\n keyLabel = key;\n }\n\n let detailObjType = '';\n if (data['::type'] === 'object') {\n if (dataType === 'array') {\n detailObjType = 'array of object'; // Array of Object\n } else {\n detailObjType = data['::dataTypeLabel'] || data['::type'];\n }\n } else if (data['::type'] === 'array') {\n if (dataType === 'array') {\n // detailObjType = 'array of array'; // Array of array\n detailObjType = `array of array ${arrayType !== 'object' ? `of ${arrayType}` : ''}`; // Array of array\n } else {\n detailObjType = data['::dataTypeLabel'] || data['::type'];\n }\n }\n\n if (typeof data === 'object') {\n return html`\n ${newSchemaLevel >= 0 && key\n ? html`\n
    \n
    \n ${(keyLabel || keyDescr)\n ? html`\n \n ${schemaLevel < this.schemaExpandLevel ? '-' : '+'}\n `\n : ''\n }\n ${data['::type'] === 'xxx-of-option' || data['::type'] === 'xxx-of-array' || key.startsWith('::OPTION')\n ? html`${keyLabel}${keyDescr}`\n : keyLabel.endsWith('*')\n ? html`${(isDeprecated || data['::deprecated'])\n ? html``\n : ''\n } ${keyLabel.substring(0, keyLabel.length - 1)}*`\n : html`${(isDeprecated || data['::deprecated'])\n ? html``\n : ''\n } ${keyLabel === '::props' ? '' : keyLabel}`\n }\n ${data['::type'] === 'xxx-of' && dataType === 'array' ? html`ARRAY` : ''} \n
    \n
    \n ${(data['::type'] || '').includes('xxx-of') ? '' : detailObjType}\n ${data['::readwrite'] === 'readonly' ? ' 🆁' : data['::readwrite'] === 'writeonly' ? ' 🆆' : ''}\n
    \n
    ${unsafeHTML(marked(description || ''))}
    \n
    `\n : html`\n ${data['::type'] === 'array' && dataType === 'array'\n ? html`\n
    \n
    \n
    \n ${arrayType && arrayType !== 'object' ? `${dataType} of ${arrayType}` : dataType}\n
    \n
    \n
    `\n : ''\n }`\n }\n
    \n ${Array.isArray(data) && data[0]\n ? html`${this.generateTree(data[0], 'xxx-of-option', '', '::ARRAY~OF', '', newSchemaLevel, newIndentLevel, '')}`\n : html`\n ${Object.keys(data).map((dataKey) => html`\n ${['::title', '::description', '::type', '::props', '::deprecated', '::array-type', '::readwrite', '::dataTypeLabel', '::nullable'].includes(dataKey)\n ? data[dataKey]['::type'] === 'array' || data[dataKey]['::type'] === 'object'\n ? html`${this.generateTree(\n data[dataKey]['::type'] === 'array' ? data[dataKey]['::props'] : data[dataKey],\n data[dataKey]['::type'],\n data[dataKey]['::array-type'] || '',\n dataKey,\n data[dataKey]['::description'],\n newSchemaLevel,\n newIndentLevel,\n data[dataKey]['::readwrite'] ? data[dataKey]['::readwrite'] : '',\n (isDeprecated || data[dataKey]['::deprecated']),\n )}`\n : ''\n : html`${this.generateTree(\n data[dataKey]['::type'] === 'array' ? data[dataKey]['::props'] : data[dataKey],\n data[dataKey]['::type'],\n data[dataKey]['::array-type'] || '',\n dataKey,\n data[dataKey]?.['::description'] || '',\n newSchemaLevel,\n newIndentLevel,\n data[dataKey]['::readwrite'] ? data[dataKey]['::readwrite'] : '',\n (isDeprecated || data[dataKey]['::deprecated']),\n )}`\n }\n `)}\n `\n }\n
    \n `;\n }\n\n // For Primitive Data types\n // eslint-disable-next-line no-unused-vars\n const [type, readOrWriteOnly, constraint, defaultValue, allowedValues, pattern, schemaDescription, schemaTitle, deprecated] = data.split('~|~');\n if (readOrWriteOnly === '🆁' && this.schemaHideReadOnly === 'true') {\n return;\n }\n if (readOrWriteOnly === '🆆' && this.schemaHideWriteOnly === 'true') {\n return;\n }\n const dataTypeCss = type.replace(/┃.*/g, '').replace(/[^a-zA-Z0-9+]/g, '').substring(0, 4).toLowerCase();\n const descrExpander = `${constraint || defaultValue || allowedValues || pattern ? '' : ''}`;\n let dataTypeHtml = '';\n if (dataType === 'array') {\n dataTypeHtml = html` \n
    \n [${type}] ${readOrWrite === 'readonly' ? '🆁' : readOrWrite === 'writeonly' ? '🆆' : ''}\n
    `;\n } else {\n dataTypeHtml = html` \n
    \n ${type} ${readOrWriteOnly}\n
    `;\n }\n return html`\n
    \n
    \n ${isDeprecated || deprecated\n ? html``\n : ''\n }\n ${keyLabel?.endsWith('*')\n ? html`\n ${keyLabel.substring(0, keyLabel.length - 1)}\n *`\n : key.startsWith('::OPTION')\n ? html`${keyLabel}${keyDescr}`\n : html`${keyLabel ? html` ${keyLabel}` : html`${schemaTitle}`}`\n }\n
    \n ${dataTypeHtml}\n
    \n ${html`\n ${unsafeHTML(marked(dataType === 'array'\n ? `${descrExpander} ${description}`\n : schemaTitle\n ? `${descrExpander} ${schemaTitle}: ${schemaDescription}`\n : `${descrExpander} ${schemaDescription}`))}\n `\n }\n ${constraint ? html`
    Constraints: ${constraint}
    ` : ''}\n ${defaultValue ? html`
    Default: ${defaultValue}
    ` : ''}\n ${allowedValues ? html`
    ${type === 'const' ? 'Value' : 'Allowed'}: ${allowedValues}
    ` : ''}\n ${pattern ? html`
    Pattern: ${pattern}
    ` : ''}\n
    \n
    \n `;\n }\n /* eslint-enable indent */\n\n handleAllEvents(e) {\n if (e.target.classList.contains('obj-toggle')) {\n this.toggleObjectExpand(e);\n } else if (e.target.classList.contains('schema-multiline-toggle')) {\n this.schemaDescriptionExpanded = (this.schemaDescriptionExpanded === 'true' ? 'false' : 'true');\n } else if (e.target.classList.contains('descr-expand-toggle')) {\n const trEl = e.target.closest('.tr');\n if (trEl) {\n trEl.classList.toggle('expanded-descr');\n trEl.style.maxHeight = trEl.scrollHeight;\n }\n }\n }\n\n toggleObjectExpand(e) {\n const rowEl = e.target.closest('.tr');\n if (rowEl.classList.contains('expanded')) {\n rowEl.classList.add('collapsed');\n rowEl.classList.remove('expanded');\n e.target.innerText = '+';\n } else {\n rowEl.classList.remove('collapsed');\n rowEl.classList.add('expanded');\n e.target.innerText = '-';\n }\n }\n}\ncustomElements.define('schema-table', SchemaTable);\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport { rapidocApiKey } from '~/utils/common-utils';\nimport { pathSecurityTemplate } from '~/templates/security-scheme-template';\nimport codeSamplesTemplate from '~/templates/code-samples-template';\nimport callbackTemplate from '~/templates/callback-template';\nimport '~/components/api-request';\nimport '~/components/api-response';\n\n/* eslint-disable indent */\nfunction headingRenderer(tagElementId) {\n const renderer = new marked.Renderer();\n renderer.heading = ((text, level, raw, slugger) => `${text}`);\n return renderer;\n}\n\nfunction expandCollapseTagDescription(e) {\n const tagDescriptionEl = e.target.closest('.tag-container').querySelector('.tag-description');\n const tagIconEl = e.target.closest('.tag-container').querySelector('.tag-icon');\n if (tagDescriptionEl && tagIconEl) {\n const isExpanded = tagDescriptionEl.classList.contains('expanded');\n if (isExpanded) {\n tagDescriptionEl.style.maxHeight = 0;\n tagDescriptionEl.classList.replace('expanded', 'collapsed');\n tagIconEl.classList.replace('expanded', 'collapsed');\n } else {\n tagDescriptionEl.style.maxHeight = `${tagDescriptionEl.scrollHeight}px`;\n tagDescriptionEl.classList.replace('collapsed', 'expanded');\n tagIconEl.classList.replace('collapsed', 'expanded');\n }\n }\n}\n\nexport function expandedEndpointBodyTemplate(path, tagName = '', tagDescription = '') {\n const acceptContentTypes = new Set();\n for (const respStatus in path.responses) {\n for (const acceptContentType in (path.responses[respStatus]?.content)) {\n acceptContentTypes.add(acceptContentType.trim());\n }\n }\n const accept = [...acceptContentTypes].join(', ');\n\n // Filter API Keys that are non-empty and are applicable to the the path\n const nonEmptyApiKeys = this.resolvedSpec.securitySchemes.filter((v) => (v.finalKeyValue && path.security?.some((ps) => (v.securitySchemeId in ps)))) || [];\n\n // If a RapiDoc API Key is specified on the element and its value is not hyphen(-) then include it for all paths\n const rapiDocApiKey = this.resolvedSpec.securitySchemes.find((v) => (v.securitySchemeId === rapidocApiKey && v.value !== '-'));\n if (rapiDocApiKey) {\n nonEmptyApiKeys.push(rapiDocApiKey);\n }\n\n const codeSampleTabPanel = path.xCodeSamples ? codeSamplesTemplate.call(this, path.xCodeSamples) : '';\n return html`\n ${this.renderStyle === 'read' ? html`
    ` : ''}\n
    \n ${(this.renderStyle === 'focused' && tagName !== 'General ⦂')\n ? html`\n
    \n ${tagName} \n ${tagDescription\n ? html`\n { expandCollapseTagDescription.call(this, e); }}\"\n >\n \n \n
    \n
    ${unsafeHTML(marked(tagDescription))}
    \n
    `\n : ''\n } \n
    \n `\n : ''\n }\n ${path.deprecated ? html`
    DEPRECATED
    ` : ''}\n ${html`\n ${path.xBadges && path.xBadges?.length > 0\n ? html`\n
    \n ${path.xBadges.map((v) => (\n v.color === 'none'\n ? ''\n : html`${v.label}`\n ))\n }\n
    \n `\n : ''\n }\n

    ${path.shortSummary || `${path.method.toUpperCase()} ${path.path}`}

    \n ${path.isWebhook\n ? html` WEBHOOK `\n : html`\n
    \n ${path.method} \n ${path.path}\n
    \n `\n }\n `\n }\n ${path.description ? html`
    ${unsafeHTML(marked(path.description))}
    ` : ''}\n ${pathSecurityTemplate.call(this, path.security)}\n ${path.externalDocs?.url || path.externalDocs?.description\n ? html`
    \n
    ${unsafeHTML(marked(path.externalDocs?.description || ''))}
    \n ${path.externalDocs?.url\n ? html`\n ${path.externalDocs?.url}
    \n
    `\n : ''\n }\n
    `\n : ''\n }\n ${codeSampleTabPanel}\n
    \n \n\n ${path.callbacks ? callbackTemplate.call(this, path.callbacks) : ''}\n\n \n
    \n
    \n `;\n}\n\nexport default function expandedEndpointTemplate() {\n if (!this.resolvedSpec) { return ''; }\n return html`\n ${this.resolvedSpec.tags.map((tag) => html`\n
    \n
    ${tag.displayName || tag.name}
    \n \n
    \n ${\n unsafeHTML(`\n
    \n ${marked(tag.description || '', this.infoDescriptionHeadingsInNavBar === 'true' ? { renderer: headingRenderer(tag.elementId) } : undefined)}\n
    `)\n }\n
    \n
    \n
    \n ${tag.paths.map((path) => expandedEndpointBodyTemplate.call(this, path))}\n
    \n `)\n }\n`;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport { schemaInObjectNotation } from '~/utils/schema-utils';\nimport '~/components/json-tree';\nimport '~/components/schema-tree';\nimport '~/components/schema-table';\n\nfunction schemaBodyTemplate(sComponent) {\n return html`\n
    \n
    \n
    ${sComponent.name} Schema
    \n ${this.schemaStyle === 'table'\n ? html`\n `\n : html`\n `\n}\n
    `;\n}\n\nfunction componentBodyTemplate(sComponent, componentType) {\n if (sComponent.id.indexOf('schemas-') !== -1) {\n return schemaBodyTemplate.call(this, sComponent);\n }\n return html`\n
    \n
    \n ${html`\n
    ${sComponent.name} ${componentType}
    \n ${sComponent.component\n ? html`\n
    \n \n
    `\n : ''}\n `}\n
    \n `;\n}\n\nexport default function componentsTemplate() {\n if (!this.resolvedSpec) { return ''; }\n return html`\n ${this.resolvedSpec.components.map((component) => html`\n
    \n
    ${component.name}
    \n
    \n ${unsafeHTML(`
    ${marked(component.description ? component.description : '')}
    `)}\n
    \n
    \n
    \n ${component.subComponents.filter((c) => c.expanded !== false).map((sComponent) => componentBodyTemplate.call(this, sComponent, component.name))}\n
    \n `)\n}\n`;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport { downloadResource, viewResource } from '~/utils/common-utils';\n\n/* eslint-disable indent */\nfunction headingRenderer() {\n const renderer = new marked.Renderer();\n renderer.heading = ((text, level, raw, slugger) => `${text}`);\n return renderer;\n}\n\nexport default function overviewTemplate() {\n return html`\n
    \n ${this.resolvedSpec?.info\n ? html`\n
    \n ${this.resolvedSpec.info.title}\n ${!this.resolvedSpec.info.version ? '' : html`\n \n ${this.resolvedSpec.info.version}\n `\n }\n
    \n
    \n ${this.resolvedSpec.info.contact?.email\n ? html`${this.resolvedSpec.info.contact.name || 'Email'}: \n ${this.resolvedSpec.info.contact.email}\n `\n : ''\n }\n ${this.resolvedSpec.info.contact?.url\n ? html`URL: ${this.resolvedSpec.info.contact.url}`\n : ''\n }\n ${this.resolvedSpec.info.license\n ? html`License: \n ${this.resolvedSpec.info.license.url\n ? html`${this.resolvedSpec.info.license.name}`\n : this.resolvedSpec.info.license.name\n } `\n : ''\n }\n ${this.resolvedSpec.info.termsOfService\n ? html`Terms of Service`\n : ''\n }\n ${this.specUrl && this.allowSpecFileDownload === 'true'\n ? html`\n
    \n \n ${this.specUrl?.trim().toLowerCase().endsWith('json')\n ? html``\n : ''\n }\n
    `\n : ''\n }\n
    \n \n
    \n ${this.resolvedSpec.info.description\n ? html`${\n unsafeHTML(`\n
    \n ${marked(this.resolvedSpec.info.description, this.infoDescriptionHeadingsInNavBar === 'true' ? { renderer: headingRenderer() } : undefined)}\n
    `)}`\n : ''\n }\n
    \n `\n : ''\n }\n
    \n `;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\n\nexport function setApiServer(serverUrl) {\n const serverObj = this.resolvedSpec?.servers.find((s) => s.url === serverUrl);\n if (!serverObj) {\n return false;\n }\n this.selectedServer = serverObj;\n this.requestUpdate();\n this.dispatchEvent(new CustomEvent('api-server-change', {\n bubbles: true,\n composed: true,\n detail: {\n selectedServer: serverObj,\n },\n }));\n return true;\n}\n\nfunction onApiServerVarChange(e, serverObj) {\n const inputEls = [...e.currentTarget.closest('table').querySelectorAll('input, select')];\n let tempUrl = serverObj.url;\n inputEls.forEach((v) => {\n const regex = new RegExp(`{${v.dataset.var}}`, 'g');\n tempUrl = tempUrl.replace(regex, v.value);\n });\n serverObj.computedUrl = tempUrl;\n this.requestUpdate();\n}\n\n/* eslint-disable indent */\nfunction serverVarsTemplate() {\n // const selectedServerObj = this.resolvedSpec.servers.find((v) => (v.url === this.selectedServer));\n return this.selectedServer && this.selectedServer.variables\n ? html`\n
    SERVER VARIABLES
    \n \n ${Object.entries(this.selectedServer.variables).map((kv) => html`\n \n \n \n \n ${kv[1].description\n ? html``\n : ''\n }\n `)}\n \n `\n : '';\n}\n\nexport default function serverTemplate() {\n if (!this.resolvedSpec || this.resolvedSpec.specLoadError) { return ''; }\n return html`\n
    \n
    API SERVER
    \n
    \n ${!this.resolvedSpec.servers || this.resolvedSpec.servers?.length === 0\n ? ''\n : html`\n ${this.resolvedSpec?.servers.map((server, i) => html`\n { setApiServer.call(this, server.url); }}\n .checked = '${this.selectedServer.url === server.url}'\n style = 'margin:4px 0; cursor:pointer'\n />\n \n
    \n `)}\n `}\n
    SELECTED: ${this.selectedServer?.computedUrl || 'none'}
    \n
    \n \n ${serverVarsTemplate.call(this)}\n
    `;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { marked } from 'marked';\nimport { getMatchedPaths } from '~/utils/common-utils';\n\nexport function expandCollapseNavBarTag(navLinkEl, action = 'toggle') {\n const tagAndPathEl = navLinkEl?.closest('.nav-bar-tag-and-paths');\n const pathsUnderTagEl = tagAndPathEl?.querySelector('.nav-bar-paths-under-tag');\n if (tagAndPathEl) {\n const isExpanded = tagAndPathEl.classList.contains('expanded');\n if (isExpanded && (action === 'toggle' || action === 'collapse')) {\n pathsUnderTagEl.style.maxHeight = 0;\n tagAndPathEl.classList.replace('expanded', 'collapsed');\n } else if (!isExpanded && (action === 'toggle' || action === 'expand')) {\n tagAndPathEl.classList.replace('collapsed', 'expanded');\n pathsUnderTagEl.style.maxHeight = `${pathsUnderTagEl.scrollHeight}px`;\n }\n }\n}\n\nexport function expandCollapseAll(event, action = 'expand-all') {\n if (!(event.type === 'click' || (event.type === 'keyup' && event.keyCode === 13))) {\n return;\n }\n const navEl = event.target.closest('.nav-scroll');\n const elList = [...navEl.querySelectorAll('.nav-bar-tag-and-paths')];\n if (action === 'expand-all') {\n elList.forEach((el) => {\n const navBarPathsUnderTagEl = el.querySelector('.nav-bar-paths-under-tag');\n el.classList.replace('collapsed', 'expanded');\n navBarPathsUnderTagEl.style.maxHeight = `${navBarPathsUnderTagEl?.scrollHeight}px`;\n });\n } else {\n elList.forEach((el) => {\n el.classList.replace('expanded', 'collapsed');\n el.querySelector('.nav-bar-paths-under-tag').style.maxHeight = 0;\n });\n }\n}\n\nexport function navBarClickAndEnterHandler(event) {\n if (!(event.type === 'click' || (event.type === 'keyup' && event.keyCode === 13))) {\n return;\n }\n const navEl = event.target;\n event.stopPropagation();\n if (navEl.dataset?.action === 'navigate') {\n this.scrollToEventTarget(event, false);\n } else if (navEl.dataset?.action === 'expand-all' || (navEl.dataset?.action === 'collapse-all')) {\n expandCollapseAll(event, navEl.dataset.action);\n } else if (navEl.dataset?.action === 'expand-collapse-tag') {\n expandCollapseNavBarTag(navEl, 'toggle');\n }\n}\n\n/* eslint-disable indent */\nexport default function navbarTemplate() {\n if (!this.resolvedSpec || this.resolvedSpec.specLoadError) {\n return html`\n \n `;\n }\n return html`\n \n`;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport { expandedEndpointBodyTemplate } from '~/templates/expanded-endpoint-template';\nimport '~/components/api-request';\nimport '~/components/api-response';\nimport componentsTemplate from '~/templates/components-template';\nimport overviewTemplate from '~/templates/overview-template';\nimport serverTemplate from '~/templates/server-template';\nimport securitySchemeTemplate from '~/templates/security-scheme-template';\nimport { expandCollapseNavBarTag } from '~/templates/navbar-template';\n\nfunction headingRenderer(tagElementId) {\n const renderer = new marked.Renderer();\n renderer.heading = ((text, level, raw, slugger) => `${text}`);\n return renderer;\n}\n\nfunction wrapFocusedTemplate(templateToWrap) {\n return html`\n
    \n ${templateToWrap}\n
    `;\n}\n\nfunction defaultContentTemplate() {\n // In focused mode default content is overview or first path\n if (this.showInfo === 'true') {\n return wrapFocusedTemplate(overviewTemplate.call(this));\n }\n const selectedTagObj = this.resolvedSpec.tags[0];\n const selectedPathObj = this.resolvedSpec.tags[0]?.paths[0];\n return (selectedTagObj && selectedPathObj)\n ? wrapFocusedTemplate(expandedEndpointBodyTemplate.call(this, selectedPathObj, selectedTagObj.name))\n : wrapFocusedTemplate('');\n}\n\n/* eslint-disable indent */\nfunction focusedTagBodyTemplate(tag) {\n return html`\n

    ${tag.displayName || tag.name}

    \n ${this.onNavTagClick === 'show-description' && tag.description\n ? html`\n
    \n ${\n unsafeHTML(`\n
    \n ${marked(tag.description || '', this.infoDescriptionHeadingsInNavBar === 'true' ? { renderer: headingRenderer(tag.elementId) } : undefined)}\n
    `)\n }\n
    `\n : ''\n }\n `;\n}\n\nexport default function focusedEndpointTemplate() {\n if (!this.focusedElementId || !this.resolvedSpec) {\n return;\n }\n const focusElId = this.focusedElementId;\n let selectedPathObj = null;\n let selectedTagObj = null;\n let focusedTemplate;\n let i = 0;\n if (focusElId.startsWith('overview') && this.showInfo === 'true') {\n focusedTemplate = overviewTemplate.call(this);\n } else if (focusElId === 'auth' && this.allowAuthentication === 'true') {\n focusedTemplate = securitySchemeTemplate.call(this, this.allowTry);\n } else if (focusElId === 'servers' && this.allowServerSelection === 'true') {\n focusedTemplate = serverTemplate.call(this);\n } else if (focusElId === 'operations-top') {\n focusedTemplate = html`\n
    \n \n
    `;\n } else if (focusElId.startsWith('cmp--') && this.showComponents === 'true') {\n focusedTemplate = componentsTemplate.call(this);\n } else if (focusElId.startsWith('tag--')) {\n const idToFocus = focusElId.indexOf('--', 4) > 0 ? focusElId.substring(0, focusElId.indexOf('--', 5)) : focusElId;\n selectedTagObj = this.resolvedSpec.tags.find((v) => v.elementId === idToFocus);\n if (selectedTagObj) {\n focusedTemplate = wrapFocusedTemplate.call(this, focusedTagBodyTemplate.call(this, selectedTagObj));\n } else {\n focusedTemplate = defaultContentTemplate.call(this);\n }\n } else {\n for (i = 0; i < this.resolvedSpec.tags.length; i += 1) {\n selectedTagObj = this.resolvedSpec.tags[i];\n selectedPathObj = this.resolvedSpec.tags[i].paths.find((v) => `${v.elementId}` === focusElId);\n if (selectedPathObj) {\n break;\n }\n }\n if (selectedPathObj) {\n // In focused mode we must expand the nav-bar tag element if it is collapsed\n const newNavEl = this.shadowRoot.getElementById(`link-${focusElId}`);\n expandCollapseNavBarTag(newNavEl, 'expand');\n focusedTemplate = wrapFocusedTemplate.call(\n this,\n expandedEndpointBodyTemplate.call(this, selectedPathObj, (selectedTagObj.name || ''), (selectedTagObj.description || '')),\n );\n } else {\n // if focusedElementId is not found then show the default content (overview or first-path)\n focusedTemplate = defaultContentTemplate.call(this);\n }\n }\n return focusedTemplate;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport '~/components/api-request';\nimport '~/components/api-response';\nimport codeSamplesTemplate from '~/templates/code-samples-template';\nimport callbackTemplate from '~/templates/callback-template';\nimport { pathSecurityTemplate } from '~/templates/security-scheme-template';\nimport { getMatchedPaths, rapidocApiKey } from '~/utils/common-utils';\n\nfunction toggleExpand(path) {\n if (path.expanded) {\n path.expanded = false; // collapse\n if (this.updateRoute === 'true') {\n this.replaceHistoryState('');\n }\n } else {\n path.expanded = true; // Expand\n if (this.updateRoute === 'true') {\n const newHash = `${this.routePrefix || '#'}${path.elementId}`;\n if (window.location.hash !== newHash) {\n this.replaceHistoryState(path.elementId);\n }\n }\n }\n this.requestUpdate();\n}\n\nexport function expandCollapseAll(operationsRootEl, action = 'expand-all') {\n const elList = [...operationsRootEl.querySelectorAll('.section-tag')];\n if (action === 'expand-all') {\n elList.map((el) => {\n el.classList.replace('collapsed', 'expanded');\n });\n } else {\n elList.map((el) => {\n el.classList.replace('expanded', 'collapsed');\n });\n }\n}\n\nfunction onExpandCollapseAll(e, action = 'expand-all') {\n expandCollapseAll.call(this, e.target.closest('.operations-root'), action);\n}\n\n/* eslint-disable indent */\nfunction endpointHeadTemplate(path, pathsExpanded = false) {\n return html`\n { toggleExpand.call(this, path, e); }}\" part=\"section-endpoint-head-${path.expanded ? 'expanded' : 'collapsed'}\" class='endpoint-head ${path.method} ${path.deprecated ? 'deprecated' : ''} ${pathsExpanded || path.expanded ? 'expanded' : 'collapsed'}'>\n
    ${path.method}
    \n
    \n ${path.path} \n ${path.isWebhook ? html` Webhook` : ''}\n
    \n ${path.deprecated\n ? html`\n \n deprecated \n `\n : ''\n }\n ${this.showSummaryWhenCollapsed\n ? html`\n
    \n
    ${path.summary || path.shortSummary}
    `\n : ''\n }\n
    \n `;\n}\n\nfunction endpointBodyTemplate(path) {\n const acceptContentTypes = new Set();\n for (const respStatus in path.responses) {\n for (const acceptContentType in (path.responses[respStatus]?.content)) {\n acceptContentTypes.add(acceptContentType.trim());\n }\n }\n const accept = [...acceptContentTypes].join(', ');\n // Filter API Keys that are non-empty and are applicable to the the path\n const nonEmptyApiKeys = this.resolvedSpec.securitySchemes.filter((v) => (v.finalKeyValue && path.security?.some((ps) => (v.securitySchemeId in ps)))) || [];\n\n // If a RapiDoc API Key is specified on the element and its value is not hyphen(-) then include it for all paths\n const rapiDocApiKey = this.resolvedSpec.securitySchemes.find((v) => (v.securitySchemeId === rapidocApiKey && v.value !== '-'));\n if (rapiDocApiKey) {\n nonEmptyApiKeys.push(rapiDocApiKey);\n }\n\n const codeSampleTabPanel = path.xCodeSamples ? codeSamplesTemplate(path.xCodeSamples) : '';\n return html`\n
    \n
    \n ${path.summary\n ? html`
    ${path.summary}
    `\n : path.shortSummary !== path.description\n ? html`
    ${path.shortSummary}
    `\n : ''\n }\n ${path.xBadges && path.xBadges?.length > 0\n ? html`\n
    \n ${path.xBadges.map((v) => (\n v.color === 'none'\n ? ''\n : html`${v.label}`\n ))\n }\n
    \n `\n : ''\n }\n\n ${path.description ? html`
    ${unsafeHTML(marked(path.description))}
    ` : ''}\n ${path.externalDocs?.url || path.externalDocs?.description\n ? html`
    \n
    ${unsafeHTML(marked(path.externalDocs?.description || ''))}
    \n ${path.externalDocs?.url\n ? html` \n ${path.externalDocs?.url}
    \n
    `\n : ''\n }\n
    `\n : ''\n }\n \n ${pathSecurityTemplate.call(this, path.security)}\n ${codeSampleTabPanel}\n
    \n
    \n
    \n 0 ? path.servers[0].url : this.selectedServer?.computedUrl}\" \n active-schema-tab = \"${this.defaultSchemaTab}\"\n fill-request-fields-with-example = \"${this.fillRequestFieldsWithExample}\"\n allow-try = \"${this.allowTry}\"\n show-curl-before-try = \"${this.showCurlBeforeTry}\"\n accept = \"${accept}\"\n render-style=\"${this.renderStyle}\" \n schema-style = \"${this.schemaStyle}\" \n schema-expand-level = \"${this.schemaExpandLevel}\"\n schema-description-expanded = \"${this.schemaDescriptionExpanded}\"\n allow-schema-description-expand-toggle = \"${this.allowSchemaDescriptionExpandToggle}\"\n schema-hide-read-only = \"${this.schemaHideReadOnly === 'never' ? 'false' : path.isWebhook ? 'false' : 'true'}\"\n schema-hide-write-only = \"${this.schemaHideWriteOnly === 'never' ? 'false' : path.isWebhook ? 'true' : 'false'}\"\n fetch-credentials = \"${this.fetchCredentials}\"\n exportparts = \"wrap-request-btn:wrap-request-btn, btn:btn, btn-fill:btn-fill, btn-outline:btn-outline, btn-try:btn-try, btn-clear:btn-clear, btn-clear-resp:btn-clear-resp,\n tab-panel:tab-panel, tab-btn:tab-btn, tab-btn-row:tab-btn-row, tab-coontent:tab-content, \n file-input:file-input, textbox:textbox, textbox-param:textbox-param, textarea:textarea, textarea-param:textarea-param, \n anchor:anchor, anchor-param-example:anchor-param-example, schema-description:schema-description, schema-multiline-toggle:schema-multiline-toggle\"\n > \n\n ${path.callbacks ? callbackTemplate.call(this, path.callbacks) : ''}\n
    \n\n \n
    \n
    `;\n}\n\nexport default function endpointTemplate(isMini = false, pathsExpanded = false) {\n if (!this.resolvedSpec) { return ''; }\n return html`\n ${isMini\n ? ''\n : html`\n
    \n onExpandCollapseAll(e, 'expand-all')}\" style=\"color:var(--primary-color); cursor:pointer;\">\n Expand all\n \n  |  \n onExpandCollapseAll(e, 'collapse-all')}\" style=\"color:var(--primary-color); cursor:pointer;\" >\n Collapse all\n \n   sections\n
    `\n }\n ${this.resolvedSpec.tags.map((tag) => html`\n ${isMini\n ? html`\n \n `\n : html` \n \n `\n }\n `)\n }`;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\n\n/* eslint-disable indent */\nexport default function logoTemplate(style) {\nreturn html`\n
    \n \n \n \n \n \n \n \n \n
    \n`;\n}\n/* eslint-enable indent */\n","import { html } from 'lit';\nimport logoTemplate from '~/templates/logo-template';\n\n/* eslint-disable indent */\nexport default function headerTemplate() {\n return html`\n
    \n
    \n \n ${logoTemplate('height:36px;width:36px;margin-left:5px')}\n \n \n
    ${this.headingText}
    \n
    \n
    \n ${(this.allowSpecUrlLoad === 'false')\n ? ''\n : html`\n \n
    \n `\n } \n ${(this.allowSpecFileLoad === 'false')\n ? ''\n : html`\n \n \n `\n }\n \n ${(this.allowSearch === 'false' || 'read focused'.includes(this.renderStyle))\n ? ''\n : html` \n \n
    \n `\n }\n \n ${(this.allowAdvancedSearch === 'false' || 'read focused'.includes(this.renderStyle))\n ? ''\n : html`\n \n `\n }\n
    \n
    `;\n }\n/* eslint-enable indent */\n","import { LitElement, html, css } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\nimport { schemaInObjectNotation, generateExample, standardizeExample } from '~/utils/schema-utils';\nimport FontStyles from '~/styles/font-styles';\nimport FlexStyles from '~/styles/flex-styles';\nimport TableStyles from '~/styles/table-styles';\nimport InputStyles from '~/styles/input-styles';\nimport TabStyles from '~/styles/tab-styles';\nimport BorderStyles from '~/styles/border-styles';\nimport CustomStyles from '~/styles/custom-styles';\nimport '~/components/json-tree';\nimport '~/components/schema-tree';\nimport '~/components/schema-table';\n\nexport default class ApiResponse extends LitElement {\n constructor() {\n super();\n this.selectedStatus = '';\n this.headersForEachRespStatus = {};\n this.mimeResponsesForEachStatus = {};\n this.activeSchemaTab = 'schema';\n }\n\n static get properties() {\n return {\n callback: { type: String },\n webhook: { type: String },\n responses: { type: Object },\n parser: { type: Object },\n schemaStyle: { type: String, attribute: 'schema-style' },\n renderStyle: { type: String, attribute: 'render-style' },\n selectedStatus: { type: String, attribute: 'selected-status' },\n selectedMimeType: { type: String, attribute: 'selected-mime-type' },\n activeSchemaTab: { type: String, attribute: 'active-schema-tab' },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n schemaHideReadOnly: { type: String, attribute: 'schema-hide-read-only' },\n schemaHideWriteOnly: { type: String, attribute: 'schema-hide-write-only' },\n };\n }\n\n static get styles() {\n return [\n FontStyles,\n FlexStyles,\n TabStyles,\n TableStyles,\n InputStyles,\n BorderStyles,\n css`\n :where(button, input[type=\"checkbox\"], [tabindex=\"0\"]):focus-visible { box-shadow: var(--focus-shadow); }\n :where(input[type=\"text\"], input[type=\"password\"], select, textarea):focus-visible { border-color: var(--primary-color); }\n .resp-head{\n vertical-align: middle;\n padding:16px 0 8px;\n }\n .resp-head.divider{\n border-top: 1px solid var(--border-color);\n margin-top:10px;\n }\n .resp-status{ \n font-weight:bold;\n font-size:calc(var(--font-size-small) + 1px);\n }\n .resp-descr{\n font-size:calc(var(--font-size-small) + 1px);\n color:var(--light-fg);\n text-align:left;\n }\n .top-gap{margin-top:16px;}\n .example-panel{\n font-size:var(--font-size-small);\n margin:0;\n }\n .focused-mode,\n .read-mode {\n padding-top:24px;\n margin-top:12px;\n border-top: 1px dashed var(--border-color);\n }`,\n CustomStyles,\n ];\n }\n\n render() {\n return html`\n
    \n
    \n ${this.callback === 'true' ? 'CALLBACK RESPONSE' : 'RESPONSE'}\n
    \n
    \n ${this.responseTemplate()}\n
    \n
    \n `;\n }\n\n resetSelection() {\n this.selectedStatus = '';\n this.selectedMimeType = '';\n }\n\n /* eslint-disable indent */\n responseTemplate() {\n if (!this.responses) { return ''; }\n for (const statusCode in this.responses) {\n if (!this.selectedStatus) {\n this.selectedStatus = statusCode;\n }\n const allMimeResp = {};\n for (const mimeResp in this.responses[statusCode]?.content) {\n const mimeRespObj = this.responses[statusCode].content[mimeResp];\n if (!this.selectedMimeType) {\n this.selectedMimeType = mimeResp;\n }\n // Generate Schema\n const schemaTree = schemaInObjectNotation(mimeRespObj.schema, {});\n // Generate Example\n const respExamples = generateExample(\n mimeRespObj.schema,\n mimeResp,\n standardizeExample(mimeRespObj.examples),\n standardizeExample(mimeRespObj.example),\n this.callback === 'true' || this.webhook === 'true' ? false : true, // eslint-disable-line no-unneeded-ternary\n this.callback === 'true' || this.webhook === 'true' ? true : false, // eslint-disable-line no-unneeded-ternary\n mimeResp.includes('json') ? 'json' : 'text',\n );\n allMimeResp[mimeResp] = {\n description: this.responses[statusCode].description,\n examples: respExamples,\n selectedExample: respExamples[0]?.exampleId || '',\n schemaTree,\n };\n }\n // Headers for each response status\n const tempHeaders = [];\n for (const key in this.responses[statusCode]?.headers) {\n tempHeaders.push({ name: key, ...this.responses[statusCode].headers[key] });\n }\n this.headersForEachRespStatus[statusCode] = tempHeaders;\n this.mimeResponsesForEachStatus[statusCode] = allMimeResp;\n }\n return html`\n ${Object.keys(this.responses).length > 1\n ? html`
    \n ${Object.keys(this.responses).map((respStatus) => html`\n ${respStatus === '$$ref' // Swagger-Client parser creates '$$ref' object if JSON references are used to create responses - this should be ignored\n ? ''\n : html`\n `\n }`)\n }
    `\n : html`${Object.keys(this.responses)[0]}`\n }\n\n ${Object.keys(this.responses).map((status) => html`\n
    \n
    \n ${unsafeHTML(marked(this.responses[status]?.description || ''))}\n ${(this.headersForEachRespStatus[status] && this.headersForEachRespStatus[status]?.length > 0)\n ? html`${this.responseHeaderListTemplate(this.headersForEachRespStatus[status])}`\n : ''\n }\n
    \n ${Object.keys(this.mimeResponsesForEachStatus[status]).length === 0\n ? ''\n : html` \n
    \n
    { if (e.target.tagName.toLowerCase() === 'button') { this.activeSchemaTab = e.target.dataset.tab; } }}\" >\n \n \n
    \n ${Object.keys(this.mimeResponsesForEachStatus[status]).length === 1\n ? html` ${Object.keys(this.mimeResponsesForEachStatus[status])[0]} `\n : html`${this.mimeTypeDropdownTemplate(Object.keys(this.mimeResponsesForEachStatus[status]))}`\n }\n
    \n ${this.activeSchemaTab === 'example'\n ? html`
    \n ${this.mimeExampleTemplate(this.mimeResponsesForEachStatus[status][this.selectedMimeType])}\n
    `\n : html`
    \n ${this.mimeSchemaTemplate(this.mimeResponsesForEachStatus[status][this.selectedMimeType])}\n
    `\n }\n
    \n `\n }
    `)\n }\n `;\n }\n\n responseHeaderListTemplate(respHeaders) {\n return html`\n
    RESPONSE HEADERS
    \n \n ${respHeaders.map((v) => html`\n \n \n \n \n \n \n `)}\n
    \n ${v.name || ''}\n \n ${v.schema?.type || ''}\n \n
    ${unsafeHTML(marked(v.description || ''))}
    \n
    \n ${v.schema?.example || ''}\n
    `;\n }\n\n mimeTypeDropdownTemplate(mimeTypes) {\n return html`\n `;\n }\n\n onSelectExample(e) {\n const exampleContainerEl = e.target.closest('.example-panel');\n const exampleEls = [...exampleContainerEl.querySelectorAll('.example')];\n\n exampleEls.forEach((v) => {\n v.style.display = v.dataset.example === e.target.value ? 'block' : 'none';\n });\n }\n\n mimeExampleTemplate(mimeRespDetails) {\n if (!mimeRespDetails) {\n return html`\n
     No example provided 
    \n `;\n }\n return html`\n ${mimeRespDetails.examples.length === 1\n ? html`\n ${mimeRespDetails.examples[0].exampleFormat === 'json'\n ? html`\n ${mimeRespDetails.examples[0].exampleSummary && mimeRespDetails.examples[0].exampleSummary.length > 80 ? html`
    ${mimeRespDetails.examples[0].exampleSummary}
    ` : ''}\n ${mimeRespDetails.examples[0].exampleDescription ? html`
    ${unsafeHTML(marked(mimeRespDetails.examples[0].exampleDescription || ''))}
    ` : ''}\n `\n : html`\n ${mimeRespDetails.examples[0].exampleSummary && mimeRespDetails.examples[0].exampleSummary.length > 80 ? html`
    ${mimeRespDetails.examples[0].exampleSummary}
    ` : ''}\n ${mimeRespDetails.examples[0].exampleDescription ? html`
    ${unsafeHTML(marked(mimeRespDetails.examples[0].exampleDescription || ''))}
    ` : ''}\n
    ${mimeRespDetails.examples[0].exampleValue}
    \n `\n }`\n : html`\n \n \n ${mimeRespDetails.examples.map((v) => html`\n
    \n ${v.exampleSummary && v.exampleSummary.length > 80 ? html`
    ${v.exampleSummary}
    ` : ''}\n ${v.exampleDescription ? html`
    ${unsafeHTML(marked(v.exampleDescription || ''))}
    ` : ''}\n ${v.exampleFormat === 'json'\n ? html`\n `\n : html`
    ${v.exampleValue}
    `\n }\n
    \n `)}\n
    \n `\n }\n `;\n }\n\n mimeSchemaTemplate(mimeRespDetails) {\n if (!mimeRespDetails) {\n return html`\n
     Schema not found
    \n `;\n }\n return html`\n ${this.schemaStyle === 'table'\n ? html`\n `\n : html`\n `\n }`;\n }\n /* eslint-enable indent */\n}\n\n// Register the element with the browser\ncustomElements.define('api-response', ApiResponse);\n","import { html } from 'lit';\nimport '~/components/dialog-box';\n\n/* eslint-disable indent */\nexport default function searchByPropertiesModalTemplate() {\n document.addEventListener('close', () => { this.showAdvancedSearchDialog = false; });\n document.addEventListener('open', this.onOpenSearchDialog);\n\n return html`\n \n \n this.onAdvancedSearch(e, 400)}\"\n >\n
    \n
    \n this.onAdvancedSearch(e, 0)}\">\n \n
    \n
    \n this.onAdvancedSearch(e, 0)}\">\n \n
    \n
    \n this.onAdvancedSearch(e, 0)}\">\n \n
    \n
    \n this.onAdvancedSearch(e, 0)}\">\n \n
    \n
    \n this.onAdvancedSearch(e, 0)}\">\n \n
    \n
    \n
    \n \n ${this.advancedSearchMatches?.map((path) => html`\n {\n this.searchVal = ''; // clear quick filter if applied\n this.showAdvancedSearchDialog = false; // Hide Search Dialog\n this.requestUpdate();\n this.scrollToEventTarget(e, true);\n }\n }\"\n > \n ${path.method} \n ${path.path}\n ${path.summary}\n \n `)\n }\n
    \n `;\n}\n/* eslint-enable indent */\n","import { LitElement, html } from 'lit';\nimport DialogBoxStyles from '~/styles/dialog-box-styles';\n\nexport default class DialogBox extends LitElement {\n static get properties() {\n return {\n heading: { type: String, attribute: 'heading' },\n show: { type: String, attribute: 'show' },\n };\n }\n\n static get styles() {\n return [DialogBoxStyles];\n }\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('keydown', (e) => {\n if (e.code === 'Escape') {\n this.onClose();\n }\n });\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (oldVal !== newVal) {\n if (name === 'heading') {\n this.heading = newVal;\n }\n if (name === 'show') {\n this.show = newVal;\n if (newVal === 'true') {\n document.dispatchEvent(new CustomEvent('open', {\n bubbles: true,\n composed: true,\n detail: this,\n }));\n }\n }\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n\n /* eslint-disable indent */\n render() {\n return html`\n ${this.show === 'true'\n ? html`\n
    \n
    \n
    \n ${this.heading}\n \n
    \n
    \n \n
    \n
    \n
    `\n : ''\n }`;\n }\n /* eslint-enable indent */\n\n onClose() {\n document.dispatchEvent(new CustomEvent('close', {\n bubbles: true,\n composed: true,\n }));\n }\n}\n\ncustomElements.define('dialog-box', DialogBox);\n","import { html } from 'lit';\nimport ColorUtils from '~/utils/color-utils';\n/* Generates an schema object containing type and constraint info */\nexport default function setTheme(baseTheme, theme = {}) {\n let newTheme = {};\n\n // Common Theme colors\n const primaryColor = theme.primaryColor ? theme.primaryColor : baseTheme === 'dark' ? '#f76b39' : '#ff591e';\n const primaryColorInvert = ColorUtils.color.invert(primaryColor);\n const primaryColorTrans = ColorUtils.color.opacity(primaryColor, '0.4');\n\n // Dark and Light Theme colors\n if (baseTheme === 'dark') {\n const bg1 = theme.bg1 ? theme.bg1 : '#2a2b2c';\n const fg1 = theme.fg1 ? theme.fg1 : '#bbb';\n\n const bg2 = theme.bg2 ? theme.bg2 : ColorUtils.color.brightness(bg1, 5); // or #383838;\n const bg3 = theme.bg3 ? theme.bg3 : ColorUtils.color.brightness(bg1, 17); // or #444;\n const lightBg = theme.bg3 ? theme.bg3 : ColorUtils.color.brightness(bg1, 35);\n const fg2 = theme.fg2 ? theme.fg2 : ColorUtils.color.brightness(fg1, -15); // or #ababab\n const fg3 = theme.fg3 ? theme.fg3 : ColorUtils.color.brightness(fg1, -20); // or #aaa\n const lightFg = theme.fg3 ? theme.fg3 : ColorUtils.color.brightness(fg1, -65); // or #777\n const inlineCodeFg = theme.inlineCodeFg ? theme.inlineCodeFg : '#aaa';\n const selectionBg = fg2;\n const selectionFg = bg2;\n\n const headerColor = theme.headerColor ? theme.headerColor : ColorUtils.color.brightness(bg1, 10);\n\n const navBgColor = theme.navBgColor ? theme.navBgColor : ColorUtils.color.brightness(bg1, 10);\n const navTextColor = theme.navTextColor ? theme.navTextColor : ColorUtils.color.opacity(ColorUtils.color.invert(navBgColor), '0.50');\n const navHoverBgColor = theme.navHoverBgColor ? theme.navHoverBgColor : ColorUtils.color.brightness(navBgColor, -15);\n const navHoverTextColor = theme.navHoverTextColor ? theme.navHoverTextColor : ColorUtils.color.invert(navBgColor);\n const navAccentColor = theme.navAccentColor ? theme.navAccentColor : ColorUtils.color.brightness(primaryColor, 25);\n const navAccentTextColor = theme.navAccentTextColor ? theme.navAccenttextColor : ColorUtils.color.invert(navAccentColor);\n\n const overlayBg = 'rgba(80, 80, 80, 0.4)';\n\n newTheme = {\n bg1,\n bg2,\n bg3,\n lightBg,\n fg1,\n fg2,\n fg3,\n lightFg,\n inlineCodeFg,\n primaryColor,\n primaryColorTrans,\n primaryColorInvert,\n selectionBg,\n selectionFg,\n overlayBg,\n navBgColor,\n navTextColor,\n navHoverBgColor,\n navHoverTextColor,\n navAccentColor,\n navAccentTextColor,\n headerColor,\n headerColorInvert: ColorUtils.color.invert(headerColor),\n headerColorDarker: ColorUtils.color.brightness(headerColor, -20),\n headerColorBorder: ColorUtils.color.brightness(headerColor, 10),\n\n borderColor: theme.borderColor || ColorUtils.color.brightness(bg1, 20), // #555\n lightBorderColor: theme.lightBorderColor || ColorUtils.color.brightness(bg1, 15), // #444\n codeBorderColor: theme.codeBorderColor || ColorUtils.color.brightness(bg1, 30),\n\n inputBg: theme.inputBg || ColorUtils.color.brightness(bg1, -5), // #2f2f2f\n placeHolder: theme.placeHolder || ColorUtils.color.opacity(fg1, '0.3'),\n hoverColor: theme.hoverColor || ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n red: theme.red ? theme.red : '#F06560',\n lightRed: theme.lightRed ? theme.lightRed : ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n pink: theme.pink ? theme.pink : '#ffb2b2',\n lightPink: theme.lightPink || ColorUtils.color.brightness(bg1, -10),\n\n green: theme.green || '#7ec699',\n lightGreen: theme.lightGreen || ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n blue: theme.blue || '#71b7ff',\n lightBlue: theme.lightBlue || ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n orange: theme.orange ? theme.orange : '#f08d49',\n lightOrange: theme.lightOrange || ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n yellow: theme.yellow || '#827717',\n lightYellow: theme.lightYellow || ColorUtils.color.brightness(bg1, -10), // #2a2a2a\n\n purple: theme.purple || '#786FF1',\n brown: theme.brown || '#D4AC0D',\n\n codeBg: theme.codeBg || ColorUtils.color.opacity(ColorUtils.color.brightness(bg1, -15), 0.7),\n codeFg: theme.codeFg || '#aaa',\n codePropertyColor: theme.codePropertyColor || '#f8c555',\n codeKeywordColor: theme.codeKeywordColor || '#cc99cd',\n codeOperatorColor: theme.codeOperatorColor || '#67cdcc',\n };\n } else {\n const bg1 = (theme.bg1 ? theme.bg1 : '#fafbfc');\n const fg1 = (theme.fg1 ? theme.fg1 : '#444444');\n const bg2 = theme.bg2 ? theme.bg2 : ColorUtils.color.brightness(bg1, -5); // or '#fafafa'\n const bg3 = theme.bg3 ? theme.bg3 : ColorUtils.color.brightness(bg1, -15); // or '#f6f6f6'\n const lightBg = theme.bg3 ? theme.bg3 : ColorUtils.color.brightness(bg1, -45);\n const fg2 = theme.fg2 ? theme.fg2 : ColorUtils.color.brightness(fg1, 17); // or '#555'\n const fg3 = theme.fg3 ? theme.fg3 : ColorUtils.color.brightness(fg1, 30); // or #666\n const lightFg = theme.fg3 ? theme.fg3 : ColorUtils.color.brightness(fg1, 70); // or #999\n const inlineCodeFg = theme.inlineCodeFg ? theme.inlineCodeFg : 'brown';\n const selectionBg = fg2;\n const selectionFg = bg2;\n const headerColor = theme.headerColor ? theme.headerColor : ColorUtils.color.brightness(bg1, -180);\n\n /*\n const navBgColor = theme.navBgColor ? theme.navBgColor : ColorUtils.color.brightness(bg1, -10);\n const navTextColor = theme.navTextColor ? theme.navTextColor : ColorUtils.color.brightness(fg1, 5);\n const navHoverBgColor = theme.navHoverBgColor ? theme.navHoverBgColor : bg1;\n const navHoverTextColor = theme.navHoverTextColor ? theme.navHoverTextColor : primaryColor;\n const navAccentColor = theme.navAccentColor ? theme.navAccentColor : primaryColor;\n */\n const navBgColor = theme.navBgColor ? theme.navBgColor : ColorUtils.color.brightness(bg1, -200);\n const navTextColor = theme.navTextColor ? theme.navTextColor : ColorUtils.color.opacity(ColorUtils.color.invert(navBgColor), '0.65');\n const navHoverBgColor = theme.navHoverBgColor ? theme.navHoverBgColor : ColorUtils.color.brightness(navBgColor, -15);\n const navHoverTextColor = theme.navHoverTextColor ? theme.navHoverTextColor : ColorUtils.color.invert(navBgColor);\n const navAccentColor = theme.navAccentColor ? theme.navAccentColor : ColorUtils.color.brightness(primaryColor, 25);\n const navAccentTextColor = theme.navAccentTextColor ? theme.navAccenttextColor : ColorUtils.color.invert(navAccentColor);\n const overlayBg = 'rgba(0, 0, 0, 0.4)';\n\n newTheme = {\n bg1,\n bg2,\n bg3,\n lightBg,\n fg1,\n fg2,\n fg3,\n lightFg,\n inlineCodeFg,\n primaryColor,\n primaryColorTrans,\n primaryColorInvert,\n selectionBg,\n selectionFg,\n overlayBg,\n navBgColor,\n navTextColor,\n navHoverBgColor,\n navHoverTextColor,\n navAccentColor,\n navAccentTextColor,\n headerColor,\n headerColorInvert: ColorUtils.color.invert(headerColor),\n headerColorDarker: ColorUtils.color.brightness(headerColor, -20),\n headerColorBorder: ColorUtils.color.brightness(headerColor, 10),\n\n borderColor: theme.borderColor || ColorUtils.color.brightness(bg1, -38),\n lightBorderColor: theme.lightBorderColor || ColorUtils.color.brightness(bg1, -23),\n codeBorderColor: theme.codeBorderColor || 'transparent',\n\n inputBg: theme.inputBg || ColorUtils.color.brightness(bg1, 10), // #fff\n placeHolder: theme.placeHolder || ColorUtils.color.brightness(lightFg, 20), // #dedede\n hoverColor: theme.hoverColor || ColorUtils.color.brightness(bg1, -5), // # f1f1f1\n\n red: theme.red || '#F06560',\n lightRed: theme.lightRed || '#fff0f0',\n\n pink: theme.pink ? theme.pink : '#990055',\n lightPink: theme.lightPink ? theme.lightPink : '#ffb2b2',\n\n green: theme.green || '#690',\n lightGreen: theme.lightGreen || '#fbfff0',\n\n blue: theme.blue || '#47AFE8',\n lightBlue: theme.lightBlue || '#eff8fd',\n\n orange: theme.orange || '#FF9900',\n lightOrange: theme.lightOrange || '#fff5e6',\n\n yellow: theme.yellow || '#827717',\n lightYellow: theme.lightYellow || '#fff5cc',\n\n purple: theme.purple || '#786FF1',\n brown: theme.brown || '#D4AC0D',\n\n codeBg: theme.codeBg || ColorUtils.color.opacity(ColorUtils.color.brightness(bg1, -15), 0.7),\n codeFg: theme.codeFg || '#666',\n codePropertyColor: theme.codePropertyColor || '#905',\n codeKeywordColor: theme.codeKeywordColor || '#07a',\n codeOperatorColor: theme.codeOperatorColor || '#9a6e3a',\n };\n }\n return html`\n `;\n}\n","import { html } from 'lit';\n\n// Templates\nimport expandedEndpointTemplate from '~/templates/expanded-endpoint-template';\nimport focusedEndpointTemplate from '~/templates/focused-endpoint-template';\nimport overviewTemplate from '~/templates/overview-template';\nimport endpointTemplate from '~/templates/endpoint-template';\nimport serverTemplate from '~/templates/server-template';\nimport securitySchemeTemplate, { recoverPersistedApiKeys } from '~/templates/security-scheme-template';\nimport headerTemplate from '~/templates/header-template';\nimport navbarTemplate from '~/templates/navbar-template';\nimport advancedSearchTemplate from '~/templates/advance-search-template';\nimport SetTheme from '~/utils/theme';\nimport { isValidHexColor } from '~/utils/color-utils';\n\nexport default function mainBodyTemplate(isMini = false, pathsExpanded = false) {\n if (!this.resolvedSpec) {\n return '';\n }\n if (this.persistAuth === 'true') {\n recoverPersistedApiKeys.call(this);\n }\n const newTheme = {\n bg1: isValidHexColor(this.bgColor) ? this.bgColor : '',\n fg1: isValidHexColor(this.textColor) ? this.textColor : '',\n headerColor: isValidHexColor(this.headerColor) ? this.headerColor : '',\n primaryColor: isValidHexColor(this.primaryColor) ? this.primaryColor : '',\n navBgColor: isValidHexColor(this.navBgColor) ? this.navBgColor : '',\n navTextColor: isValidHexColor(this.navTextColor) ? this.navTextColor : '',\n navHoverBgColor: isValidHexColor(this.navHoverBgColor) ? this.navHoverBgColor : '',\n navHoverTextColor: isValidHexColor(this.navHoverTextColor) ? this.navHoverTextColor : '',\n navAccentColor: isValidHexColor(this.navAccentColor) ? this.navAccentColor : '',\n navAccentTextColor: isValidHexColor(this.navAccentTextColor) ? this.navAccentTextColor : '',\n };\n /* eslint-disable indent */\n if (this.resolvedSpec.specLoadError) {\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n
    \n ${this.resolvedSpec.info.description} \n
    \n `;\n }\n\n if (this.resolvedSpec.isSpecLoading) {\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n
    \n \n
    \n
    \n
    \n
    \n `;\n }\n\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n\n \n ${this.showHeader === 'false' ? '' : headerTemplate.call(this)}\n \n \n ${this.allowAdvancedSearch === 'false' ? '' : advancedSearchTemplate.call(this)}\n\n
    \n \n ${((this.renderStyle === 'read' || this.renderStyle === 'focused')\n && this.showSideNav === 'true'\n && this.resolvedSpec\n ) ? navbarTemplate.call(this) : ''\n }\n\n \n
    \n \n
    \n ${this.loading === true\n ? html`
    `\n : html`\n ${this.loadFailed === true\n ? html`
    Unable to load the Spec
    `\n : html`\n
    \n ${this.renderStyle === 'focused'\n ? html`${focusedEndpointTemplate.call(this)}`\n : html`\n ${this.showInfo === 'true' ? overviewTemplate.call(this) : ''}\n ${this.allowServerSelection === 'true' ? serverTemplate.call(this) : ''}\n ${this.allowAuthentication === 'true' ? securitySchemeTemplate.call(this, this.allowTry) : ''}\n
    \n \n
    \n ${this.renderStyle === 'read'\n ? expandedEndpointTemplate.call(this)\n : endpointTemplate.call(this, isMini, pathsExpanded)\n }\n `\n }\n
    \n `\n }`\n }\n
    \n \n
    \n
    \n `;\n}\n/* eslint-enable indent */\n","import { css, LitElement, unsafeCSS } from 'lit';\nimport { marked } from 'marked';\nimport Prism from 'prismjs';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-yaml';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-http';\nimport 'prismjs/components/prism-csharp';\n\n// Styles\nimport FontStyles from '~/styles/font-styles';\nimport InputStyles from '~/styles/input-styles';\nimport FlexStyles from '~/styles/flex-styles';\nimport TableStyles from '~/styles/table-styles';\nimport EndpointStyles from '~/styles/endpoint-styles';\nimport PrismStyles from '~/styles/prism-styles';\nimport TabStyles from '~/styles/tab-styles';\nimport NavStyles from '~/styles/nav-styles';\nimport InfoStyles from '~/styles/info-styles';\nimport CustomStyles from '~/styles/custom-styles';\n// import { expandCollapseNavBarTag } from '@/templates/navbar-template';\nimport { advancedSearch, getMatchedPaths, getMatchedComponents, rapidocApiKey, sleep } from '~/utils/common-utils';\nimport ProcessSpec from '~/utils/spec-parser';\nimport mainBodyTemplate from '~/templates/main-body-template';\nimport { applyApiKey, onClearAllApiKeys } from '~/templates/security-scheme-template';\nimport { setApiServer } from '~/templates/server-template';\n\nexport default class RapiDoc extends LitElement {\n constructor() {\n super();\n const intersectionObserverOptions = {\n root: this.getRootNode().host,\n rootMargin: '-50px 0px -50px 0px', // when the element is visible 100px from bottom\n threshold: 0,\n };\n this.showSummaryWhenCollapsed = true;\n // Will activate intersection observer only after spec load and hash analyze\n // to scroll to the proper element without being reverted by observer behavior\n this.isIntersectionObserverActive = false;\n this.intersectionObserver = new IntersectionObserver((entries) => { this.onIntersect(entries); }, intersectionObserverOptions);\n }\n\n static get properties() {\n return {\n // Heading\n headingText: { type: String, attribute: 'heading-text' },\n gotoPath: { type: String, attribute: 'goto-path' },\n\n // Spec\n updateRoute: { type: String, attribute: 'update-route' },\n routePrefix: { type: String, attribute: 'route-prefix' },\n specUrl: { type: String, attribute: 'spec-url' },\n sortTags: { type: String, attribute: 'sort-tags' },\n sortSchemas: { type: String, attribute: 'sort-schemas' },\n generateMissingTags: { type: String, attribute: 'generate-missing-tags' },\n sortEndpointsBy: { type: String, attribute: 'sort-endpoints-by' },\n specFile: { type: String, attribute: false },\n\n // UI Layouts\n layout: { type: String },\n renderStyle: { type: String, attribute: 'render-style' },\n defaultSchemaTab: { type: String, attribute: 'default-schema-tab' },\n responseAreaHeight: { type: String, attribute: 'response-area-height' },\n fillRequestFieldsWithExample: { type: String, attribute: 'fill-request-fields-with-example' },\n persistAuth: { type: String, attribute: 'persist-auth' },\n onNavTagClick: { type: String, attribute: 'on-nav-tag-click' },\n\n // Schema Styles\n schemaStyle: { type: String, attribute: 'schema-style' },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n schemaHideReadOnly: { type: String, attribute: 'schema-hide-read-only' },\n schemaHideWriteOnly: { type: String, attribute: 'schema-hide-write-only' },\n\n // API Server\n apiKeyName: { type: String, attribute: 'api-key-name' },\n apiKeyLocation: { type: String, attribute: 'api-key-location' },\n apiKeyValue: { type: String, attribute: 'api-key-value' },\n defaultApiServerUrl: { type: String, attribute: 'default-api-server' },\n serverUrl: { type: String, attribute: 'server-url' },\n oauthReceiver: { type: String, attribute: 'oauth-receiver' },\n\n // Hide/Show Sections & Enable Disable actions\n showHeader: { type: String, attribute: 'show-header' },\n showSideNav: { type: String, attribute: 'show-side-nav' },\n showInfo: { type: String, attribute: 'show-info' },\n allowAuthentication: { type: String, attribute: 'allow-authentication' },\n allowTry: { type: String, attribute: 'allow-try' },\n showCurlBeforeTry: { type: String, attribute: 'show-curl-before-try' },\n allowSpecUrlLoad: { type: String, attribute: 'allow-spec-url-load' },\n allowSpecFileLoad: { type: String, attribute: 'allow-spec-file-load' },\n allowSpecFileDownload: { type: String, attribute: 'allow-spec-file-download' },\n allowSearch: { type: String, attribute: 'allow-search' },\n allowAdvancedSearch: { type: String, attribute: 'allow-advanced-search' },\n allowServerSelection: { type: String, attribute: 'allow-server-selection' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n showComponents: { type: String, attribute: 'show-components' },\n pageDirection: { type: String, attribute: 'page-direction' },\n scrollBehavior: { type: String, attribute: 'scroll-behavior' },\n\n // Main Colors and Font\n theme: { type: String },\n bgColor: { type: String, attribute: 'bg-color' },\n textColor: { type: String, attribute: 'text-color' },\n headerColor: { type: String, attribute: 'header-color' },\n primaryColor: { type: String, attribute: 'primary-color' },\n fontSize: { type: String, attribute: 'font-size' },\n regularFont: { type: String, attribute: 'regular-font' },\n monoFont: { type: String, attribute: 'mono-font' },\n loadFonts: { type: String, attribute: 'load-fonts' },\n cssFile: { type: String, attribute: 'css-file' },\n cssClasses: { type: String, attribute: 'css-classes' },\n\n // Nav Bar Colors\n navBgColor: { type: String, attribute: 'nav-bg-color' },\n navTextColor: { type: String, attribute: 'nav-text-color' },\n navHoverBgColor: { type: String, attribute: 'nav-hover-bg-color' },\n navHoverTextColor: { type: String, attribute: 'nav-hover-text-color' },\n navAccentColor: { type: String, attribute: 'nav-accent-color' },\n navAccentTextColor: { type: String, attribute: 'nav-accent-text-color' },\n navActiveItemMarker: { type: String, attribute: 'nav-active-item-marker' },\n navItemSpacing: { type: String, attribute: 'nav-item-spacing' },\n showMethodInNavBar: { type: String, attribute: 'show-method-in-nav-bar' },\n usePathInNavBar: { type: String, attribute: 'use-path-in-nav-bar' },\n infoDescriptionHeadingsInNavBar: { type: String, attribute: 'info-description-headings-in-navbar' },\n\n // Fetch Options\n fetchCredentials: { type: String, attribute: 'fetch-credentials' },\n\n // Filters\n matchPaths: { type: String, attribute: 'match-paths' },\n matchType: { type: String, attribute: 'match-type' },\n removeEndpointsWithBadgeLabelAs: { type: String, attribute: 'remove-endpoints-with-badge-label-as' },\n\n // Internal Properties\n loading: { type: Boolean }, // indicates spec is being loaded\n focusedElementId: { type: String }, // updating the focusedElementId will automatically render appropriate section in focused mode\n showAdvancedSearchDialog: { type: Boolean },\n advancedSearchMatches: { type: Object },\n searchVal: { type: String },\n };\n }\n\n static get styles() {\n return [\n FontStyles,\n InputStyles,\n FlexStyles,\n TableStyles,\n EndpointStyles,\n PrismStyles,\n TabStyles,\n NavStyles,\n InfoStyles,\n css`\n :host {\n all: initial;\n display:flex;\n flex-direction: column;\n min-width:360px;\n width:100%;\n height:100%;\n margin:0;\n padding:0;\n overflow: hidden;\n letter-spacing:normal;\n color:var(--fg);\n background-color:var(--bg);\n font-family:var(--font-regular);\n container-type: inline-size;\n }\n :where(button, input[type=\"checkbox\"], [tabindex=\"0\"]):focus-visible { box-shadow: var(--focus-shadow); }\n :where(input[type=\"text\"], input[type=\"password\"], select, textarea):focus-visible { border-color: var(--primary-color); }\n .body {\n display:flex;\n height:100%;\n width:100%;\n overflow:hidden;\n }\n .main-content { \n margin:0;\n padding: 0; \n display:block;\n flex:1;\n height:100%;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: var(--border-color) transparent;\n }\n\n .main-content-inner--view-mode {\n padding: 0 8px;\n }\n .main-content::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .main-content::-webkit-scrollbar-track {\n background:transparent;\n }\n .main-content::-webkit-scrollbar-thumb {\n background-color: var(--border-color);\n }\n\n .section-gap.section-tag {\n border-bottom:1px solid var(--border-color);\n }\n .section-gap,\n .section-gap--focused-mode,\n .section-gap--read-mode { \n padding: 0px 4px; \n }\n .section-tag-header {\n position:relative;\n cursor: n-resize;\n padding: 12px 0;\n }\n .collapsed .section-tag-header:hover {\n cursor: s-resize;\n }\n\n .section-tag-header:hover {\n background-image: linear-gradient(to right, rgba(0,0,0,0), var(--border-color), rgba(0,0,0,0));\n }\n\n .section-tag-header:hover::after {\n position:absolute;\n margin-left:-24px;\n font-size:20px;\n top: calc(50% - 14px);\n color:var(--primary-color);\n content: '⬆'; \n }\n\n .collapsed .section-tag-header::after {\n position:absolute;\n margin-left:-24px;\n font-size:20px;\n top: calc(50% - 14px);\n color: var(--border-color);\n content: '⬇'; \n }\n .collapsed .section-tag-header:hover::after {\n color:var(--primary-color);\n }\n\n .collapsed .section-tag-body {\n display:none;\n }\n\n .logo {\n height:36px;\n width:36px;\n margin-left:5px; \n }\n .only-large-screen-flex,\n .only-large-screen {\n display:none;\n }\n .tag.title {\n text-transform: uppercase;\n }\n .main-header {\n background-color:var(--header-bg);\n color:var(--header-fg);\n width:100%;\n }\n .header-title {\n font-size:calc(var(--font-size-regular) + 8px); \n padding:0 8px;\n }\n input.header-input{\n background:var(--header-color-darker);\n color:var(--header-fg);\n border:1px solid var(--header-color-border);\n flex:1; \n padding-right:24px;\n border-radius:3px;\n }\n input.header-input::placeholder {\n opacity:0.4;\n }\n .loader {\n margin: 16px auto 16px auto; \n border: 4px solid var(--bg3);\n border-radius: 50%;\n border-top: 4px solid var(--primary-color);\n width: 36px;\n height: 36px;\n animation: spin 2s linear infinite;\n }\n .expanded-endpoint-body { \n position: relative;\n padding: 6px 0px; \n }\n .expanded-endpoint-body .tag-description {\n background: var(--code-bg);\n border-radius: var(--border-radius);\n transition: max-height .2s ease-out;\n }\n .expanded-endpoint-body .tag-icon {\n transition: transform .2s ease-out;\n }\n .expanded-endpoint-body .tag-icon.expanded {\n transform: rotate(180deg);\n }\n .divider { \n border-top: 2px solid var(--border-color);\n margin: 24px 0;\n width:100%;\n }\n\n .tooltip {\n cursor:pointer;\n border: 1px solid var(--border-color);\n border-left-width: 4px;\n margin-left:2px;\n }\n .tooltip a {\n color: var(--fg2);\n text-decoration: none;\n }\n .tooltip-text {\n color: var(--fg2);\n max-width: 400px;\n position: absolute;\n z-index:1;\n background-color: var(--bg2);\n visibility: hidden;\n\n overflow-wrap: break-word;\n }\n .tooltip:hover {\n color: var(--primary-color);\n border-color: var(--primary-color);\n }\n .tooltip:hover a:hover {\n color: var(--primary-color);\n }\n\n .tooltip:hover .tooltip-text {\n visibility: visible;\n }\n\n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n\n .nav-method { font-weight: bold; margin-right: 4px; font-size: calc(var(--font-size-small) - 2px); white-space: nowrap; }\n .nav-method.false { display: none; }\n\n .nav-method.as-colored-text.get { color:var(--nav-get-color); }\n .nav-method.as-colored-text.put { color:var(--nav-put-color); }\n .nav-method.as-colored-text.post { color:var(--nav-post-color); }\n .nav-method.as-colored-text.delete { color:var(--nav-delete-color); }\n .nav-method.as-colored-text.head, .nav-method.as-colored-text.patch, .nav-method.as-colored-text.options { color:var(--nav-head-color); }\n \n .nav-method.as-colored-block {\n padding: 1px 4px;\n min-width: 30px;\n border-radius: 4px 0 0 4px;\n color: #000;\n }\n .colored-block .nav-method.as-colored-block {\n outline: 1px solid;\n }\n\n .nav-method.as-colored-block.get { background-color: var(--blue); }\n .nav-method.as-colored-block.put { background-color: var(--orange); }\n .nav-method.as-colored-block.post { background-color: var(--green); }\n .nav-method.as-colored-block.delete { background-color: var(--red); }\n .nav-method.as-colored-block.head, .nav-method.as-colored-block.patch , .nav-method.as-colored-block.options { \n background-color: var(--yellow); \n }\n\n @container (min-width: 768px) {\n .nav-bar {\n width: 260px;\n display:flex;\n }\n .only-large-screen {\n display:block;\n }\n .only-large-screen-flex {\n display:flex;\n }\n .section-gap { \n padding: 0 0 0 24px; \n }\n .section-gap--focused-mode {\n padding: 24px 8px; \n }\n .section-gap--read-mode { \n padding: 24px 8px; \n }\n .endpoint-body {\n position: relative;\n padding:36px 0 48px 0;\n }\n }\n\n @container (min-width: 1024px) {\n .nav-bar {\n width: ${unsafeCSS(this.fontSize === 'default' ? '300px' : this.fontSize === 'large' ? '315px' : '330px')};\n display:flex;\n }\n .section-gap--focused-mode { \n padding: 12px 80px 12px 80px; \n }\n .section-gap--read-mode { \n padding: 24px 80px 12px 80px; \n }\n }`,\n CustomStyles,\n ];\n }\n\n // Startup\n connectedCallback() {\n super.connectedCallback();\n const parent = this.parentElement;\n if (parent) {\n if (parent.offsetWidth === 0 && parent.style.width === '') {\n parent.style.width = '100vw';\n }\n if (parent.offsetHeight === 0 && parent.style.height === '') {\n parent.style.height = '100vh';\n }\n if (parent.tagName === 'BODY') {\n if (!parent.style.marginTop) { parent.style.marginTop = '0'; }\n if (!parent.style.marginRight) { parent.style.marginRight = '0'; }\n if (!parent.style.marginBottom) { parent.style.marginBottom = '0'; }\n if (!parent.style.marginLeft) { parent.style.marginLeft = '0'; }\n }\n }\n\n if (this.loadFonts !== 'false') {\n const fontDescriptor = {\n family: 'Open Sans',\n style: 'normal',\n weight: '300',\n unicodeRange: 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD',\n };\n const fontWeight300 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UN_r8OUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontDescriptor.weight = '600';\n const fontWeight600 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UNirkOUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontWeight300.load().then((font) => { document.fonts.add(font); });\n fontWeight600.load().then((font) => { document.fonts.add(font); });\n }\n\n if (!this.layout || !'row, column,'.includes(`${this.layout},`)) { this.layout = 'row'; }\n if (!this.renderStyle || !'read, view, focused,'.includes(`${this.renderStyle},`)) { this.renderStyle = 'focused'; }\n if (!this.schemaStyle || !'tree, table,'.includes(`${this.schemaStyle},`)) { this.schemaStyle = 'tree'; }\n if (!this.theme || !'light, dark,'.includes(`${this.theme},`)) {\n this.theme = (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) ? 'light' : 'dark';\n }\n if (!this.defaultSchemaTab || !'example, schema, model,'.includes(`${this.defaultSchemaTab},`)) {\n this.defaultSchemaTab = 'example';\n } else if (this.defaultSchemaTab === 'model') {\n this.defaultSchemaTab = 'schema';\n }\n if (!this.schemaExpandLevel || this.schemaExpandLevel < 1) { this.schemaExpandLevel = 99999; }\n if (!this.schemaDescriptionExpanded || !'true, false,'.includes(`${this.schemaDescriptionExpanded},`)) { this.schemaDescriptionExpanded = 'false'; }\n\n if (!this.schemaHideReadOnly || !'default, never,'.includes(`${this.schemaHideReadOnly},`)) { this.schemaHideReadOnly = 'default'; }\n if (!this.schemaHideWriteOnly || !'default, never,'.includes(`${this.schemaHideWriteOnly},`)) { this.schemaHideWriteOnly = 'default'; }\n\n if (!this.fillRequestFieldsWithExample || !'true, false,'.includes(`${this.fillRequestFieldsWithExample},`)) { this.fillRequestFieldsWithExample = 'true'; }\n if (!this.persistAuth || !'true, false,'.includes(`${this.persistAuth},`)) { this.persistAuth = 'false'; }\n if (!this.responseAreaHeight) {\n this.responseAreaHeight = '400px';\n }\n\n if (!this.allowSearch || !'true, false,'.includes(`${this.allowSearch},`)) { this.allowSearch = 'true'; }\n if (!this.allowAdvancedSearch || !'true, false,'.includes(`${this.allowAdvancedSearch},`)) { this.allowAdvancedSearch = 'true'; }\n\n if (!this.allowTry || !'true, false,'.includes(`${this.allowTry},`)) { this.allowTry = 'true'; }\n if (!this.apiKeyValue) { this.apiKeyValue = '-'; }\n if (!this.apiKeyLocation) { this.apiKeyLocation = 'header'; }\n if (!this.apiKeyName) { this.apiKeyName = ''; }\n\n if (!this.oauthReceiver) { this.oauthReceiver = 'oauth-receiver.html'; }\n if (!this.updateRoute || !'true, false,'.includes(`${this.updateRoute},`)) { this.updateRoute = 'true'; }\n if (!this.routePrefix) { this.routePrefix = '#'; }\n if (!this.sortTags || !'true, false,'.includes(`${this.sortTags},`)) { this.sortTags = 'false'; }\n if (!this.sortSchemas || !'true, false,'.includes(`${this.sortSchemas},`)) { this.sortSchemas = 'false'; }\n if (!this.generateMissingTags || !'true, false,'.includes(`${this.generateMissingTags},`)) { this.generateMissingTags = 'false'; }\n if (!this.sortEndpointsBy || !'method, path, summary, none,'.includes(`${this.sortEndpointsBy},`)) { this.sortEndpointsBy = 'path'; }\n\n if (!this.onNavTagClick || !'expand-collapse, show-description,'.includes(`${this.onNavTagClick},`)) { this.onNavTagClick = 'expand-collapse'; }\n if (!this.navItemSpacing || !'compact, relaxed, default,'.includes(`${this.navItemSpacing},`)) { this.navItemSpacing = 'default'; }\n if (!this.showMethodInNavBar || !'false, as-plain-text, as-colored-text, as-colored-block,'.includes(`${this.showMethodInNavBar},`)) { this.showMethodInNavBar = 'false'; }\n if (!this.usePathInNavBar || !'true, false,'.includes(`${this.usePathInNavBar},`)) { this.usePathInNavBar = 'false'; }\n if (!this.navActiveItemMarker || !'left-bar, colored-block'.includes(`${this.navActiveItemMarker},`)) { this.navActiveItemMarker = 'left-bar'; }\n\n if (!this.fontSize || !'default, large, largest,'.includes(`${this.fontSize},`)) { this.fontSize = 'default'; }\n if (!this.showInfo || !'true, false,'.includes(`${this.showInfo},`)) { this.showInfo = 'true'; }\n if (!this.allowServerSelection || !'true, false,'.includes(`${this.allowServerSelection},`)) { this.allowServerSelection = 'true'; }\n if (!this.allowAuthentication || !'true, false,'.includes(`${this.allowAuthentication},`)) { this.allowAuthentication = 'true'; }\n if (!this.allowSchemaDescriptionExpandToggle || !'true, false,'.includes(`${this.allowSchemaDescriptionExpandToggle},`)) { this.allowSchemaDescriptionExpandToggle = 'true'; }\n\n if (!this.showSideNav || !'true false'.includes(this.showSideNav)) { this.showSideNav = 'true'; }\n if (!this.showComponents || !'true false'.includes(this.showComponents)) { this.showComponents = 'false'; }\n if (!this.infoDescriptionHeadingsInNavBar || !'true, false,'.includes(`${this.infoDescriptionHeadingsInNavBar},`)) { this.infoDescriptionHeadingsInNavBar = 'false'; }\n if (!this.fetchCredentials || !'omit, same-origin, include,'.includes(`${this.fetchCredentials},`)) { this.fetchCredentials = ''; }\n if (!this.scrollBehavior || !'smooth, auto,'.includes(`${this.scrollBehavior},`)) { this.scrollBehavior = 'auto'; }\n\n if (!this.matchType || !'includes regex'.includes(this.matchType)) { this.matchType = 'includes'; }\n if (!this.matchPaths) { this.matchPaths = ''; }\n if (!this.removeEndpointsWithBadgeLabelAs) { this.removeEndpointsWithBadgeLabelAs = ''; }\n if (!this.showAdvancedSearchDialog) { this.showAdvancedSearchDialog = false; }\n\n if (!this.cssFile) { this.cssFile = null; }\n if (!this.cssClasses) { this.cssClasses = ''; }\n\n marked.setOptions({\n highlight: (code, lang) => {\n if (Prism.languages[lang]) {\n return Prism.highlight(code, Prism.languages[lang], lang);\n }\n return code;\n },\n });\n\n window.addEventListener('hashchange', () => {\n this.scrollToPath(this.getElementIDFromURL());\n }, true);\n }\n\n // Cleanup\n disconnectedCallback() {\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n }\n super.disconnectedCallback();\n }\n\n infoDescriptionHeadingRenderer() {\n const renderer = new marked.Renderer();\n renderer.heading = ((text, level, raw, slugger) => `${text}`);\n return renderer;\n }\n\n render() {\n // return render(mainBodyTemplate(this), this.shadowRoot, { eventContext: this });\n const cssLinkEl = document.querySelector(`link[href*=\"${this.cssFile}\"]`);\n // adding custom style for RapiDoc\n if (cssLinkEl) {\n this.shadowRoot.appendChild(cssLinkEl.cloneNode());\n }\n return mainBodyTemplate.call(this);\n }\n\n observeExpandedContent() {\n // Main Container\n const observeOverviewEls = this.shadowRoot.querySelectorAll('.observe-me');\n observeOverviewEls.forEach((targetEl) => {\n this.intersectionObserver.observe(targetEl);\n });\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (name === 'spec-url') {\n if (oldVal !== newVal) {\n // put it at the end of event-loop to load all the attributes\n window.setTimeout(async () => {\n await this.loadSpec(newVal);\n // If goto-path is provided and no location-hash is present then try to scroll there\n if (this.gotoPath && !window.location.hash) {\n this.scrollToPath(this.gotoPath);\n }\n }, 0);\n }\n }\n if (name === 'match-paths' || name === 'match-type' || name === 'remove-endpoints-with-badge-label-as') {\n if (oldVal !== newVal) {\n window.setTimeout(async () => {\n await this.loadSpec(this.specUrl);\n }, 0);\n }\n }\n if (name === 'render-style') {\n if (newVal === 'read') {\n window.setTimeout(() => {\n this.observeExpandedContent();\n }, 100);\n } else {\n this.intersectionObserver.disconnect();\n }\n }\n if (name === 'api-key-name' || name === 'api-key-location' || name === 'api-key-value') {\n let updateSelectedApiKey = false;\n let apiKeyName = '';\n let apiKeyLocation = '';\n let apiKeyValue = '';\n\n if (name === 'api-key-name') {\n if (this.getAttribute('api-key-location') && this.getAttribute('api-key-value')) {\n apiKeyName = newVal;\n apiKeyLocation = this.getAttribute('api-key-location');\n apiKeyValue = this.getAttribute('api-key-value');\n updateSelectedApiKey = true;\n }\n } else if (name === 'api-key-location') {\n if (this.getAttribute('api-key-name') && this.getAttribute('api-key-value')) {\n apiKeyLocation = newVal;\n apiKeyName = this.getAttribute('api-key-name');\n apiKeyValue = this.getAttribute('api-key-value');\n updateSelectedApiKey = true;\n }\n } else if (name === 'api-key-value') {\n if (this.getAttribute('api-key-name') && this.getAttribute('api-key-location')) {\n apiKeyValue = newVal;\n apiKeyLocation = this.getAttribute('api-key-location');\n apiKeyName = this.getAttribute('api-key-name');\n updateSelectedApiKey = true;\n }\n }\n\n if (updateSelectedApiKey) {\n if (this.resolvedSpec) {\n const rapiDocApiKey = this.resolvedSpec.securitySchemes.find((v) => v.securitySchemeId === rapidocApiKey);\n if (!rapiDocApiKey) {\n this.resolvedSpec.securitySchemes.push({\n securitySchemeId: rapidocApiKey,\n description: 'api-key provided in rapidoc element attributes',\n type: 'apiKey',\n name: apiKeyName,\n in: apiKeyLocation,\n value: apiKeyValue,\n finalKeyValue: apiKeyValue,\n });\n } else {\n rapiDocApiKey.name = apiKeyName;\n rapiDocApiKey.in = apiKeyLocation;\n rapiDocApiKey.value = apiKeyValue;\n rapiDocApiKey.finalKeyValue = apiKeyValue;\n }\n this.requestUpdate();\n }\n }\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n\n onSpecUrlChange() {\n this.setAttribute('spec-url', this.shadowRoot.getElementById('spec-url').value);\n }\n\n onSpecFileChange(e) {\n this.setAttribute('spec-file', this.shadowRoot.getElementById('spec-file').value);\n const specFile = e.target.files[0];\n const reader = new FileReader();\n reader.onload = () => {\n try {\n const specObj = JSON.parse(reader.result);\n this.loadSpec(specObj);\n this.shadowRoot.getElementById('spec-url').value = '';\n } catch {\n console.error('RapiDoc: Unable to read or parse json'); // eslint-disable-line no-console\n }\n };\n // Read the Text file\n reader.readAsText(specFile);\n }\n\n onFileLoadClick() {\n this.shadowRoot.getElementById('spec-file').click();\n }\n\n onSearchChange(e) {\n // this.matchPaths = e.target.value;\n this.searchVal = e.target.value;\n this.resolvedSpec.tags.forEach((tag) => tag.paths.filter((path) => {\n if (this.searchVal) {\n if (getMatchedPaths(this.searchVal, path, tag.name)) {\n tag.expanded = true;\n }\n }\n }));\n this.resolvedSpec.components.forEach((component) => component.subComponents.filter((v) => {\n v.expanded = false;\n if (getMatchedComponents(this.searchVal, v)) {\n v.expanded = true;\n }\n }));\n this.requestUpdate();\n }\n\n onClearSearch() {\n const searchEl = this.shadowRoot.getElementById('nav-bar-search');\n searchEl.value = '';\n this.searchVal = '';\n this.resolvedSpec.components.forEach((component) => component.subComponents.filter((v) => {\n v.expanded = true;\n }));\n }\n\n onShowSearchModalClicked() {\n this.showAdvancedSearchDialog = true;\n }\n\n // Event Handler on Dialog-Box is opened\n async onOpenSearchDialog(e) {\n // Set focus to text input\n const inputEl = e.detail.querySelector('input');\n await sleep(0);\n if (inputEl) {\n inputEl.focus();\n }\n }\n\n // Public Method\n async loadSpec(specUrl) {\n if (!specUrl) {\n return;\n }\n this.searchVal = '';\n try {\n this.resolvedSpec = {\n specLoadError: false,\n isSpecLoading: true,\n tags: [],\n };\n this.loading = true;\n this.loadFailed = false;\n const spec = await ProcessSpec.call(\n this,\n specUrl,\n this.generateMissingTags === 'true',\n this.sortTags === 'true',\n this.sortSchemas === 'true',\n this.getAttribute('sort-endpoints-by'),\n this.getAttribute('api-key-name'),\n this.getAttribute('api-key-location'),\n this.getAttribute('api-key-value'),\n this.getAttribute('server-url'),\n this.matchPaths,\n this.matchType,\n this.removeEndpointsWithBadgeLabelAs,\n );\n this.loading = false;\n this.afterSpecParsedAndValidated(spec);\n } catch (err) {\n this.loading = false;\n this.loadFailed = true;\n this.resolvedSpec = null;\n console.error(`RapiDoc: Unable to resolve the API spec.. ${err.message}`); // eslint-disable-line no-console\n }\n }\n\n async afterSpecParsedAndValidated(spec) {\n this.resolvedSpec = spec;\n this.selectedServer = undefined;\n if (this.defaultApiServerUrl) {\n if (this.defaultApiServerUrl === this.serverUrl) {\n this.selectedServer = {\n url: this.serverUrl,\n computedUrl: this.serverUrl,\n };\n } else if (this.resolvedSpec.servers) {\n this.selectedServer = this.resolvedSpec.servers.find((v) => (v.url === this.defaultApiServerUrl));\n }\n }\n if (!this.selectedServer) {\n if (this.resolvedSpec.servers) {\n this.selectedServer = this.resolvedSpec.servers[0]; // eslint-disable-line prefer-destructuring\n }\n }\n this.requestUpdate();\n // eslint-disable-next-line no-await-in-loop\n while (!await this.updateComplete);\n const specLoadedEvent = new CustomEvent('spec-loaded', { detail: spec });\n this.dispatchEvent(specLoadedEvent);\n\n // Initiate IntersectionObserver and put it at the end of event loop, to allow loading all the child elements (must for larger specs)\n this.intersectionObserver.disconnect();\n if (this.renderStyle === 'read') {\n await sleep(100);\n this.observeExpandedContent(); // This will auto-highlight the selected nav-item in read-mode\n }\n\n this.isIntersectionObserverActive = true;\n\n // On first time Spec load, try to navigate to location hash if provided\n const elementId = this.getElementIDFromURL();\n\n if (elementId) {\n if (this.renderStyle === 'view') {\n this.expandAndGotoOperation(elementId, true, true);\n } else {\n this.scrollToPath(elementId);\n }\n } else if (this.renderStyle === 'focused') {\n // If goto-path is provided and no location-hash is present then try to scroll to default element\n if (!this.gotoPath) {\n const defaultElementId = this.showInfo ? 'overview' : this.resolvedSpec.tags[0]?.paths[0];\n this.scrollToPath(defaultElementId);\n }\n }\n }\n\n /**\n * Return the URL from where is served the RapiDoc component, removing any hash and route prefix\n */\n getComponentBaseURL() {\n const { href } = window.location;\n\n // Remove end of string # or /\n const cleanRouterPrefix = this.routePrefix.replace(/(#|\\/)$/, '');\n\n if (!cleanRouterPrefix) {\n return href.split('#')[0];\n }\n\n const indexOfRoutePrefix = href.lastIndexOf(cleanRouterPrefix);\n\n if (indexOfRoutePrefix === -1) {\n return href;\n }\n\n return href.slice(0, indexOfRoutePrefix);\n }\n\n /**\n * From the URL return the ID of the element whether it is in the hash or if used a router prefix without a hash\n */\n getElementIDFromURL() {\n const baseURL = this.getComponentBaseURL();\n const elementId = window.location.href.replace(baseURL + this.routePrefix, '');\n return elementId;\n }\n\n replaceHistoryState(hashId) {\n const baseURL = this.getComponentBaseURL();\n window.history.replaceState(null, null, `${baseURL}${this.routePrefix || '#'}${hashId}`);\n }\n\n expandAndGotoOperation(elementId, scrollToElement = true) {\n if (!this.resolvedSpec) {\n return;\n }\n // Expand full operation and tag\n let isExpandingNeeded = true;\n const tmpElementId = elementId.indexOf('#') === -1 ? elementId : elementId.substring(1);\n if (tmpElementId.startsWith('overview') || tmpElementId === 'servers' || tmpElementId === 'auth') {\n isExpandingNeeded = false;\n } else {\n for (let i = 0; i < this.resolvedSpec.tags?.length; i++) {\n const tag = this.resolvedSpec.tags[i];\n const path = tag.paths?.find((p) => p.elementId === elementId);\n if (path) {\n if (path.expanded && tag.expanded) {\n isExpandingNeeded = false;\n } else {\n path.expanded = true;\n tag.expanded = true;\n }\n }\n }\n }\n if (scrollToElement) {\n // requestUpdate() and delay required, else we cant find element\n if (isExpandingNeeded) {\n this.requestUpdate();\n }\n window.setTimeout(() => {\n const gotoEl = this.shadowRoot.getElementById(tmpElementId);\n if (gotoEl) {\n gotoEl.scrollIntoView({ behavior: this.scrollBehavior, block: 'start' });\n if (this.updateRoute === 'true') {\n this.replaceHistoryState(tmpElementId);\n }\n }\n }, isExpandingNeeded ? 150 : 0);\n }\n }\n\n isValidTopId(id) {\n return (id.startsWith('overview') || id === 'servers' || id === 'auth');\n }\n\n isValidPathId(id) {\n if (id === 'overview' && this.showInfo) {\n return true;\n }\n if (id === 'servers' && this.allowServerSelection) {\n return true;\n }\n if (id === 'auth' && this.allowAuthentication) {\n return true;\n }\n if (id.startsWith('tag--')) {\n return this.resolvedSpec?.tags?.find((tag) => tag.elementId === id);\n }\n return this.resolvedSpec?.tags?.find((tag) => tag.paths.find((path) => path.elementId === id));\n }\n\n onIntersect(entries) {\n if (this.isIntersectionObserverActive === false) {\n return;\n }\n\n entries.forEach((entry) => {\n if (entry.isIntersecting && entry.intersectionRatio > 0) {\n const oldNavEl = this.shadowRoot.querySelector('.nav-bar-tag.active, .nav-bar-path.active, .nav-bar-info.active, .nav-bar-h1.active, .nav-bar-h2.active, .operations.active');\n const newNavEl = this.shadowRoot.getElementById(`link-${entry.target.id}`);\n\n // Add active class in the new element\n if (newNavEl) {\n if (this.updateRoute === 'true') {\n this.replaceHistoryState(entry.target.id);\n }\n newNavEl.scrollIntoView({ behavior: this.scrollBehavior, block: 'center' });\n newNavEl.classList.add('active');\n newNavEl.part.add('section-navbar-active-item');\n }\n\n // Remove active class from previous element\n // if it is different from the new one (edge case on loading in read render style)\n if (oldNavEl && oldNavEl !== newNavEl) {\n oldNavEl.classList.remove('active');\n oldNavEl.part.remove('section-navbar-active-item');\n }\n }\n });\n }\n\n // Called by anchor tags created using markdown\n handleHref(e) {\n if (e.target.tagName.toLowerCase() === 'a') {\n if (e.target.getAttribute('href').startsWith('#')) {\n const gotoEl = this.shadowRoot.getElementById(e.target.getAttribute('href').replace('#', ''));\n if (gotoEl) {\n gotoEl.scrollIntoView({ behavior: this.scrollBehavior, block: 'start' });\n }\n }\n }\n }\n\n /**\n * Called by\n * - onClick of Navigation Bar\n * - onClick of Advanced Search items\n *\n * Functionality:\n * 1. First deactivate IntersectionObserver\n * 2. Scroll to the element\n * 3. Activate IntersectionObserver (after little delay)\n *\n */\n async scrollToEventTarget(event, scrollNavItemToView = true) {\n if (!(event.type === 'click' || (event.type === 'keyup' && event.keyCode === 13))) {\n return;\n }\n const navEl = event.target;\n if (!navEl.dataset.contentId) {\n return;\n }\n this.isIntersectionObserverActive = false;\n if (this.renderStyle === 'focused') {\n const requestEl = this.shadowRoot.querySelector('api-request');\n if (requestEl) {\n requestEl.beforeNavigationFocusedMode();\n }\n }\n this.scrollToPath(navEl.dataset.contentId, true, scrollNavItemToView);\n setTimeout(() => {\n this.isIntersectionObserverActive = true;\n }, 300);\n }\n\n // Public Method (scrolls to a given path and highlights the left-nav selection)\n async scrollToPath(elementId, expandPath = true, scrollNavItemToView = true) {\n if (this.renderStyle === 'focused') {\n // for focused mode update this.focusedElementId to update the rendering, else it wont find the needed html elements\n // focusedElementId will get validated in the template\n this.focusedElementId = elementId;\n await sleep(0);\n }\n if (this.renderStyle === 'view') {\n this.expandAndGotoOperation(elementId, expandPath, true);\n } else {\n let isValidElementId = false;\n const contentEl = this.shadowRoot.getElementById(elementId);\n if (contentEl) {\n isValidElementId = true;\n contentEl.scrollIntoView({ behavior: this.scrollBehavior, block: 'start' });\n } else {\n isValidElementId = false;\n }\n if (isValidElementId) {\n // for focused style it is important to reset request-body-selection and response selection which maintains the state for in case of multiple req-body or multiple response mime-type\n if (this.renderStyle === 'focused') {\n const requestEl = this.shadowRoot.querySelector('api-request');\n if (requestEl) {\n requestEl.afterNavigationFocusedMode();\n }\n const responseEl = this.shadowRoot.querySelector('api-response');\n if (responseEl) {\n responseEl.resetSelection();\n }\n }\n\n // Update Location Hash\n if (this.updateRoute === 'true') {\n this.replaceHistoryState(elementId);\n }\n\n // Update NavBar View and Styles\n const newNavEl = this.shadowRoot.getElementById(`link-${elementId}`);\n\n if (newNavEl) {\n if (scrollNavItemToView) {\n newNavEl.scrollIntoView({ behavior: this.scrollBehavior, block: 'center' });\n }\n await sleep(0);\n const oldNavEl = this.shadowRoot.querySelector('.nav-bar-tag.active, .nav-bar-path.active, .nav-bar-info.active, .nav-bar-h1.active, .nav-bar-h2.active, .operations.active');\n if (oldNavEl) {\n oldNavEl.classList.remove('active');\n oldNavEl.part.remove('active');\n oldNavEl.part.remove('section-navbar-active-item');\n }\n newNavEl.classList.add('active'); // must add the class after scrolling\n newNavEl.part.add('section-navbar-active-item');\n // this.requestUpdate();\n }\n }\n }\n }\n\n // Public Method - to update security-scheme of type http\n setHttpUserNameAndPassword(securitySchemeId, username, password) {\n return applyApiKey.call(this, securitySchemeId, username, password);\n }\n\n // Public Method - to update security-scheme of type apiKey or OAuth\n setApiKey(securitySchemeId, apiKeyValue) {\n return applyApiKey.call(this, securitySchemeId, '', '', apiKeyValue);\n }\n\n // Public Method\n removeAllSecurityKeys() {\n return onClearAllApiKeys.call(this);\n }\n\n // Public Method\n setApiServer(apiServerUrl) {\n // return apiServerUrl;\n return setApiServer.call(this, apiServerUrl);\n }\n\n // Event handler for Advanced Search text-inputs and checkboxes\n onAdvancedSearch(ev, delay) {\n const eventTargetEl = ev.target;\n clearTimeout(this.timeoutId);\n this.timeoutId = setTimeout(() => {\n let searchInputEl;\n if (eventTargetEl.type === 'text') {\n searchInputEl = eventTargetEl;\n } else {\n searchInputEl = eventTargetEl.closest('.advanced-search-options').querySelector('input[type=text]');\n }\n const searchOptions = [...eventTargetEl.closest('.advanced-search-options').querySelectorAll('input:checked')].map((v) => v.id);\n this.advancedSearchMatches = advancedSearch(searchInputEl.value, this.resolvedSpec.tags, searchOptions);\n }, delay);\n }\n}\ncustomElements.define('rapi-doc', RapiDoc);\n","import { css, LitElement } from 'lit';\nimport { marked } from 'marked';\nimport Prism from 'prismjs';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-yaml';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-http';\nimport 'prismjs/components/prism-csharp';\n\n// Styles\nimport FontStyles from '~/styles/font-styles';\nimport InputStyles from '~/styles/input-styles';\nimport FlexStyles from '~/styles/flex-styles';\nimport TableStyles from '~/styles/table-styles';\nimport PrismStyles from '~/styles/prism-styles';\nimport TabStyles from '~/styles/tab-styles';\nimport NavStyles from '~/styles/nav-styles';\nimport InfoStyles from '~/styles/info-styles';\n\nimport EndpointStyles from '~/styles/endpoint-styles';\nimport { rapidocApiKey } from '~/utils/common-utils';\nimport ProcessSpec from '~/utils/spec-parser';\nimport mainBodyTemplate from '~/templates/main-body-template';\nimport { applyApiKey, onClearAllApiKeys } from '~/templates/security-scheme-template';\nimport { setApiServer } from '~/templates/server-template';\n\nexport default class RapiDocMini extends LitElement {\n constructor() {\n super();\n this.isMini = true;\n this.updateRoute = 'false';\n this.renderStyle = 'view';\n this.showHeader = 'false';\n this.allowAdvancedSearch = 'false';\n }\n\n static get properties() {\n return {\n // Spec\n specUrl: { type: String, attribute: 'spec-url' },\n sortEndpointsBy: { type: String, attribute: 'sort-endpoints-by' },\n\n // UI Layouts\n layout: { type: String },\n pathsExpanded: { type: String, attribute: 'paths-expanded' },\n defaultSchemaTab: { type: String, attribute: 'default-schema-tab' },\n responseAreaHeight: { type: String, attribute: 'response-area-height' },\n showSummaryWhenCollapsed: { type: String, attribute: 'show-summary-when-collapsed' },\n fillRequestFieldsWithExample: { type: String, attribute: 'fill-request-fields-with-example' },\n persistAuth: { type: String, attribute: 'persist-auth' },\n\n // Schema Styles\n schemaStyle: { type: String, attribute: 'schema-style' },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n\n // API Server\n apiKeyName: { type: String, attribute: 'api-key-name' },\n apiKeyLocation: { type: String, attribute: 'api-key-location' },\n apiKeyValue: { type: String, attribute: 'api-key-value' },\n defaultApiServerUrl: { type: String, attribute: 'default-api-server' },\n serverUrl: { type: String, attribute: 'server-url' },\n oauthReceiver: { type: String, attribute: 'oauth-receiver' },\n\n allowTry: { type: String, attribute: 'allow-try' },\n showCurlBeforeTry: { type: String, attribute: 'show-curl-before-try' },\n\n // Main Colors and Font\n theme: { type: String },\n bgColor: { type: String, attribute: 'bg-color' },\n textColor: { type: String, attribute: 'text-color' },\n primaryColor: { type: String, attribute: 'primary-color' },\n fontSize: { type: String, attribute: 'font-size' },\n regularFont: { type: String, attribute: 'regular-font' },\n monoFont: { type: String, attribute: 'mono-font' },\n loadFonts: { type: String, attribute: 'load-fonts' },\n\n // Fetch Options\n fetchCredentials: { type: String, attribute: 'fetch-credentials' },\n\n // Filters\n matchPaths: { type: String, attribute: 'match-paths' },\n matchType: { type: String, attribute: 'match-type' },\n removeEndpointsWithBadgeLabelAs: { type: String, attribute: 'remove-endpoints-with-badge-label-as' },\n\n // Internal Properties\n loading: { type: Boolean }, // indicates spec is being loaded\n };\n }\n\n static get styles() {\n return [\n FontStyles,\n InputStyles,\n FlexStyles,\n TableStyles,\n EndpointStyles,\n PrismStyles,\n TabStyles,\n NavStyles,\n InfoStyles,\n css`\n :host {\n all: initial;\n display:flex;\n flex-direction: column;\n min-width:360px;\n width:100%;\n height:100%;\n margin:0;\n padding:0;\n overflow: hidden;\n letter-spacing:normal;\n color:var(--fg);\n background-color:var(--bg);\n font-family:var(--font-regular);\n container-type: inline-size;\n }\n\n @container (min-width: 768px) {\n .only-large-screen {\n display:block;\n }\n .only-large-screen-flex {\n display:flex;\n }\n }`,\n ];\n }\n\n // Startup\n connectedCallback() {\n super.connectedCallback();\n\n if (this.loadFonts !== 'false') {\n const fontDescriptor = {\n family: 'Open Sans',\n style: 'normal',\n weight: '300',\n unicodeRange: 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD',\n };\n const fontWeight300 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UN_r8OUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontDescriptor.weight = '600';\n const fontWeight600 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UNirkOUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontWeight300.load().then((font) => { document.fonts.add(font); });\n fontWeight600.load().then((font) => { document.fonts.add(font); });\n }\n\n if (!this.showSummaryWhenCollapsed || !'true, false,'.includes(`${this.showSummaryWhenCollapsed},`)) { this.showSummaryWhenCollapsed = 'true'; }\n if (!this.layout || !'row, column,'.includes(`${this.layout},`)) { this.layout = 'row'; }\n if (!this.schemaStyle || !'tree, table,'.includes(`${this.schemaStyle},`)) { this.schemaStyle = 'tree'; }\n if (!this.theme || !'light, dark,'.includes(`${this.theme},`)) {\n this.theme = (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) ? 'light' : 'dark';\n }\n if (!this.defaultSchemaTab || !'example, schema, model,'.includes(`${this.defaultSchemaTab},`)) {\n this.defaultSchemaTab = 'example';\n } else if (this.defaultSchemaTab === 'model') {\n this.defaultSchemaTab = 'schema';\n }\n this.pathsExpanded = this.pathsExpanded === 'true';\n if (!this.schemaExpandLevel || this.schemaExpandLevel < 1) { this.schemaExpandLevel = 99999; }\n if (!this.schemaDescriptionExpanded || !'true, false,'.includes(`${this.schemaDescriptionExpanded},`)) { this.schemaDescriptionExpanded = 'false'; }\n if (!this.fillRequestFieldsWithExample || !'true, false,'.includes(`${this.fillRequestFieldsWithExample},`)) { this.fillRequestFieldsWithExample = 'true'; }\n if (!this.persistAuth || !'true, false,'.includes(`${this.persistAuth},`)) { this.persistAuth = 'false'; }\n if (!this.responseAreaHeight) { this.responseAreaHeight = '300px'; }\n\n if (!this.allowTry || !'true, false,'.includes(`${this.allowTry},`)) { this.allowTry = 'true'; }\n if (!this.apiKeyValue) { this.apiKeyValue = '-'; }\n if (!this.apiKeyLocation) { this.apiKeyLocation = 'header'; }\n if (!this.apiKeyName) { this.apiKeyName = ''; }\n\n if (!this.oauthReceiver) { this.oauthReceiver = 'oauth-receiver.html'; }\n if (!this.sortTags || !'true, false,'.includes(`${this.sortTags},`)) { this.sortTags = 'false'; }\n if (!this.sortEndpointsBy || !'method, path, summary,'.includes(`${this.sortEndpointsBy},`)) { this.sortEndpointsBy = 'path'; }\n if (!this.fontSize || !'default, large, largest,'.includes(`${this.fontSize},`)) { this.fontSize = 'default'; }\n\n if (!this.matchType || !'includes regex'.includes(this.matchType)) { this.matchType = 'includes'; }\n if (!this.matchPaths) { this.matchPaths = ''; }\n if (!this.removeEndpointsWithBadgeLabelAs) { this.removeEndpointsWithBadgeLabelAs = ''; }\n\n if (!this.allowSchemaDescriptionExpandToggle || !'true, false,'.includes(`${this.allowSchemaDescriptionExpandToggle},`)) { this.allowSchemaDescriptionExpandToggle = 'true'; }\n if (!this.fetchCredentials || !'omit, same-origin, include,'.includes(`${this.fetchCredentials},`)) { this.fetchCredentials = ''; }\n\n marked.setOptions({\n highlight: (code, lang) => {\n if (Prism.languages[lang]) {\n return Prism.highlight(code, Prism.languages[lang], lang);\n }\n return code;\n },\n });\n }\n\n render() {\n return mainBodyTemplate.call(this, true, this.pathsExpanded);\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (name === 'spec-url') {\n if (oldVal !== newVal) {\n // put it at the end of event-loop to load all the attributes\n window.setTimeout(async () => {\n await this.loadSpec(newVal);\n }, 0);\n }\n }\n if (name === 'match-paths' || name === 'match-type' || name === 'remove-endpoints-with-badge-label-as') {\n if (oldVal !== newVal) {\n window.setTimeout(async () => {\n await this.loadSpec(this.specUrl);\n }, 0);\n }\n }\n if (name === 'api-key-name' || name === 'api-key-location' || name === 'api-key-value') {\n let updateSelectedApiKey = false;\n let apiKeyName = '';\n let apiKeyLocation = '';\n let apiKeyValue = '';\n\n if (name === 'api-key-name') {\n if (this.getAttribute('api-key-location') && this.getAttribute('api-key-value')) {\n apiKeyName = newVal;\n apiKeyLocation = this.getAttribute('api-key-location');\n apiKeyValue = this.getAttribute('api-key-value');\n updateSelectedApiKey = true;\n }\n } else if (name === 'api-key-location') {\n if (this.getAttribute('api-key-name') && this.getAttribute('api-key-value')) {\n apiKeyLocation = newVal;\n apiKeyName = this.getAttribute('api-key-name');\n apiKeyValue = this.getAttribute('api-key-value');\n updateSelectedApiKey = true;\n }\n } else if (name === 'api-key-value') {\n if (this.getAttribute('api-key-name') && this.getAttribute('api-key-location')) {\n apiKeyValue = newVal;\n apiKeyLocation = this.getAttribute('api-key-location');\n apiKeyName = this.getAttribute('api-key-name');\n updateSelectedApiKey = true;\n }\n }\n\n if (updateSelectedApiKey) {\n if (this.resolvedSpec) {\n const rapiDocApiKey = this.resolvedSpec.securitySchemes.find((v) => v.securitySchemeId === rapidocApiKey);\n if (!rapiDocApiKey) {\n this.resolvedSpec.securitySchemes.push({\n apiKeyId: rapidocApiKey,\n description: 'api-key provided in rapidoc element attributes',\n type: 'apiKey',\n name: apiKeyName,\n in: apiKeyLocation,\n value: apiKeyValue,\n finalKeyValue: apiKeyValue,\n });\n } else {\n rapiDocApiKey.name = apiKeyName;\n rapiDocApiKey.in = apiKeyLocation;\n rapiDocApiKey.value = apiKeyValue;\n rapiDocApiKey.finalKeyValue = apiKeyValue;\n }\n this.requestUpdate();\n }\n }\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n\n onSpecUrlChange() {\n this.setAttribute('spec-url', this.shadowRoot.getElementById('spec-url').value);\n }\n\n // Public Method\n async loadSpec(specUrl) {\n if (!specUrl) {\n return;\n }\n try {\n this.resolvedSpec = {\n specLoadError: false,\n isSpecLoading: true,\n tags: [],\n };\n this.loading = true;\n this.loadFailed = false;\n this.requestUpdate();\n const spec = await ProcessSpec.call(\n this,\n specUrl,\n this.generateMissingTags === 'true',\n this.sortTags === 'true',\n this.sortSchemas === 'true',\n this.getAttribute('sort-endpoints-by'),\n this.getAttribute('api-key-name'),\n this.getAttribute('api-key-location'),\n this.getAttribute('api-key-value'),\n this.getAttribute('server-url'),\n this.matchPaths,\n this.matchType,\n this.removeEndpointsWithBadgeLabelAs,\n );\n this.loading = false;\n this.afterSpecParsedAndValidated(spec);\n } catch (err) {\n this.loading = false;\n this.loadFailed = true;\n this.resolvedSpec = null;\n console.error(`RapiDoc: Unable to resolve the API spec.. ${err.message}`); // eslint-disable-line no-console\n }\n }\n\n // Public Method - to update security-scheme of type http\n setHttpUserNameAndPassword(securitySchemeId, username, password) {\n return applyApiKey.call(this, securitySchemeId, username, password);\n }\n\n // Public Method - to update security-scheme of type apiKey or OAuth\n setApiKey(securitySchemeId, apiKeyValue) {\n return applyApiKey.call(this, securitySchemeId, '', '', apiKeyValue);\n }\n\n // Public Method\n removeAllSecurityKeys() {\n return onClearAllApiKeys.call(this);\n }\n\n // Public Method\n setApiServer(apiServerUrl) {\n // return apiServerUrl;\n return setApiServer.call(this, apiServerUrl);\n }\n\n async afterSpecParsedAndValidated(spec) {\n this.resolvedSpec = spec;\n this.selectedServer = undefined;\n if (this.defaultApiServerUrl) {\n if (this.defaultApiServerUrl === this.serverUrl) {\n this.selectedServer = {\n url: this.serverUrl,\n computedUrl: this.serverUrl,\n };\n } else if (this.resolvedSpec.servers) {\n this.selectedServer = this.resolvedSpec.servers.find((v) => (v.url === this.defaultApiServerUrl));\n }\n }\n if (!this.selectedServer) {\n if (this.resolvedSpec.servers) {\n this.selectedServer = this.resolvedSpec.servers[0]; // eslint-disable-line prefer-destructuring\n }\n }\n this.requestUpdate();\n // eslint-disable-next-line no-await-in-loop\n while (!await this.updateComplete);\n const specLoadedEvent = new CustomEvent('spec-loaded', { detail: spec });\n this.dispatchEvent(specLoadedEvent);\n }\n\n // Called by anchor tags created using markdown\n handleHref(e) {\n if (e.target.tagName.toLowerCase() === 'a') {\n if (e.target.getAttribute('href').startsWith('#')) {\n const gotoEl = this.shadowRoot.getElementById(e.target.getAttribute('href').replace('#', ''));\n if (gotoEl) {\n gotoEl.scrollIntoView({ behavior: 'auto', block: 'start' });\n }\n }\n }\n }\n}\ncustomElements.define('rapi-doc-mini', RapiDocMini);\n","import { html } from 'lit';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js'; // eslint-disable-line import/extensions\nimport { marked } from 'marked';\n\n// Templates\nimport overviewTemplate from '~/templates/overview-template';\nimport headerTemplate from '~/templates/header-template';\nimport { schemaInObjectNotation, generateExample, standardizeExample } from '~/utils/schema-utils';\nimport '~/components/json-tree';\nimport '~/components/schema-tree';\nimport SetTheme from '~/utils/theme';\nimport { isValidHexColor } from '~/utils/color-utils';\n\n/* eslint-disable indent */\n// Json Schema Nav Template\nfunction jsonSchemaNavTemplate() {\n return html`\n \n `;\n}\n\n// Json Schema Body Template\nfunction jsonSchemaBodyTemplate() {\n return html`\n ${this.showInfo === 'true' ? overviewTemplate.call(this) : ''}\n
    \n ${this.resolvedSpec.schemaAndExamples.map((jSchemaBody) => {\n const examplesObj = generateExample(jSchemaBody.schema, 'json', standardizeExample(jSchemaBody.examples), standardizeExample(jSchemaBody.example), true, false, 'json', true);\n jSchemaBody.selectedExample = examplesObj[0]?.exampleId;\n return html`\n
    \n
    \n
    ${jSchemaBody.name}
    \n ${unsafeHTML(marked(jSchemaBody.description || ''))}\n
    \n
    \n
    \n \n
    \n
    \n ${examplesObj.length > 1\n ? html``\n : html`
    ${examplesObj[0].exampleSummary}
    `\n }\n ${examplesObj.map((v) => html`\n `)\n }\n
    \n
    \n
    `;\n })\n }\n
    \n `;\n}\n/* eslint-enable indent */\n\n// Json Schema Root Template\nexport default function jsonSchemaViewerTemplate(isMini = false) {\n// export default function jsonSchemaViewerTemplate(isMini = false, pathsExpanded = false) {\n if (!this.resolvedSpec) {\n return '';\n }\n const newTheme = {\n bg1: isValidHexColor(this.bgColor) ? this.bgColor : '',\n fg1: isValidHexColor(this.textColor) ? this.textColor : '',\n headerColor: isValidHexColor(this.headerColor) ? this.headerColor : '',\n primaryColor: isValidHexColor(this.primaryColor) ? this.primaryColor : '',\n navBgColor: isValidHexColor(this.navBgColor) ? this.navBgColor : '',\n navTextColor: isValidHexColor(this.navTextColor) ? this.navTextColor : '',\n navHoverBgColor: isValidHexColor(this.navHoverBgColor) ? this.navHoverBgColor : '',\n navHoverTextColor: isValidHexColor(this.navHoverTextColor) ? this.navHoverTextColor : '',\n navAccentColor: isValidHexColor(this.navAccentColor) ? this.navAccentColor : '',\n navAccenttextColor: isValidHexColor(this.navAccentTextColor) ? this.navAccentTextColor : '',\n };\n /* eslint-disable indent */\n if (this.resolvedSpec.specLoadError) {\n if (isMini) {\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n
    ${this.resolvedSpec.info.description}
    \n `;\n }\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n \n ${headerTemplate.call(this)}\n

    Header

    \n
    \n \n
    \n

    ${this.resolvedSpec.info.title}

    \n
    ${this.resolvedSpec.info.description}
    \n
    \n
    \n `;\n }\n if (this.resolvedSpec.isSpecLoading) {\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n
    \n \n
    \n
    \n
    \n
    \n `;\n }\n\n return html`\n ${this.theme === 'dark' ? SetTheme.call(this, 'dark', newTheme) : SetTheme.call(this, 'light', newTheme)}\n\n \n ${this.showHeader === 'false' ? '' : headerTemplate.call(this)}\n \n
    \n\n \n ${jsonSchemaNavTemplate.call(this)}\n\n \n
    \n \n
    \n ${this.loading === true\n ? html`
    `\n : html`\n ${this.loadFailed === true\n ? html`
    Unable to load the Spec
    `\n : html`\n
    { this.handleHref(e); }}\">\n ${jsonSchemaBodyTemplate.call(this)}\n
    \n `\n }`\n }\n
    \n \n
    \n
    \n `;\n}\n/* eslint-enable indent */\n","import { css, LitElement } from 'lit';\nimport { marked } from 'marked';\nimport Prism from 'prismjs';\nimport 'prismjs/components/prism-css';\nimport 'prismjs/components/prism-yaml';\nimport 'prismjs/components/prism-go';\nimport 'prismjs/components/prism-java';\nimport 'prismjs/components/prism-json';\nimport 'prismjs/components/prism-bash';\nimport 'prismjs/components/prism-python';\nimport 'prismjs/components/prism-http';\nimport 'prismjs/components/prism-csharp';\n\n// Styles\nimport FontStyles from '~/styles/font-styles';\nimport InputStyles from '~/styles/input-styles';\nimport FlexStyles from '~/styles/flex-styles';\nimport TableStyles from '~/styles/table-styles';\nimport PrismStyles from '~/styles/prism-styles';\nimport TabStyles from '~/styles/tab-styles';\nimport NavStyles from '~/styles/nav-styles';\nimport InfoStyles from '~/styles/info-styles';\n\nimport EndpointStyles from '~/styles/endpoint-styles';\nimport ProcessSpec from '~/utils/spec-parser';\nimport jsonSchemaViewerTemplate from '~/templates/json-schema-viewer-template';\n\nexport default class JsonSchemaViewer extends LitElement {\n constructor() {\n super();\n this.isMini = false;\n this.updateRoute = 'false';\n this.renderStyle = 'focused';\n this.showHeader = 'true';\n this.allowAdvancedSearch = 'false';\n this.selectedExampleForEachSchema = {};\n }\n\n static get properties() {\n return {\n // Spec\n specUrl: { type: String, attribute: 'spec-url' },\n\n // Schema Styles\n schemaStyle: { type: String, attribute: 'schema-style' },\n schemaExpandLevel: { type: Number, attribute: 'schema-expand-level' },\n schemaDescriptionExpanded: { type: String, attribute: 'schema-description-expanded' },\n allowSchemaDescriptionExpandToggle: { type: String, attribute: 'allow-schema-description-expand-toggle' },\n\n // Hide/show Sections\n showHeader: { type: String, attribute: 'show-header' },\n showSideNav: { type: String, attribute: 'show-side-nav' },\n showInfo: { type: String, attribute: 'show-info' },\n\n // Allow or restrict features\n allowSpecUrlLoad: { type: String, attribute: 'allow-spec-url-load' },\n allowSpecFileLoad: { type: String, attribute: 'allow-spec-file-load' },\n allowSpecFileDownload: { type: String, attribute: 'allow-spec-file-download' },\n allowSearch: { type: String, attribute: 'allow-search' },\n\n // Main Colors and Font\n theme: { type: String },\n bgColor: { type: String, attribute: 'bg-color' },\n textColor: { type: String, attribute: 'text-color' },\n primaryColor: { type: String, attribute: 'primary-color' },\n fontSize: { type: String, attribute: 'font-size' },\n regularFont: { type: String, attribute: 'regular-font' },\n monoFont: { type: String, attribute: 'mono-font' },\n loadFonts: { type: String, attribute: 'load-fonts' },\n\n // Internal Properties\n loading: { type: Boolean }, // indicates spec is being loaded\n };\n }\n\n static get styles() {\n return [\n FontStyles,\n InputStyles,\n FlexStyles,\n TableStyles,\n EndpointStyles,\n PrismStyles,\n TabStyles,\n NavStyles,\n InfoStyles,\n css`\n :host {\n all: initial;\n display:flex;\n flex-direction: column;\n min-width:360px;\n width:100%;\n height:100%;\n margin:0;\n padding:0;\n overflow: hidden;\n letter-spacing:normal;\n color:var(--fg);\n background-color:var(--bg);\n font-family:var(--font-regular);\n container-type: inline-size;\n }\n .body {\n display:flex;\n height:100%;\n width:100%;\n overflow:hidden;\n }\n .nav-bar {\n width: 230px;\n display:flex;\n }\n\n .main-content { \n margin:0;\n padding: 16px; \n display:block;\n flex:1;\n height:100%;\n overflow-y: auto;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: var(--border-color) transparent;\n }\n .main-content-inner--view-mode {\n padding: 0 8px;\n }\n .main-content::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n }\n .main-content::-webkit-scrollbar-track {\n background:transparent;\n }\n .main-content::-webkit-scrollbar-thumb {\n background-color: var(--border-color);\n }\n .main-header {\n background-color:var(--header-bg);\n color:var(--header-fg);\n width:100%;\n }\n .header-title {\n font-size:calc(var(--font-size-regular) + 8px); \n padding:0 8px;\n }\n input.header-input{\n background:var(--header-color-darker);\n color:var(--header-fg);\n border:1px solid var(--header-color-border);\n flex:1; \n padding-right:24px;\n border-radius:3px;\n }\n input.header-input::placeholder {\n opacity:0.4;\n }\n .loader {\n margin: 16px auto 16px auto; \n border: 4px solid var(--bg3);\n border-radius: 50%;\n border-top: 4px solid var(--primary-color);\n width: 36px;\n height: 36px;\n animation: spin 2s linear infinite;\n }\n @container (min-width: 768px) {\n .only-large-screen{\n display:block;\n }\n .only-large-screen-flex {\n display:flex;\n }\n }`,\n ];\n }\n\n // Startup\n connectedCallback() {\n super.connectedCallback();\n const parent = this.parentElement;\n if (parent) {\n if (parent.offsetWidth === 0 && parent.style.width === '') {\n parent.style.width = '100vw';\n }\n if (parent.offsetHeight === 0 && parent.style.height === '') {\n parent.style.height = '100vh';\n }\n if (parent.tagName === 'BODY') {\n if (!parent.style.marginTop) { parent.style.marginTop = '0'; }\n if (!parent.style.marginRight) { parent.style.marginRight = '0'; }\n if (!parent.style.marginBottom) { parent.style.marginBottom = '0'; }\n if (!parent.style.marginLeft) { parent.style.marginLeft = '0'; }\n }\n }\n\n if (this.loadFonts !== 'false') {\n const fontDescriptor = {\n family: 'Open Sans',\n style: 'normal',\n weight: '300',\n unicodeRange: 'U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD',\n };\n const fontWeight300 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UN_r8OUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontDescriptor.weight = '600';\n const fontWeight600 = new FontFace(\n 'Open Sans',\n \"url(https://fonts.gstatic.com/s/opensans/v18/mem5YaGs126MiZpBA-UNirkOUuhpKKSTjw.woff2) format('woff2')\",\n fontDescriptor,\n );\n fontWeight300.load().then((font) => { document.fonts.add(font); });\n fontWeight600.load().then((font) => { document.fonts.add(font); });\n }\n\n this.renderStyle = 'focused';\n this.pathsExpanded = this.pathsExpanded === 'true';\n\n if (!this.showInfo || !'true, false,'.includes(`${this.showInfo},`)) { this.showInfo = 'true'; }\n if (!this.showSideNav || !'true false'.includes(this.showSideNav)) { this.showSideNav = 'true'; }\n if (!this.showHeader || !'true, false,'.includes(`${this.showHeader},`)) { this.showHeader = 'true'; }\n\n if (!this.schemaStyle || !'tree, table,'.includes(`${this.schemaStyle},`)) { this.schemaStyle = 'tree'; }\n if (!this.theme || !'light, dark,'.includes(`${this.theme},`)) {\n this.theme = (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) ? 'light' : 'dark';\n }\n if (!this.allowSearch || !'true, false,'.includes(`${this.allowSearch},`)) { this.allowSearch = 'true'; }\n if (!this.schemaExpandLevel || this.schemaExpandLevel < 1) { this.schemaExpandLevel = 99999; }\n if (!this.schemaDescriptionExpanded || !'true, false,'.includes(`${this.schemaDescriptionExpanded},`)) { this.schemaDescriptionExpanded = 'false'; }\n if (!this.fontSize || !'default, large, largest,'.includes(`${this.fontSize},`)) { this.fontSize = 'default'; }\n if (!this.matchType || !'includes regex'.includes(this.matchType)) { this.matchType = 'includes'; }\n if (!this.allowSchemaDescriptionExpandToggle || !'true, false,'.includes(`${this.allowSchemaDescriptionExpandToggle},`)) { this.allowSchemaDescriptionExpandToggle = 'true'; }\n\n marked.setOptions({\n highlight: (code, lang) => {\n if (Prism.languages[lang]) {\n return Prism.highlight(code, Prism.languages[lang], lang);\n }\n return code;\n },\n });\n }\n\n render() {\n return jsonSchemaViewerTemplate.call(this, true, false, false, this.pathsExpanded);\n }\n\n attributeChangedCallback(name, oldVal, newVal) {\n if (name === 'spec-url') {\n if (oldVal !== newVal) {\n // put it at the end of event-loop to load all the attributes\n window.setTimeout(async () => {\n await this.loadSpec(newVal);\n }, 0);\n }\n }\n super.attributeChangedCallback(name, oldVal, newVal);\n }\n\n onSpecUrlChange() {\n this.setAttribute('spec-url', this.shadowRoot.getElementById('spec-url').value);\n }\n\n onSearchChange(e) {\n // Todo: Filter Search\n this.matchPaths = e.target.value;\n }\n\n // Public Method\n async loadSpec(specUrl) {\n if (!specUrl) {\n return;\n }\n try {\n this.resolvedSpec = {\n specLoadError: false,\n isSpecLoading: true,\n tags: [],\n };\n this.loading = true;\n this.loadFailed = false;\n this.requestUpdate();\n const spec = await ProcessSpec.call(\n this,\n specUrl,\n this.generateMissingTags === 'true',\n this.sortTags === 'true',\n this.sortSchemas === 'true',\n this.getAttribute('sort-endpoints-by'),\n this.getAttribute('match-paths'),\n this.getAttribute('match-type'),\n this.getAttribute('remove-endpoints-with-badge-label-as'),\n );\n this.loading = false;\n this.afterSpecParsedAndValidated(spec);\n } catch (err) {\n this.loading = false;\n this.loadFailed = true;\n this.resolvedSpec = null;\n console.error(`RapiDoc: Unable to resolve the API spec.. ${err.message}`); // eslint-disable-line no-console\n }\n }\n\n async afterSpecParsedAndValidated(spec) {\n this.resolvedSpec = spec;\n const specLoadedEvent = new CustomEvent('spec-loaded', { detail: spec });\n this.dispatchEvent(specLoadedEvent);\n }\n\n // Called by anchor tags created using markdown\n handleHref(e) {\n if (e.target.tagName.toLowerCase() === 'a') {\n if (e.target.getAttribute('href').startsWith('#')) {\n const gotoEl = this.shadowRoot.getElementById(e.target.getAttribute('href').replace('#', ''));\n if (gotoEl) {\n gotoEl.scrollIntoView({ behavior: 'auto', block: 'start' });\n }\n }\n }\n }\n\n // Example Dropdown @change Handler\n onSelectExample(e) {\n const exampleContainerEl = e.target.closest('.json-schema-example-panel');\n const exampleEls = [...exampleContainerEl.querySelectorAll('.example')];\n exampleEls.forEach((v) => {\n v.style.display = v.dataset.example === e.target.value ? 'flex' : 'none';\n });\n }\n\n async scrollToEventTarget(event) {\n const navEl = event.currentTarget;\n if (!navEl.dataset.contentId) {\n return;\n }\n const contentEl = this.shadowRoot.getElementById(navEl.dataset.contentId);\n if (contentEl) {\n contentEl.scrollIntoView({ behavior: 'auto', block: 'start' });\n }\n }\n}\ncustomElements.define('json-schema-viewer', JsonSchemaViewer);\n"],"names":[],"sourceRoot":""} \ No newline at end of file From 72a54de7074907198b585e1bfea0f90a1b87379a Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 02:17:34 +0300 Subject: [PATCH 07/30] fix(demo_data): set default passwords for staff and superuser in demo data Ensure default passwords are assigned to demo users for consistent behavior during testing and development. --- engine/core/management/commands/demo_data.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 8e649d55..89cced28 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -104,6 +104,8 @@ class Command(BaseCommand): is_active=True, is_verified=True, ) + if _: + user.set_password("Staff!Demo888") if not user.groups.filter(name="E-Commerce Admin").exists(): user.groups.add(Group.objects.get(name="E-Commerce Admin")) return user @@ -120,6 +122,8 @@ class Command(BaseCommand): is_active=True, is_verified=True, ) + if _: + user.set_password("Super!Demo888") return user def _load_demo_data(self) -> None: From 6311993b14a3b74189096571515c40d3453c2a26 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 03:06:17 +0300 Subject: [PATCH 08/30] refactor(core): improve type checking and fix password handling in demo data Replaced `pyright:ignore` with `ty:ignore` for better compatibility and accuracy in type annotations. Removed inline passwords during user creation and updated logic to securely set and save passwords afterward. --- engine/core/management/commands/demo_data.py | 10 +++++----- engine/core/views.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 89cced28..fda90940 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -97,7 +97,6 @@ class Command(BaseCommand): def staff_user(self): user, _ = User.objects.get_or_create( email=f"staff@{DEMO_EMAIL_DOMAIN}", - password="Staff!Demo888", first_name="Alice", last_name="Schon", is_staff=True, @@ -106,6 +105,7 @@ class Command(BaseCommand): ) if _: user.set_password("Staff!Demo888") + user.save() if not user.groups.filter(name="E-Commerce Admin").exists(): user.groups.add(Group.objects.get(name="E-Commerce Admin")) return user @@ -114,7 +114,6 @@ class Command(BaseCommand): def super_user(self): user, _ = User.objects.get_or_create( email=f"super@{DEMO_EMAIL_DOMAIN}", - password="Super!Demo888", first_name="Bob", last_name="Schon", is_superuser=True, @@ -124,6 +123,7 @@ class Command(BaseCommand): ) if _: user.set_password("Super!Demo888") + user.save() return user def _load_demo_data(self) -> None: @@ -644,11 +644,11 @@ class Command(BaseCommand): is_static_page=post_data.get("is_static_page", False), ) if "title_ru" in post_data: - post.title_ru_ru = post_data["title_ru"] + post.title_ru_ru = post_data["title_ru"] # ty:ignore[unresolved-attribute] if content_ru: - post.content_ru_ru = content_ru + post.content_ru_ru = content_ru # ty:ignore[unresolved-attribute] if "meta_description_ru" in post_data: - post.meta_description_ru_ru = post_data["meta_description_ru"] + post.meta_description_ru_ru = post_data["meta_description_ru"] # ty:ignore[unresolved-attribute] post.save() for tag_name in post_data.get("tags", []): diff --git a/engine/core/views.py b/engine/core/views.py index 7f1b6cde..908acc41 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -97,7 +97,7 @@ def sitemap_index(request, *args, **kwargs): # noinspection PyTypeChecker -sitemap_index.__doc__ = _( # pyright: ignore[reportUnknownVariableType] +sitemap_index.__doc__ = _( # ty:ignore[invalid-assignment] "Handles the request for the sitemap index and returns an XML response. " "It ensures the response includes the appropriate content type header for XML." ) @@ -112,7 +112,7 @@ def sitemap_detail(request, *args, **kwargs): # noinspection PyTypeChecker -sitemap_detail.__doc__ = _( # pyright: ignore[reportUnknownVariableType] +sitemap_detail.__doc__ = _( # ty:ignore[invalid-assignment] "Handles the detailed view response for a sitemap. " "This function processes the request, fetches the appropriate " "sitemap detail response, and sets the Content-Type header for XML." From 1253496e30ea3cd8cb6cc43eb78d92a2d5938305 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 15 Feb 2026 12:21:39 +0300 Subject: [PATCH 09/30] feat(blog): add multilingual demo blog posts showcasing Schon's features and capabilities Includes English and Russian versions for key topics such as platform overview, bilingual experience, gemstone certification guide, holiday gift guide, and spring 2026 collection. These posts demonstrate Schon's multilingual support and flexibility in presenting rich content. --- engine/core/fixtures/demo.json | 204 +++++++++++++++++- .../demo_blog_posts/behind-the-platform.en.md | 77 +++++++ .../demo_blog_posts/behind-the-platform.ru.md | 77 +++++++ .../bilingual-experience.en.md | 34 +++ .../bilingual-experience.ru.md | 34 +++ .../gemstone-certification-guide.en.md | 78 +++++++ .../gemstone-certification-guide.ru.md | 78 +++++++ .../demo_blog_posts/holiday-gift-guide.en.md | 58 +++++ .../demo_blog_posts/holiday-gift-guide.ru.md | 58 +++++ .../spring-2026-collection.en.md | 35 +++ .../spring-2026-collection.ru.md | 35 +++ 11 files changed, 767 insertions(+), 1 deletion(-) create mode 100644 engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md create mode 100644 engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md create mode 100644 engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md diff --git a/engine/core/fixtures/demo.json b/engine/core/fixtures/demo.json index 34ea4859..e3a619c3 100644 --- a/engine/core/fixtures/demo.json +++ b/engine/core/fixtures/demo.json @@ -645,12 +645,169 @@ "price": 2800, "purchase_price": 2250, "quantity": 4 + }, + { + "name": "Marquise Diamond 1.0ct D VVS2", + "name_ru": "Бриллиант огранки «Маркиз» 1.0 карата D VVS2", + "description": "Elegant 1.0 carat marquise cut diamond with D color and VVS2 clarity. The elongated shape creates an illusion of greater size. GIA certified with excellent polish.", + "description_ru": "Элегантный бриллиант огранки «Маркиз» 1.0 карата с цветом D и чистотой VVS2. Удлинённая форма создаёт иллюзию большего размера. Сертификат GIA с превосходной полировкой.", + "category": "Diamonds", + "brand": "Sparkle & Stone", + "partnumber": "DIA-MQ-100-D-VVS2", + "price": 12500, + "purchase_price": 10000, + "quantity": 2 + }, + { + "name": "Asscher Cut Diamond 2.2ct E VS1", + "name_ru": "Бриллиант огранки «Ашер» 2.2 карата E VS1", + "description": "Sophisticated 2.2 carat Asscher cut diamond with E color and VS1 clarity. Art Deco inspired step-cut with mesmerizing windmill pattern. GIA certified.", + "description_ru": "Утончённый бриллиант огранки «Ашер» 2.2 карата с цветом E и чистотой VS1. Ступенчатая огранка в стиле ар-деко с завораживающим рисунком «ветряная мельница». Сертификат GIA.", + "category": "Diamonds", + "brand": "Sparkle & Stone", + "partnumber": "DIA-AS-220-E-VS1", + "price": 28000, + "purchase_price": 22500, + "quantity": 1 + }, + { + "name": "Thai Ruby 1.5ct Vivid Red", + "name_ru": "Тайский рубин 1.5 карата насыщенно-красный", + "description": "Exceptional 1.5 carat Thai ruby with vivid red color and excellent transparency. Classic Siamese origin known for deep saturation. Minor heat treatment.", + "description_ru": "Исключительный тайский рубин 1.5 карата с насыщенным красным цветом и отличной прозрачностью. Классическое сиамское происхождение, известное глубокой насыщенностью. Незначительная термообработка.", + "category": "Rubies", + "brand": "Crimson Vault", + "partnumber": "RUB-THA-150-VR", + "price": 6200, + "purchase_price": 5000, + "quantity": 3 + }, + { + "name": "Burmese Ruby 1.0ct Unheated", + "name_ru": "Бирманский рубин 1.0 карата без нагрева", + "description": "Rare 1.0 carat unheated Burmese ruby with natural vivid red color. Mogok origin with silk inclusions creating a soft glow. GRS certified no-heat.", + "description_ru": "Редкий бирманский рубин 1.0 карата без нагрева с природным насыщенным красным цветом. Происхождение Могок с шёлковыми включениями, создающими мягкое свечение. Сертификат GRS «без нагрева».", + "category": "Rubies", + "brand": "Crimson Vault", + "partnumber": "RUB-BUR-100-UH", + "price": 18000, + "purchase_price": 14500, + "quantity": 1 + }, + { + "name": "Pink Sapphire Pair 1.2ct Each", + "name_ru": "Пара розовых сапфиров по 1.2 карата", + "description": "Perfectly matched pair of 1.2 carat pink sapphires ideal for earrings. Identical color saturation and oval cut. Sri Lankan origin.", + "description_ru": "Идеально подобранная пара розовых сапфиров по 1.2 карата, идеальна для серёг. Идентичная насыщенность цвета и овальная огранка. Происхождение Шри-Ланка.", + "category": "Sapphires", + "brand": "Crimson Vault", + "partnumber": "SAP-PNK-PAIR-120", + "price": 5800, + "purchase_price": 4650, + "quantity": 2 + }, + { + "name": "Afghan Emerald 1.8ct Panjshir", + "name_ru": "Афганский изумруд 1.8 карата Панджшер", + "description": "Exceptional 1.8 carat emerald from Afghanistan's legendary Panjshir Valley. Vivid green with remarkable clarity for an emerald. Minor oil treatment.", + "description_ru": "Исключительный изумруд 1.8 карата из легендарной Панджшерской долины Афганистана. Яркий зелёный с выдающейся для изумруда чистотой. Незначительная масляная обработка.", + "category": "Emeralds", + "brand": "Evergreen Gems", + "partnumber": "EME-AFG-180-PJ", + "price": 12000, + "purchase_price": 9600, + "quantity": 2 + }, + { + "name": "Ethiopian Emerald 2.5ct Vivid", + "name_ru": "Эфиопский изумруд 2.5 карата насыщенный", + "description": "Striking 2.5 carat Ethiopian emerald from the newly discovered deposits. Excellent clarity with vivid green color rivaling Colombian stones. Untreated.", + "description_ru": "Впечатляющий эфиопский изумруд 2.5 карата из недавно открытых месторождений. Превосходная чистота с насыщенным зелёным цветом, соперничающим с колумбийскими камнями. Без обработки.", + "category": "Emeralds", + "brand": "Evergreen Gems", + "partnumber": "EME-ETH-250", + "price": 9500, + "purchase_price": 7600, + "quantity": 3 + }, + { + "name": "Colombian Emerald Pair 1.0ct Each", + "name_ru": "Пара колумбийских изумрудов по 1.0 карата", + "description": "Matched pair of 1.0 carat Colombian emeralds from the Muzo district. Identical deep green color with characteristic jardín. Perfect for earrings.", + "description_ru": "Подобранная пара колумбийских изумрудов по 1.0 карата из района Музо. Идентичный глубокий зелёный цвет с характерным «жардин». Идеальна для серёг.", + "category": "Emeralds", + "brand": "Evergreen Gems", + "partnumber": "EME-COL-PAIR-100", + "price": 14000, + "purchase_price": 11200, + "quantity": 2 + }, + { + "name": "Ceylon Sapphire 5.0ct Unheated", + "name_ru": "Цейлонский сапфир 5.0 карата без нагрева", + "description": "Magnificent 5.0 carat unheated Ceylon sapphire with medium-deep blue color. Exceptional size for an untreated stone. Cushion cut with GRS certificate.", + "description_ru": "Великолепный цейлонский сапфир 5.0 карата без нагрева средне-глубокого синего цвета. Исключительный размер для необработанного камня. Огранка «Кушон» с сертификатом GRS.", + "category": "Sapphires", + "brand": "Lumina Treasures", + "partnumber": "SAP-CEY-500-UH", + "price": 45000, + "purchase_price": 36000, + "quantity": 1 + }, + { + "name": "Baroque South Sea Pearl 16mm White", + "name_ru": "Барочный жемчуг Южных морей 16мм белый", + "description": "Extraordinary 16mm baroque South Sea pearl with lustrous white body and orient overtones. Unique organic shape makes each piece one-of-a-kind. AAA grade.", + "description_ru": "Выдающийся барочный жемчуг Южных морей 16мм с блестящим белым телом и перламутровыми переливами. Уникальная органическая форма делает каждый экземпляр единственным в своём роде. Класс AAA.", + "category": "Pearls", + "brand": "Oceanic Pearls", + "partnumber": "PRL-BAR-16MM-WH", + "price": 6500, + "purchase_price": 5200, + "quantity": 3 + }, + { + "name": "Madeira Citrine 8.5ct", + "name_ru": "Цитрин «Мадейра» 8.5 карата", + "description": "Premium 8.5 carat Madeira citrine with coveted deep reddish-orange color. The finest citrine variety, named after the famous wine. Emerald cut with exceptional clarity.", + "description_ru": "Премиальный цитрин «Мадейра» 8.5 карата с желанным глубоким красновато-оранжевым цветом. Лучшая разновидность цитрина, названная в честь знаменитого вина. Изумрудная огранка с исключительной чистотой.", + "category": "Amethyst", + "brand": "Crystal Kingdom", + "partnumber": "AME-CIT-850-MD", + "price": 950, + "purchase_price": 760, + "quantity": 4 + }, + { + "name": "Rose de France Amethyst 14.0ct", + "name_ru": "Аметист «Роз де Франс» 14.0 карата", + "description": "Delicate 14.0 carat Rose de France amethyst with soft lavender-pink color. Oval cut with excellent transparency. Named after the French tradition of pale amethyst jewelry.", + "description_ru": "Нежный аметист «Роз де Франс» 14.0 карата мягкого лавандово-розового цвета. Овальная огранка с отличной прозрачностью. Назван в честь французской традиции ювелирных изделий с бледным аметистом.", + "category": "Amethyst", + "brand": "Crystal Kingdom", + "partnumber": "AME-RDF-1400", + "price": 420, + "purchase_price": 340, + "quantity": 6 + }, + { + "name": "Prasiolite 11.2ct Green Amethyst", + "name_ru": "Празиолит 11.2 карата зелёный аметист", + "description": "Rare 11.2 carat natural prasiolite (green amethyst) with subtle mint-green color. Cushion cut from a limited Brazilian deposit. Increasingly sought after by collectors.", + "description_ru": "Редкий природный празиолит 11.2 карата (зелёный аметист) с нежным мятно-зелёным цветом. Огранка «Кушон» из ограниченного бразильского месторождения. Всё более востребован коллекционерами.", + "category": "Amethyst", + "brand": "Crystal Kingdom", + "partnumber": "AME-PRS-1120", + "price": 380, + "purchase_price": 300, + "quantity": 5 } ], "post_tags": [ {"tag_name": "legal", "name": "Legal", "name_ru": "Правовые документы"}, {"tag_name": "info", "name": "Information", "name_ru": "Информация"}, - {"tag_name": "company", "name": "Company", "name_ru": "О компании"} + {"tag_name": "company", "name": "Company", "name_ru": "О компании"}, + {"tag_name": "news", "name": "News", "name_ru": "Новости"} ], "blog_posts": [ { @@ -706,6 +863,51 @@ "is_static_page": true, "tags": ["info"], "content_file": "shipping-info" + }, + { + "title": "New Collection: Spring 2026 Gemstone Arrivals", + "title_ru": "Новая коллекция: поступление драгоценных камней весна 2026", + "meta_description": "Discover our Spring 2026 collection featuring new emeralds, diamond cuts, and rare quartz varieties", + "meta_description_ru": "Откройте нашу весеннюю коллекцию 2026 с новыми изумрудами, огранками бриллиантов и редкими кварцами", + "is_static_page": false, + "tags": ["news", "company"], + "content_file": "spring-2026-collection" + }, + { + "title": "Now Available in Russian: Full Bilingual Shopping Experience", + "title_ru": "Теперь на русском: полноценный двуязычный шоппинг", + "meta_description": "Our store now offers a complete bilingual experience in English and Russian", + "meta_description_ru": "Наш магазин теперь предлагает полноценный двуязычный опыт на английском и русском", + "is_static_page": false, + "tags": ["news", "company"], + "content_file": "bilingual-experience" + }, + { + "title": "Understanding Gemstone Certification: A Buyer's Guide", + "title_ru": "Сертификация драгоценных камней: руководство покупателя", + "meta_description": "Learn about GIA, GRS, and other gemological laboratories and why certification matters", + "meta_description_ru": "Узнайте о GIA, GRS и других геммологических лабораториях и важности сертификации", + "is_static_page": false, + "tags": ["info"], + "content_file": "gemstone-certification-guide" + }, + { + "title": "Holiday Gift Guide: Top Gemstones Under $5,000", + "title_ru": "Подарочный гид: лучшие драгоценные камни до $5 000", + "meta_description": "Our curated selection of the most impressive gemstones under $5,000", + "meta_description_ru": "Наша подборка самых впечатляющих драгоценных камней стоимостью до $5 000", + "is_static_page": false, + "tags": ["news"], + "content_file": "holiday-gift-guide" + }, + { + "title": "Behind the Platform: How Schon Powers This Store", + "title_ru": "За кулисами платформы: как Schon обеспечивает работу этого магазина", + "meta_description": "A technical look at the Schon e-commerce platform and why it's the right choice for your business", + "meta_description_ru": "Техническое знакомство с платформой Schon и почему она подходит для вашего бизнеса", + "is_static_page": false, + "tags": ["company"], + "content_file": "behind-the-platform" } ], "vendor": { diff --git a/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md b/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md new file mode 100644 index 00000000..276dfdbd --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md @@ -0,0 +1,77 @@ +# Behind the Platform: How Schon Powers This Store + +*Published: December 20, 2025* + +Ever wondered what runs behind the scenes of an online gemstone store? In this post, we pull back the curtain on the technology that powers the Schon Demo Store — and explain why we believe Schon is the right foundation for your next e-commerce project. + +## The Challenge of Gemstone E-Commerce + +Selling gemstones online presents unique challenges that generic e-commerce platforms struggle with: + +- **Complex product data** — Each stone has dozens of attributes: carat weight, dimensions, cut, color grade, clarity, origin, treatment history, and certification details +- **High-value inventory** — Proper stock management with vendor integration and automated updates is critical +- **Global audience** — Buyers come from every continent and expect content in their language +- **Rich media** — High-resolution imagery is essential for customers to evaluate stones remotely +- **Trust and detail** — Detailed product information and professional presentation build the confidence needed for high-value purchases + +## How Schon Solves This + +### Flexible Product Attributes + +Schon's attribute system lets you define custom attribute groups (Physical Properties, Grading, Origin) with typed values (float, string, boolean). These attributes are filterable, searchable, and automatically included in API responses. No rigid schemas — the system adapts to whatever you sell. + +### Multi-Vendor Inventory + +Our demo store uses a single vendor (Schon Demo), but the platform supports unlimited vendors, each with their own pricing, stock levels, and markup percentages. The stock updater service runs as a separate worker, syncing inventory from external supplier feeds in real-time. + +### API-First Architecture + +The entire storefront is powered by Schon's REST and GraphQL APIs. This means you can build any frontend you want: + +- A server-rendered storefront with Nuxt or Next.js +- A mobile app for iOS and Android +- A marketplace integration +- A B2B portal for wholesale buyers + +The same API that serves product listings also handles authentication, cart management, order processing, and analytics — all through clean, well-documented endpoints. + +### Built-In Analytics + +Every order, every refund, every wishlist action is tracked. The admin dashboard provides real-time insights into sales trends, popular products, customer behavior, and inventory levels. For this demo, we generate realistic order data spanning 30 days to show these analytics in action. + +### Production-Ready Infrastructure + +Schon runs on: + +- **Django** — Proven in production at companies like Instagram, Pinterest, and Mozilla +- **PostgreSQL** — Enterprise-grade database with PostGIS for location-based features +- **Redis** — Sub-millisecond caching for blazing-fast API responses +- **Elasticsearch** — Full-text search with autocomplete and faceted filtering +- **Celery** — Background tasks for email, inventory sync, and scheduled operations +- **Docker** — One-command deployment with compose + +## See It in Action + +This demo store is a real, running instance of Schon. Everything you experience — browsing products, filtering by category, switching languages, reading this blog post — is powered by the same platform available for your business. + +We encourage you to explore: + +- **The product catalog** — Filter, search, and browse across categories +- **The API** — Visit `/docs/swagger/` for interactive API documentation +- **The admin panel** — See how store operators manage their business +- **The blog** — This very post demonstrates Schon's built-in CMS capabilities + +## Ready to Get Started? + +Whether you're launching a gemstone boutique, a fashion brand, an electronics store, or any other e-commerce venture, Schon provides the foundation you need. + +Visit [schon.wiseless.xyz](https://schon.wiseless.xyz) to: + +- View the full feature list +- Access technical documentation +- Learn about licensing options +- Schedule a demo tailored to your business needs + +--- + +*The Schon Demo Store demonstrates the [Schon e-commerce platform](https://schon.wiseless.xyz) in a realistic scenario. All products, brands, and transactions are fictional.* diff --git a/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md b/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md new file mode 100644 index 00000000..2951cba7 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md @@ -0,0 +1,77 @@ +# За кулисами платформы: как Schon обеспечивает работу этого магазина + +*Опубликовано: 20 декабря 2025 г.* + +Задумывались ли вы, что стоит за работой онлайн-магазина драгоценных камней? В этой статье мы приоткрываем завесу над технологией, обеспечивающей работу Демо-магазина Schon, и объясняем, почему Schon — правильная основа для вашего следующего проекта в электронной коммерции. + +## Вызовы электронной коммерции драгоценных камней + +Продажа драгоценных камней онлайн ставит уникальные задачи, с которыми универсальные платформы справляются с трудом: + +- **Сложные данные о товарах** — Каждый камень имеет десятки атрибутов: вес в каратах, размеры, огранка, цветовая категория, чистота, происхождение, история обработки и данные сертификации +- **Дорогостоящие запасы** — Правильное управление складом с интеграцией поставщиков и автоматическими обновлениями критически важно +- **Глобальная аудитория** — Покупатели приходят со всех континентов и ожидают контент на своём языке +- **Богатый медиаконтент** — Изображения высокого разрешения необходимы для удалённой оценки камней покупателями +- **Доверие и детализация** — Подробная информация о товаре и профессиональная подача формируют уверенность, необходимую для крупных покупок + +## Как Schon решает эти задачи + +### Гибкая система атрибутов + +Система атрибутов Schon позволяет определять пользовательские группы атрибутов (Физические свойства, Оценка качества, Происхождение) с типизированными значениями (число, строка, булево). Эти атрибуты фильтруемы, доступны для поиска и автоматически включаются в ответы API. Никаких жёстких схем — система адаптируется к любому товару. + +### Мультивендорные запасы + +Наш демо-магазин использует одного поставщика (Schon Demo), но платформа поддерживает неограниченное количество поставщиков, каждый со своим ценообразованием, остатками и процентами наценки. Сервис обновления остатков работает как отдельный воркер, синхронизируя запасы из внешних фидов поставщиков в реальном времени. + +### API-ориентированная архитектура + +Вся витрина работает через REST и GraphQL API Schon. Это значит, что вы можете создать любой фронтенд: + +- Серверную витрину на Nuxt или Next.js +- Мобильное приложение для iOS и Android +- Интеграцию с маркетплейсом +- B2B-портал для оптовых покупателей + +Тот же API, который обслуживает каталог товаров, обрабатывает аутентификацию, управление корзиной, оформление заказов и аналитику — всё через чистые, хорошо документированные эндпоинты. + +### Встроенная аналитика + +Каждый заказ, каждый возврат, каждое действие со списком желаний отслеживается. Панель администратора предоставляет аналитику в реальном времени: тренды продаж, популярные товары, поведение клиентов и уровни запасов. Для этого демо мы генерируем реалистичные данные заказов за 30 дней, чтобы показать аналитику в действии. + +### Инфраструктура, готовая к продуктиву + +Schon работает на: + +- **Django** — Проверен в продуктиве такими компаниями как Instagram, Pinterest и Mozilla +- **PostgreSQL** — База данных корпоративного уровня с PostGIS для геолокационных функций +- **Redis** — Кэширование за доли миллисекунды для молниеносных ответов API +- **Elasticsearch** — Полнотекстовый поиск с автодополнением и фасетной фильтрацией +- **Celery** — Фоновые задачи для рассылок, синхронизации запасов и планируемых операций +- **Docker** — Развёртывание одной командой через compose + +## Посмотрите в действии + +Этот демо-магазин — реальный, работающий экземпляр Schon. Всё, что вы видите — просмотр товаров, фильтрация по категориям, переключение языков, чтение этого блога — работает на той же платформе, доступной для вашего бизнеса. + +Мы приглашаем вас исследовать: + +- **Каталог товаров** — Фильтруйте, ищите и просматривайте по категориям +- **API** — Посетите `/docs/swagger/` для интерактивной документации API +- **Панель администратора** — Узнайте, как операторы магазинов управляют бизнесом +- **Блог** — Эта самая статья демонстрирует встроенные CMS-возможности Schon + +## Готовы начать? + +Запускаете ли вы бутик драгоценных камней, модный бренд, магазин электроники или любой другой проект электронной коммерции — Schon предоставит необходимую основу. + +Посетите [schon.wiseless.xyz](https://schon.wiseless.xyz), чтобы: + +- Ознакомиться с полным списком возможностей +- Получить техническую документацию +- Узнать о вариантах лицензирования +- Запланировать демонстрацию, адаптированную под ваш бизнес + +--- + +*Демо-магазин Schon демонстрирует [платформу электронной коммерции Schon](https://schon.wiseless.xyz) в реалистичном сценарии. Все товары, бренды и транзакции являются вымышленными.* diff --git a/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md b/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md new file mode 100644 index 00000000..36cdcf00 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md @@ -0,0 +1,34 @@ +# Now Available in Russian: Full Bilingual Shopping Experience + +*Published: January 28, 2026* + +We're pleased to announce that the Schon Demo Store now offers a **complete bilingual experience** in English and Russian. Every product description, category name, brand story, and informational page has been professionally translated to provide a seamless shopping experience for Russian-speaking customers. + +## What's Translated + +- **Full product catalog** — All 50+ gemstone listings with detailed descriptions, specifications, and grading information +- **Category navigation** — Browse gemstone categories in your preferred language +- **Brand pages** — Read about each of our partner brands in Russian +- **Informational pages** — Privacy Policy, Terms & Conditions, FAQ, Shipping Info, and Return Policy are all available in both languages +- **Blog and news** — Stay up to date with store announcements in your language + +## Powered by Schon's i18n Engine + +This bilingual capability is built into the core of the **Schon e-commerce platform**. Schon supports **28 languages** out of the box, with every translatable field — from product names to meta descriptions — managed through an integrated translation system. + +For store operators, this means: + +- **No duplicate content** — A single product entry holds all language variants +- **Automatic language detection** — The API serves content in the user's preferred language +- **SEO-friendly** — Each language version gets proper meta tags and descriptions +- **Easy management** — Translations are managed through the admin panel alongside the original content + +## Try It Yourself + +Switch your browser's language preference to Russian (or use the language selector in your storefront) to see the full translated experience. Every detail has been localized, from the product specifications to the checkout flow. + +This is just one example of how Schon makes it straightforward to serve a global customer base without maintaining separate storefronts for each market. + +--- + +*The Schon Demo Store showcases the [Schon e-commerce platform](https://schon.wiseless.xyz). All products and transactions are fictional. Interested in multilingual e-commerce? [Learn more](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md b/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md new file mode 100644 index 00000000..769d6acc --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md @@ -0,0 +1,34 @@ +# Теперь на русском: полноценный двуязычный шоппинг + +*Опубликовано: 28 января 2026 г.* + +Мы рады сообщить, что Демо-магазин Schon теперь предлагает **полноценный двуязычный опыт** на английском и русском языках. Каждое описание товара, название категории, история бренда и информационная страница профессионально переведены для обеспечения удобного шоппинга для русскоязычных покупателей. + +## Что переведено + +- **Весь каталог товаров** — Все 50+ листингов драгоценных камней с подробными описаниями, характеристиками и информацией о качестве +- **Навигация по категориям** — Просматривайте категории драгоценных камней на предпочтительном языке +- **Страницы брендов** — Читайте о каждом из наших брендов-партнёров на русском языке +- **Информационные страницы** — Политика конфиденциальности, Условия использования, FAQ, Информация о доставке и Политика возврата доступны на обоих языках +- **Блог и новости** — Следите за объявлениями магазина на вашем языке + +## На базе движка интернационализации Schon + +Эта двуязычная возможность встроена в ядро **платформы электронной коммерции Schon**. Schon поддерживает **28 языков**, при этом каждое переводимое поле — от названий товаров до мета-описаний — управляется через интегрированную систему переводов. + +Для операторов магазинов это означает: + +- **Без дублирования контента** — Одна запись товара содержит все языковые варианты +- **Автоматическое определение языка** — API выдаёт контент на предпочтительном языке пользователя +- **SEO-оптимизация** — Каждая языковая версия получает корректные мета-теги и описания +- **Удобное управление** — Переводы управляются через панель администратора наряду с оригинальным контентом + +## Попробуйте сами + +Переключите языковые настройки браузера на русский (или используйте переключатель языка в витрине) для просмотра полностью переведённого интерфейса. Каждая деталь локализована — от характеристик товаров до процесса оформления заказа. + +Это лишь один пример того, как Schon упрощает обслуживание глобальной клиентской базы без необходимости поддерживать отдельные витрины для каждого рынка. + +--- + +*Демо-магазин Schon демонстрирует [платформу электронной коммерции Schon](https://schon.wiseless.xyz). Все товары и транзакции являются вымышленными. Интересует многоязычная электронная коммерция? [Узнайте больше](https://schon.wiseless.xyz).* diff --git a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md new file mode 100644 index 00000000..e513ba50 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md @@ -0,0 +1,78 @@ +# Understanding Gemstone Certification: A Buyer's Guide + +*Published: January 15, 2026* + +Whether you're purchasing your first gemstone or adding to an established collection, understanding certification is essential. This guide explains the major gemological laboratories, what their reports cover, and why certification matters. + +## Why Certification Matters + +A gemstone certificate (also called a grading report) is an independent, expert assessment of a stone's characteristics. It provides: + +- **Objective verification** of color, clarity, cut, and carat weight +- **Treatment disclosure** — whether the stone has been heated, oiled, or otherwise enhanced +- **Origin determination** — geographic source, which significantly affects value +- **Confidence** for both buyer and seller in the transaction + +## Major Gemological Laboratories + +### GIA (Gemological Institute of America) + +The most widely recognized laboratory worldwide, particularly for diamonds. GIA reports are considered the gold standard for: + +- Diamond grading (the "4Cs" system was developed by GIA) +- Colored gemstone identification +- Pearl grading + +### GRS (Gem Research Swisslab) + +Based in Switzerland, GRS specializes in colored gemstones and is particularly respected for: + +- Origin determination for rubies, sapphires, and emeralds +- Color grading with trade names (e.g., "Pigeon Blood" for rubies, "Royal Blue" for sapphires) +- Treatment analysis + +### Gubelin Gem Lab + +Another Swiss laboratory with over 100 years of history, known for: + +- Detailed origin reports +- Inclusion analysis +- Research-grade documentation + +### SSEF (Swiss Gemmological Institute) + +Part of the Swiss Foundation for the Research of Gemstones, SSEF is recognized for: + +- Advanced testing methods +- Pearl testing (natural vs. cultured) +- High-value gemstone verification + +## What a Certificate Includes + +A typical gemstone certificate will document: + +1. **Identification** — The gemstone species and variety +2. **Weight** — Precise carat weight +3. **Dimensions** — Length, width, and depth in millimeters +4. **Shape and Cut** — The cut style and shape +5. **Color** — Hue, saturation, and tone description +6. **Clarity** — Inclusion type and visibility +7. **Treatment** — Any enhancements detected (or "no indication of treatment") +8. **Origin** — Geographic source when determinable +9. **Photographs** — Images of the stone as examined + +## Tips for Buyers + +- **Always request a certificate** for significant purchases (generally above $1,000) +- **Verify the certificate** directly with the issuing laboratory using the report number +- **Understand treatment codes** — "H" for heated, "N" for no treatment, etc. +- **Compare like with like** — Certificates from different labs may use different grading scales +- **Keep certificates safe** — They are essential for insurance, resale, and estate purposes + +## Our Commitment + +Every gemstone in our collection over $5,000 comes with certification from a recognized laboratory. Lower-priced items include our own detailed quality assessment. You can find certification details in each product's specifications section. + +--- + +*This guide is published by the Schon Demo Store, powered by the [Schon e-commerce platform](https://schon.wiseless.xyz). All products mentioned are fictional. Visit [schon.wiseless.xyz](https://schon.wiseless.xyz) to learn about building your own gemstone or jewelry store.* diff --git a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md new file mode 100644 index 00000000..b6e60614 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md @@ -0,0 +1,78 @@ +# Сертификация драгоценных камней: руководство покупателя + +*Опубликовано: 15 января 2026 г.* + +Приобретаете ли вы свой первый драгоценный камень или пополняете существующую коллекцию — понимание сертификации необходимо. В этом руководстве мы объясним, какие существуют основные геммологические лаборатории, что включают их отчёты и почему сертификация важна. + +## Зачем нужна сертификация + +Сертификат драгоценного камня (также называемый экспертным заключением) — это независимая экспертная оценка характеристик камня. Он обеспечивает: + +- **Объективную верификацию** цвета, чистоты, огранки и веса в каратах +- **Раскрытие обработки** — подвергался ли камень нагреву, промасливанию или иному облагораживанию +- **Определение происхождения** — географический источник, существенно влияющий на стоимость +- **Уверенность** как для покупателя, так и для продавца в сделке + +## Основные геммологические лаборатории + +### GIA (Геммологический институт Америки) + +Наиболее признанная лаборатория в мире, особенно в области бриллиантов. Отчёты GIA считаются золотым стандартом для: + +- Оценки бриллиантов (система «4C» была разработана GIA) +- Идентификации цветных драгоценных камней +- Оценки жемчуга + +### GRS (Gem Research Swisslab) + +Швейцарская лаборатория, специализирующаяся на цветных драгоценных камнях, особенно уважаемая за: + +- Определение происхождения рубинов, сапфиров и изумрудов +- Градацию цвета с торговыми наименованиями (например, «Голубиная кровь» для рубинов, «Королевский синий» для сапфиров) +- Анализ обработки + +### Gubelin Gem Lab + +Ещё одна швейцарская лаборатория с более чем 100-летней историей, известная: + +- Детальными отчётами о происхождении +- Анализом включений +- Документацией исследовательского уровня + +### SSEF (Швейцарский геммологический институт) + +Часть Швейцарского фонда исследований драгоценных камней. SSEF признан за: + +- Передовые методы тестирования +- Экспертизу жемчуга (натуральный или культивированный) +- Верификацию драгоценных камней высокой стоимости + +## Что включает сертификат + +Типичный сертификат драгоценного камня содержит: + +1. **Идентификация** — Вид и разновидность камня +2. **Вес** — Точный вес в каратах +3. **Размеры** — Длина, ширина и глубина в миллиметрах +4. **Форма и огранка** — Стиль огранки и форма +5. **Цвет** — Описание тона, насыщенности и оттенка +6. **Чистота** — Тип и видимость включений +7. **Обработка** — Выявленные улучшения (или «без признаков обработки») +8. **Происхождение** — Географический источник, когда его можно определить +9. **Фотографии** — Снимки камня в момент экспертизы + +## Советы покупателям + +- **Всегда запрашивайте сертификат** при значительных покупках (как правило, свыше $1 000) +- **Проверяйте сертификат** напрямую в выдавшей его лаборатории по номеру отчёта +- **Изучите коды обработки** — «H» означает нагрев, «N» — без обработки и т.д. +- **Сравнивайте сопоставимое** — Сертификаты разных лабораторий могут использовать различные шкалы оценки +- **Храните сертификаты в безопасности** — Они необходимы для страхования, перепродажи и оценки наследства + +## Наши гарантии + +Каждый драгоценный камень в нашей коллекции стоимостью свыше $5 000 сопровождается сертификатом признанной лаборатории. Для товаров с более низкой ценой мы предоставляем собственную детальную оценку качества. Информацию о сертификации вы найдёте в разделе характеристик каждого товара. + +--- + +*Это руководство опубликовано Демо-магазином Schon на платформе [Schon](https://schon.wiseless.xyz). Все упомянутые товары являются вымышленными. Посетите [schon.wiseless.xyz](https://schon.wiseless.xyz), чтобы узнать о создании собственного магазина драгоценных камней или ювелирных изделий.* diff --git a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md new file mode 100644 index 00000000..ffa1d035 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md @@ -0,0 +1,58 @@ +# Holiday Gift Guide: Top Gemstones Under $5,000 + +*Published: January 5, 2026* + +Looking for the perfect gift that combines beauty, rarity, and lasting value? Our curators have selected the most impressive gemstones under $5,000 from this season's collection. + +## Our Top Picks + +### 1. Ethiopian Welo Opal 3.8ct — $3,500 + +A mesmerizing play-of-color gem with a unique honeycomb pattern. Opals are perfect for someone who appreciates the unusual and extraordinary. This piece from Terra Rara's collection captures light like a miniature galaxy. + +### 2. Tahitian Pearl 12mm Peacock — $3,200 + +Nothing says elegance quite like a Tahitian pearl. This 12mm pearl from Oceanic Pearls features stunning peacock overtones — dark body color with iridescent green and purple flashes. A timeless gift. + +### 3. Rubellite Tourmaline 4.3ct — $3,500 + +A vivid raspberry-red tourmaline with exceptional saturation. Crimson Vault has selected a cushion-cut piece that rivals much more expensive rubies in visual impact. + +### 4. Indicolite Tourmaline 3.6ct — $2,800 + +For those who love blue, this teal-colored tourmaline from Azure Dreams offers a unique alternative to sapphires. The oval cut from Afghanistan shows beautiful color depth. + +### 5. Madagascar Aquamarine 7.5ct — $2,200 + +A generous 7.5-carat aquamarine with excellent clarity and a soothing light blue color. Azure Dreams sourced this octagon-cut beauty from Madagascar. + +### 6. Watermelon Tourmaline 8.5ct — $1,800 + +A conversation piece like no other — this slice-cut tourmaline displays a pink center surrounded by a green rim, like a tiny watermelon. Crystal Kingdom's collection includes several of these natural wonders. + +### 7. Siberian Amethyst 8.5ct — $1,200 + +The legendary deep purple of Siberian amethyst, with red flashes that make it one of the most sought-after quartz varieties. A cushion-cut gem from Crystal Kingdom. + +### 8. Fire Opal 2.1ct Mexican Orange — $1,200 + +A brilliant transparent opal with intense orange color from Mexico. Lumina Treasures offers this unique piece that glows with inner fire. + +## Gift-Worthy Presentation + +Every gemstone purchase from our store includes: + +- A detailed quality certificate or assessment +- Premium packaging with branded presentation box +- Care instructions specific to the gemstone type +- Free standard shipping on orders over $500 + +## Need Help Choosing? + +Not sure which gemstone suits your recipient? Consider their birth month, favorite color, or personal style. Our product pages include detailed information about each stone's properties, symbolism, and care requirements. + +Browse our full collection using the category filters, price range selector, or simply search by gemstone type. Our platform makes finding the perfect gem effortless. + +--- + +*The Schon Demo Store is powered by [Schon](https://schon.wiseless.xyz). All products and prices are fictional and for demonstration purposes only.* diff --git a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md new file mode 100644 index 00000000..d3beec1e --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md @@ -0,0 +1,58 @@ +# Подарочный гид: лучшие драгоценные камни до $5 000 + +*Опубликовано: 5 января 2026 г.* + +Ищете идеальный подарок, сочетающий красоту, редкость и непреходящую ценность? Наши кураторы отобрали самые впечатляющие драгоценные камни стоимостью до $5 000 из коллекции этого сезона. + +## Наш выбор + +### 1. Эфиопский опал Вело 3.8 карата — $3 500 + +Завораживающий камень с игрой цвета и уникальным сотовым рисунком. Опалы идеальны для тех, кто ценит необычное и экстраординарное. Этот экземпляр из коллекции Terra Rara улавливает свет, словно миниатюрная галактика. + +### 2. Таитянский жемчуг 12мм павлиний — $3 200 + +Ничто не говорит об элегантности так, как таитянский жемчуг. Эта 12-мм жемчужина от Oceanic Pearls отличается потрясающими павлиньими переливами — тёмное тело с иризирующими зелёными и фиолетовыми вспышками. Вневременной подарок. + +### 3. Рубеллит турмалин 4.3 карата — $3 500 + +Яркий малиново-красный турмалин с исключительной насыщенностью. Crimson Vault отобрал экземпляр огранки «Кушон», который по визуальному воздействию соперничает с гораздо более дорогими рубинами. + +### 4. Индиголит турмалин 3.6 карата — $2 800 + +Для любителей синего — этот турмалин сине-зелёного цвета от Azure Dreams предлагает уникальную альтернативу сапфирам. Овальная огранка из Афганистана демонстрирует красивую глубину цвета. + +### 5. Мадагаскарский аквамарин 7.5 карата — $2 200 + +Великодушные 7,5 карата аквамарина с отличной чистотой и успокаивающим светло-голубым цветом. Azure Dreams добыл этот прекрасный камень восьмиугольной огранки на Мадагаскаре. + +### 6. Арбузный турмалин 8.5 карата — $1 800 + +Камень, привлекающий внимание как никакой другой — турмалин огранки «слайс» демонстрирует розовый центр, окружённый зелёным ободком, словно миниатюрный арбуз. В коллекции Crystal Kingdom есть несколько таких природных чудес. + +### 7. Сибирский аметист 8.5 карата — $1 200 + +Легендарный глубокий фиолетовый цвет сибирского аметиста с красными вспышками, делающими его одной из самых желанных разновидностей кварца. Камень огранки «Кушон» от Crystal Kingdom. + +### 8. Огненный опал 2.1 карата мексиканский оранжевый — $1 200 + +Блестящий прозрачный опал интенсивного оранжевого цвета из Мексики. Lumina Treasures предлагает этот уникальный камень, светящийся внутренним огнём. + +## Подарочное оформление + +Каждая покупка драгоценного камня в нашем магазине включает: + +- Подробный сертификат качества или экспертную оценку +- Премиальную упаковку с фирменной подарочной коробкой +- Инструкции по уходу, специфичные для типа камня +- Бесплатную стандартную доставку при заказе от $500 + +## Нужна помощь в выборе? + +Не уверены, какой камень подойдёт вашему получателю? Учтите месяц рождения, любимый цвет или личный стиль. Страницы товаров содержат подробную информацию о свойствах каждого камня, его символике и требованиях к уходу. + +Просматривайте всю коллекцию с помощью фильтров по категориям, ценовому диапазону или просто ищите по типу камня. Наша платформа делает поиск идеального камня лёгким. + +--- + +*Демо-магазин Schon работает на платформе [Schon](https://schon.wiseless.xyz). Все товары и цены являются вымышленными и предназначены исключительно для демонстрации.* diff --git a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md new file mode 100644 index 00000000..7137f7c2 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md @@ -0,0 +1,35 @@ +# New Collection: Spring 2026 Gemstone Arrivals + +*Published: February 10, 2026* + +We are excited to announce the arrival of our **Spring 2026 Collection** — a curated selection of exceptional gemstones sourced from the world's most renowned origins. + +## What's New + +This season's collection brings a fresh wave of color and brilliance to our catalog: + +### Vivid Emeralds from New Sources + +We've expanded our emerald selection with stunning pieces from **Afghanistan's Panjshir Valley** and **Ethiopia's emerging deposits**. These new arrivals complement our existing Colombian and Zambian offerings, giving collectors and designers more options across different price points and color profiles. + +### Expanded Diamond Cuts + +Our diamond selection now includes the elegant **Marquise** and sophisticated **Asscher** cuts alongside our existing round brilliant, princess, oval, cushion, and emerald cuts. These additions reflect growing demand for distinctive silhouettes in engagement rings and fine jewelry. + +### Crystal Kingdom Quartz Expansion + +Our partners at Crystal Kingdom have delivered an outstanding selection of quartz varieties, including the coveted **Madeira Citrine**, the delicate **Rose de France Amethyst**, and the rare **Prasiolite** (green amethyst). These pieces showcase the incredible diversity within the quartz family. + +### Rare Ruby Additions + +Crimson Vault has sourced exceptional new rubies, including a pristine **unheated Burmese ruby** and vivid **Thai rubies** — expanding our ruby collection with both investment-grade and accessible pieces. + +## Browse the Collection + +All new arrivals are available now in our catalog. Use our advanced filters to browse by gemstone type, origin, price range, or brand. Every piece comes with detailed specifications and high-resolution imagery. + +Our multi-language catalog ensures you can explore every product in your preferred language — currently available in English and Russian, with 28 languages supported by the platform. + +--- + +*The Schon Demo Store is powered by [Schon](https://schon.wiseless.xyz) — a modern e-commerce platform built for businesses that demand flexibility and performance. All products shown are fictional and for demonstration purposes only.* diff --git a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md new file mode 100644 index 00000000..bbac9491 --- /dev/null +++ b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md @@ -0,0 +1,35 @@ +# Новая коллекция: поступление драгоценных камней весна 2026 + +*Опубликовано: 10 февраля 2026 г.* + +Мы рады сообщить о поступлении нашей **Весенней коллекции 2026** — тщательно отобранной подборки исключительных драгоценных камней из самых известных месторождений мира. + +## Что нового + +Коллекция этого сезона привносит новую волну цвета и блеска в наш каталог: + +### Яркие изумруды из новых источников + +Мы расширили ассортимент изумрудов потрясающими экземплярами из **Панджшерской долины Афганистана** и **новых месторождений Эфиопии**. Эти новинки дополняют наши существующие колумбийские и замбийские предложения, предоставляя коллекционерам и дизайнерам больше вариантов в различных ценовых категориях и цветовых профилях. + +### Расширенный выбор огранок бриллиантов + +Наш ассортимент бриллиантов теперь включает элегантную огранку **«Маркиз»** и утончённую **«Ашер»** наряду с существующими круглой, «Принцессой», овальной, «Кушон» и изумрудной огранками. Эти дополнения отражают растущий спрос на выразительные силуэты в обручальных кольцах и ювелирных изделиях. + +### Расширение кварцевой коллекции Crystal Kingdom + +Наши партнёры из Crystal Kingdom доставили выдающуюся подборку разновидностей кварца, включая желанный **цитрин «Мадейра»**, нежный **аметист «Роз де Франс»** и редкий **празиолит** (зелёный аметист). Эти экземпляры демонстрируют невероятное разнообразие семейства кварцев. + +### Редкие рубины + +Crimson Vault получил исключительные новые рубины, включая безупречный **необработанный бирманский рубин** и яркие **тайские рубины** — расширяя нашу коллекцию рубинов как инвестиционными, так и доступными экземплярами. + +## Смотрите коллекцию + +Все новинки уже доступны в нашем каталоге. Используйте расширенные фильтры для просмотра по типу камня, происхождению, ценовому диапазону или бренду. Каждый экземпляр сопровождается подробными характеристиками и изображениями высокого разрешения. + +Наш многоязычный каталог позволяет исследовать каждый товар на предпочтительном языке — в настоящее время доступны английский и русский, платформа поддерживает 28 языков. + +--- + +*Демо-магазин Schon работает на платформе [Schon](https://schon.wiseless.xyz) — современной платформе электронной коммерции для бизнеса, требующего гибкости и производительности. Все представленные товары являются вымышленными и предназначены исключительно для демонстрации.* From 9d5b4fee90fc963d32198b314248c0eb2d9229eb Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 16 Feb 2026 19:43:09 +0300 Subject: [PATCH 10/30] fix(models, viewsets): filter inactive records in queries ensure only active records are considered in `models.py` and `viewsets.py` by adding `is_active=True` filters. improves data integrity and prevents processing inactive entities. --- engine/core/models.py | 12 +++++++++--- engine/core/viewsets.py | 18 ++++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/engine/core/models.py b/engine/core/models.py index 0ad745aa..55218d23 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -402,7 +402,8 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): @cached_property def filterable_attributes(self) -> list[FilterableAttribute]: rows = ( - AttributeValue.objects.annotate(value_length=Length("value")) + AttributeValue.objects.filter(is_active=True) + .annotate(value_length=Length("value")) .filter( product__is_active=True, product__category=self, @@ -726,12 +727,17 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): @property def price(self: Self) -> float: - stock = self.stocks.only("price").order_by("-price").first() + stock = ( + self.stocks.filter(is_active=True).only("price").order_by("-price").first() + ) return round(stock.price, 2) if stock else 0.0 @cached_property def quantity(self) -> int: - return self.stocks.aggregate(total=Sum("quantity"))["total"] or 0 + return ( + self.stocks.filter(is_active=True).aggregate(total=Sum("quantity"))["total"] + or 0 + ) @property def total_orders(self): diff --git a/engine/core/viewsets.py b/engine/core/viewsets.py index d0519a17..c783dd0c 100644 --- a/engine/core/viewsets.py +++ b/engine/core/viewsets.py @@ -383,16 +383,18 @@ class BrandViewSet(SchonViewSet): return obj def get_queryset(self): - queryset = Brand.objects.all() - - if self.request.user.has_perm("view_category"): # ty:ignore[possibly-missing-attribute] - queryset = queryset.prefetch_related("categories") - else: - queryset = queryset.prefetch_related( + qs = super().get_queryset() + if self.request.user.has_perm("core.view_brand"): # ty:ignore[possibly-missing-attribute] + if self.request.user.has_perm("core.view_brand"): # ty:ignore[possibly-missing-attribute] + return qs.prefetch_related("categories") + return qs.prefetch_related( Prefetch("categories", queryset=Category.objects.filter(is_active=True)) ) - - return queryset + if self.request.user.has_perm("core.view_category"): # ty:ignore[possibly-missing-attribute] + return qs.filter(is_active=True).prefetch_related("categories") + return qs.filter(is_active=True).prefetch_related( + Prefetch("categories", queryset=Category.objects.filter(is_active=True)) + ) # noinspection PyUnusedLocal @action( From 4504019100286802e3065779de25e9f979c9310e Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 17 Feb 2026 00:48:30 +0300 Subject: [PATCH 11/30] chore(gitignore): add nginx.conf to ignored files Add `nginx.conf` to the `.gitignore` file to prevent accidental commits of server configuration files. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c9d46f23..e4235251 100644 --- a/.gitignore +++ b/.gitignore @@ -193,6 +193,7 @@ engine/core/vendors/docs/* # Production .initialized queries/ +nginx.conf # AI assistants .claude/ From 83a8ecfceec0f3270e26ba33a20040573ea91e88 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Tue, 17 Feb 2026 01:09:52 +0300 Subject: [PATCH 12/30] chore(gitignore): adjust entries for queries and nginx.conf paths Modified `.gitignore` to include relative paths for `queries` and `nginx.conf`. This ensures consistency and prevents unintended exclusions. --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index e4235251..a7c84269 100644 --- a/.gitignore +++ b/.gitignore @@ -192,8 +192,8 @@ engine/core/vendors/docs/* # Production .initialized -queries/ -nginx.conf +./queries +./nginx.conf # AI assistants .claude/ From 1c10d5ca535cabce30b9be20ee21ccaa60236e0e Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 18:07:07 +0300 Subject: [PATCH 13/30] feat(demo_data): enhance data with images, new categories, and multilingual updates Expanded demo content with additional images for products and blog posts, improving user experience. Added new categories such as "Jewelry" and "Services," along with their subcategories. Supported richer multilingual descriptions and included new brands, ensuring broader and detailed offerings. --- engine/core/fixtures/demo.json | 535 +++++++++++++++++- .../fixtures/demo_blog_posts/about-us.en.md | 6 +- .../fixtures/demo_blog_posts/about-us.ru.md | 6 +- .../demo_blog_posts/behind-the-platform.en.md | 8 +- .../demo_blog_posts/behind-the-platform.ru.md | 8 +- .../bilingual-experience.en.md | 8 +- .../bilingual-experience.ru.md | 8 +- .../core/fixtures/demo_blog_posts/faq.en.md | 4 +- .../core/fixtures/demo_blog_posts/faq.ru.md | 4 +- .../gemstone-certification-guide.en.md | 8 +- .../gemstone-certification-guide.ru.md | 8 +- .../demo_blog_posts/holiday-gift-guide.en.md | 8 +- .../demo_blog_posts/holiday-gift-guide.ru.md | 8 +- .../demo_blog_posts/privacy-policy.en.md | 5 +- .../demo_blog_posts/privacy-policy.ru.md | 5 +- .../demo_blog_posts/return-policy.en.md | 5 +- .../demo_blog_posts/return-policy.ru.md | 5 +- .../demo_blog_posts/shipping-info.en.md | 5 +- .../demo_blog_posts/shipping-info.ru.md | 5 +- .../spring-2026-collection.en.md | 8 +- .../spring-2026-collection.ru.md | 8 +- .../terms-and-conditions.en.md | 5 +- .../terms-and-conditions.ru.md | 5 +- .../demo_products_images/AME-CIT-850-MD.jpeg | Bin 0 -> 8466 bytes .../demo_products_images/AME-PRS-1120.jpg | Bin 0 -> 357294 bytes .../demo_products_images/AME-RDF-1400.jpeg | Bin 0 -> 3662 bytes .../demo_products_images/AQU-MAD-750.jpg | Bin 0 -> 22262 bytes .../demo_products_images/AQU-PAK-1520.jpg | Bin 0 -> 51539 bytes .../DIA-AS-220-E-VS1.jpeg | Bin 0 -> 6673 bytes .../DIA-MQ-100-D-VVS2.jpg | Bin 0 -> 32420 bytes .../demo_products_images/EME-AFG-180-PJ.png | Bin 0 -> 179437 bytes .../EME-COL-PAIR-100.jpeg | Bin 0 -> 4357 bytes .../demo_products_images/EME-ETH-250.jpg | Bin 0 -> 60645 bytes .../demo_products_images/PRL-BAR-16MM-WH.jpg | Bin 0 -> 24721 bytes .../demo_products_images/PRL-TAH-12MM-PC.jpeg | Bin 0 -> 1374 bytes .../demo_products_images/RUB-BUR-100-UH.jpeg | Bin 0 -> 2954 bytes .../demo_products_images/RUB-THA-150-VR.jpg | Bin 0 -> 196872 bytes .../demo_products_images/SAP-CEY-500-UH.jpeg | Bin 0 -> 3550 bytes .../demo_products_images/SAP-PAD-150.jpeg | Bin 0 -> 5569 bytes .../SAP-PNK-PAIR-120.jpeg | Bin 0 -> 5762 bytes .../demo_products_images/TAN-320-BV.jpg | Bin 0 -> 6056 bytes .../demo_products_images/TOU-CHR-280.jpg | Bin 0 -> 16098 bytes .../demo_products_images/TOU-RUB-430.jpeg | Bin 0 -> 2786 bytes engine/core/management/commands/demo_data.py | 40 +- engine/core/static/placeholder.png | Bin 0 -> 333177 bytes 45 files changed, 633 insertions(+), 82 deletions(-) create mode 100644 engine/core/fixtures/demo_products_images/AME-CIT-850-MD.jpeg create mode 100644 engine/core/fixtures/demo_products_images/AME-PRS-1120.jpg create mode 100644 engine/core/fixtures/demo_products_images/AME-RDF-1400.jpeg create mode 100644 engine/core/fixtures/demo_products_images/AQU-MAD-750.jpg create mode 100644 engine/core/fixtures/demo_products_images/AQU-PAK-1520.jpg create mode 100644 engine/core/fixtures/demo_products_images/DIA-AS-220-E-VS1.jpeg create mode 100644 engine/core/fixtures/demo_products_images/DIA-MQ-100-D-VVS2.jpg create mode 100644 engine/core/fixtures/demo_products_images/EME-AFG-180-PJ.png create mode 100644 engine/core/fixtures/demo_products_images/EME-COL-PAIR-100.jpeg create mode 100644 engine/core/fixtures/demo_products_images/EME-ETH-250.jpg create mode 100644 engine/core/fixtures/demo_products_images/PRL-BAR-16MM-WH.jpg create mode 100644 engine/core/fixtures/demo_products_images/PRL-TAH-12MM-PC.jpeg create mode 100644 engine/core/fixtures/demo_products_images/RUB-BUR-100-UH.jpeg create mode 100644 engine/core/fixtures/demo_products_images/RUB-THA-150-VR.jpg create mode 100644 engine/core/fixtures/demo_products_images/SAP-CEY-500-UH.jpeg create mode 100644 engine/core/fixtures/demo_products_images/SAP-PAD-150.jpeg create mode 100644 engine/core/fixtures/demo_products_images/SAP-PNK-PAIR-120.jpeg create mode 100644 engine/core/fixtures/demo_products_images/TAN-320-BV.jpg create mode 100644 engine/core/fixtures/demo_products_images/TOU-CHR-280.jpg create mode 100644 engine/core/fixtures/demo_products_images/TOU-RUB-430.jpeg create mode 100644 engine/core/static/placeholder.png diff --git a/engine/core/fixtures/demo.json b/engine/core/fixtures/demo.json index e3a619c3..c23f5f97 100644 --- a/engine/core/fixtures/demo.json +++ b/engine/core/fixtures/demo.json @@ -2,7 +2,10 @@ "category_tags": [ {"tag_name": "precious", "name": "Precious Stones", "name_ru": "Драгоценные камни"}, {"tag_name": "semi-precious", "name": "Semi-Precious Stones", "name_ru": "Полудрагоценные камни"}, - {"tag_name": "organic", "name": "Organic Gems", "name_ru": "Органические камни"} + {"tag_name": "organic", "name": "Organic Gems", "name_ru": "Органические камни"}, + {"tag_name": "jewelry", "name": "Jewelry", "name_ru": "Ювелирные изделия"}, + {"tag_name": "services", "name": "Services", "name_ru": "Услуги"}, + {"tag_name": "metals", "name": "Precious Metals", "name_ru": "Драгоценные металлы"} ], "product_tags": [ {"tag_name": "certified", "name": "GIA Certified", "name_ru": "Сертификат GIA"}, @@ -73,6 +76,21 @@ "name_ru": "Хрустальное Королевство", "description": "Quartz varieties and crystal formations of museum quality.", "description_ru": "Разновидности кварца и кристаллические образования музейного качества." + }, + { + "name": "Maison Royale", + "description": "Exquisite handcrafted jewelry blending timeless design with contemporary elegance.", + "description_ru": "Изысканные ювелирные изделия ручной работы, сочетающие вечный дизайн с современной элегантностью." + }, + { + "name": "Artisan's Forge", + "description": "Contemporary jewelry atelier specializing in unique, bespoke pieces.", + "description_ru": "Современное ювелирное ателье, специализирующееся на уникальных изделиях по индивидуальному заказу." + }, + { + "name": "Noble Metals Trading", + "description": "Premium precious metals for investment, jewelry making, and industrial applications.", + "description_ru": "Премиальные драгоценные металлы для инвестиций, ювелирного дела и промышленного применения." } ], "categories": [ @@ -163,6 +181,150 @@ "description_ru": "Многоцветные драгоценные камни с электрическими свойствами", "parent": "Gemstones", "markup_percent": 7 + }, + { + "name": "Jewelry", + "name_ru": "Ювелирные изделия", + "description": "Handcrafted fine jewelry featuring precious gemstones and metals", + "description_ru": "Ювелирные изделия ручной работы с драгоценными камнями и металлами", + "parent": null, + "markup_percent": 0 + }, + { + "name": "Rings", + "name_ru": "Кольца", + "description": "Engagement rings, cocktail rings, and statement pieces", + "description_ru": "Обручальные кольца, коктейльные кольца и эффектные украшения", + "parent": "Jewelry", + "markup_percent": 20 + }, + { + "name": "Necklaces & Pendants", + "name_ru": "Колье и подвески", + "description": "Elegant necklaces and pendants for every occasion", + "description_ru": "Элегантные колье и подвески для любого случая", + "parent": "Jewelry", + "markup_percent": 18 + }, + { + "name": "Earrings", + "name_ru": "Серьги", + "description": "Studs, drops, and chandelier earrings", + "description_ru": "Серьги-гвоздики, серьги-капли и каскадные серьги", + "parent": "Jewelry", + "markup_percent": 15 + }, + { + "name": "Bracelets & Bangles", + "name_ru": "Браслеты и обручи", + "description": "Tennis bracelets, bangles, and chain bracelets", + "description_ru": "Теннисные браслеты, обручи и цепочные браслеты", + "parent": "Jewelry", + "markup_percent": 15 + }, + { + "name": "Brooches & Pins", + "name_ru": "Броши и булавки", + "description": "Decorative brooches and lapel pins", + "description_ru": "Декоративные броши и булавки для лацканов", + "parent": "Jewelry", + "markup_percent": 12 + }, + { + "name": "Services", + "name_ru": "Услуги", + "description": "Professional gemological and jewelry services", + "description_ru": "Профессиональные геммологические и ювелирные услуги", + "parent": null, + "markup_percent": 0 + }, + { + "name": "Gemstone Appraisal", + "name_ru": "Оценка камней", + "description": "Professional gemstone evaluation and certification services", + "description_ru": "Профессиональная оценка и сертификация драгоценных камней", + "parent": "Services", + "markup_percent": 0 + }, + { + "name": "Custom Jewelry Design", + "name_ru": "Индивидуальный дизайн", + "description": "Bespoke jewelry design and 3D rendering services", + "description_ru": "Дизайн ювелирных изделий по индивидуальному заказу и 3D-моделирование", + "parent": "Services", + "markup_percent": 0 + }, + { + "name": "Stone Setting", + "name_ru": "Закрепка камней", + "description": "Professional stone setting in various mount styles", + "description_ru": "Профессиональная закрепка камней в различных типах оправ", + "parent": "Services", + "markup_percent": 0 + }, + { + "name": "Jewelry Repair", + "name_ru": "Ремонт украшений", + "description": "Restoration and repair services for fine jewelry", + "description_ru": "Реставрация и ремонт ювелирных изделий", + "parent": "Services", + "markup_percent": 0 + }, + { + "name": "Stone Cutting", + "name_ru": "Огранка камней", + "description": "Custom gemstone cutting, re-cutting, and polishing", + "description_ru": "Индивидуальная огранка, переогранка и полировка камней", + "parent": "Services", + "markup_percent": 0 + }, + { + "name": "Metals", + "name_ru": "Металлы", + "description": "Precious metals for investment and jewelry making", + "description_ru": "Драгоценные металлы для инвестиций и ювелирного дела", + "parent": null, + "markup_percent": 0 + }, + { + "name": "Gold", + "name_ru": "Золото", + "description": "Fine gold in bars, coins, and raw forms", + "description_ru": "Золото в слитках, монетах и необработанном виде", + "parent": "Metals", + "markup_percent": 3 + }, + { + "name": "Silver", + "name_ru": "Серебро", + "description": "Sterling and fine silver for crafting and investment", + "description_ru": "Стерлинговое и чистое серебро для мастерства и инвестиций", + "parent": "Metals", + "markup_percent": 5 + }, + { + "name": "Platinum", + "name_ru": "Платина", + "description": "Premium platinum for jewelry and investment", + "description_ru": "Премиальная платина для ювелирных изделий и инвестиций", + "parent": "Metals", + "markup_percent": 4 + }, + { + "name": "Palladium", + "name_ru": "Палладий", + "description": "Palladium products for jewelry and industrial use", + "description_ru": "Изделия из палладия для ювелирного дела и промышленности", + "parent": "Metals", + "markup_percent": 4 + }, + { + "name": "Rhodium", + "name_ru": "Родий", + "description": "Rhodium plating materials and services", + "description_ru": "Материалы и услуги для родирования", + "parent": "Metals", + "markup_percent": 6 } ], "products": [ @@ -801,6 +963,377 @@ "price": 380, "purchase_price": 300, "quantity": 5 + }, + { + "name": "Diamond Solitaire Engagement Ring", + "name_ru": "Помолвочное кольцо с бриллиантом-солитером", + "description": "Classic 18K white gold engagement ring featuring a 1.0ct round brilliant diamond. Six-prong Tiffany-style setting with a comfort-fit band. GIA certified stone included.", + "description_ru": "Классическое помолвочное кольцо из белого золота 18K с бриллиантом круглой огранки 1.0 карата. Закрепка в стиле Тиффани с шестью крапанами и ободком комфортной посадки. В комплекте камень с сертификатом GIA.", + "category": "Rings", + "brand": "Maison Royale", + "partnumber": "JWL-RNG-DIA-SOL", + "price": 8500, + "purchase_price": 6800, + "quantity": 5 + }, + { + "name": "Ruby & Diamond Halo Ring", + "name_ru": "Кольцо с рубином и бриллиантовым гало", + "description": "Stunning 14K rose gold ring with a 1.2ct oval ruby center stone surrounded by a halo of 0.5ctw round diamonds. Vintage-inspired design with milgrain detailing.", + "description_ru": "Потрясающее кольцо из розового золота 14K с овальным рубином 1.2 карата в центре, обрамлённым ореолом бриллиантов общим весом 0.5 карата. Дизайн в винтажном стиле с миллигрейной отделкой.", + "category": "Rings", + "brand": "Maison Royale", + "partnumber": "JWL-RNG-RBY-HLO", + "price": 4200, + "purchase_price": 3400, + "quantity": 4 + }, + { + "name": "Emerald Pendant Necklace", + "name_ru": "Колье с изумрудной подвеской", + "description": "Elegant 18K yellow gold pendant featuring a 2.0ct pear-shaped Colombian emerald. Suspended on a delicate 18-inch cable chain. Includes quality assessment certificate.", + "description_ru": "Элегантная подвеска из жёлтого золота 18K с колумбийским изумрудом грушевидной формы 2.0 карата. Подвешена на изящной якорной цепочке длиной 45 см. В комплекте сертификат оценки качества.", + "category": "Necklaces & Pendants", + "brand": "Maison Royale", + "partnumber": "JWL-NCK-EME-PND", + "price": 12000, + "purchase_price": 9600, + "quantity": 3 + }, + { + "name": "Diamond Tennis Necklace", + "name_ru": "Бриллиантовое теннисное колье", + "description": "Luxurious 14K white gold tennis necklace with 5.0ctw round brilliant diamonds. 16-inch length with secure box clasp and safety catch. Each diamond is VS clarity, G-H color.", + "description_ru": "Роскошное теннисное колье из белого золота 14K с бриллиантами круглой огранки общим весом 5.0 карата. Длина 40 см с надёжным замком-коробочкой и предохранителем. Каждый бриллиант чистоты VS, цвета G-H.", + "category": "Necklaces & Pendants", + "brand": "Maison Royale", + "partnumber": "JWL-NCK-DIA-TNS", + "price": 15500, + "purchase_price": 12400, + "quantity": 2 + }, + { + "name": "Diamond Stud Earrings", + "name_ru": "Серьги-гвоздики с бриллиантами", + "description": "Classic 14K white gold diamond stud earrings with 1.0ctw total weight. Matched pair of round brilliant diamonds, E-F color, VS1-VS2 clarity. Four-prong basket setting with friction backs.", + "description_ru": "Классические серьги-гвоздики из белого золота 14K с бриллиантами общим весом 1.0 карата. Подобранная пара бриллиантов круглой огранки, цвет E-F, чистота VS1-VS2. Четырёхкрапанная закрепка с фрикционными застёжками.", + "category": "Earrings", + "brand": "Artisan's Forge", + "partnumber": "JWL-EAR-DIA-STD", + "price": 5200, + "purchase_price": 4200, + "quantity": 6 + }, + { + "name": "Sapphire Drop Earrings", + "name_ru": "Серьги-капли с сапфирами", + "description": "Elegant 18K gold drop earrings featuring 2.0ctw pear-shaped Ceylon sapphires accented by 0.3ctw diamond halos. Lever-back closure for secure, comfortable wear.", + "description_ru": "Элегантные серьги-капли из золота 18K с грушевидными цейлонскими сапфирами общим весом 2.0 карата, обрамлёнными бриллиантовым гало общим весом 0.3 карата. Застёжка с английским замком для надёжного и комфортного ношения.", + "category": "Earrings", + "brand": "Maison Royale", + "partnumber": "JWL-EAR-SAP-DRP", + "price": 3800, + "purchase_price": 3050, + "quantity": 4 + }, + { + "name": "Diamond Tennis Bracelet", + "name_ru": "Бриллиантовый теннисный браслет", + "description": "Timeless 14K white gold tennis bracelet with 3.0ctw round brilliant diamonds. 7-inch length with secure double-lock clasp. Diamonds are G-H color, VS clarity.", + "description_ru": "Вечный теннисный браслет из белого золота 14K с бриллиантами круглой огранки общим весом 3.0 карата. Длина 18 см с надёжным двойным замком. Бриллианты цвета G-H, чистоты VS.", + "category": "Bracelets & Bangles", + "brand": "Maison Royale", + "partnumber": "JWL-BRC-DIA-TNS", + "price": 8800, + "purchase_price": 7050, + "quantity": 3 + }, + { + "name": "Emerald & Gold Bangle", + "name_ru": "Обруч с изумрудами и золотом", + "description": "Sophisticated 18K yellow gold bangle set with 1.5ctw emerald-cut emeralds and 0.5ctw accent diamonds. Hinged design with safety chain. Inner circumference 6.5 inches.", + "description_ru": "Утончённый обруч из жёлтого золота 18K с изумрудами изумрудной огранки общим весом 1.5 карата и бриллиантовыми акцентами общим весом 0.5 карата. Шарнирный дизайн с предохранительной цепочкой. Внутренний обхват 16.5 см.", + "category": "Bracelets & Bangles", + "brand": "Artisan's Forge", + "partnumber": "JWL-BRC-EME-BNG", + "price": 6500, + "purchase_price": 5200, + "quantity": 2 + }, + { + "name": "Diamond Floral Brooch", + "name_ru": "Бриллиантовая цветочная брошь", + "description": "Art Nouveau inspired platinum brooch with 2.0ctw diamonds arranged in a floral motif. Features round brilliant and marquise-cut diamonds with exceptional sparkle.", + "description_ru": "Брошь из платины в стиле ар-нуво с бриллиантами общим весом 2.0 карата, выложенными в цветочный мотив. Включает бриллианты круглой и маркизной огранки с исключительным блеском.", + "category": "Brooches & Pins", + "brand": "Maison Royale", + "partnumber": "JWL-BRH-DIA-FLR", + "price": 4500, + "purchase_price": 3600, + "quantity": 3 + }, + { + "name": "Multi-Gem Lapel Pin", + "name_ru": "Булавка для лацкана с мульти-камнями", + "description": "Contemporary 18K gold lapel pin featuring a curated mix of sapphire, ruby, and emerald cabochons totaling 1.2ct. Modern geometric design by Artisan's Forge.", + "description_ru": "Современная булавка для лацкана из золота 18K с подобранной комбинацией кабошонов сапфира, рубина и изумруда общим весом 1.2 карата. Современный геометрический дизайн от Кузницы Мастера.", + "category": "Brooches & Pins", + "brand": "Artisan's Forge", + "partnumber": "JWL-BRH-GEM-LPL", + "price": 2800, + "purchase_price": 2250, + "quantity": 5 + }, + { + "name": "Standard Gemstone Appraisal", + "name_ru": "Стандартная оценка камня", + "description": "Professional appraisal of a single gemstone by our certified gemologist. Includes identification, weight verification, color and clarity grading, treatment detection, and a detailed written report.", + "description_ru": "Профессиональная оценка одного драгоценного камня нашим сертифицированным геммологом. Включает идентификацию, проверку веса, определение цвета и чистоты, обнаружение обработки и подробный письменный отчёт.", + "category": "Gemstone Appraisal", + "brand": null, + "partnumber": "SVC-APR-STD", + "price": 150, + "purchase_price": 80, + "quantity": 999, + "is_digital": true + }, + { + "name": "Collection Appraisal Package", + "name_ru": "Оценка коллекции", + "description": "Comprehensive appraisal service for up to 10 gemstones. Ideal for estate evaluation, insurance documentation, or collection inventory. Each stone receives individual assessment and photography.", + "description_ru": "Комплексная услуга оценки до 10 драгоценных камней. Идеальна для оценки наследства, страховой документации или инвентаризации коллекции. Каждый камень получает индивидуальную оценку и фотографирование.", + "category": "Gemstone Appraisal", + "brand": null, + "partnumber": "SVC-APR-COL", + "price": 500, + "purchase_price": 250, + "quantity": 999, + "is_digital": true + }, + { + "name": "Design Consultation Session", + "name_ru": "Консультация по дизайну", + "description": "One-on-one consultation with our master jeweler to discuss your custom piece. Includes initial sketches, material recommendations, stone selection guidance, and a detailed project estimate.", + "description_ru": "Индивидуальная консультация с нашим мастером-ювелиром по созданию изделия на заказ. Включает начальные эскизы, рекомендации по материалам, помощь в выборе камней и детальную смету проекта.", + "category": "Custom Jewelry Design", + "brand": null, + "partnumber": "SVC-DSN-CSL", + "price": 250, + "purchase_price": 100, + "quantity": 999, + "is_digital": true + }, + { + "name": "Full Custom Design & 3D Rendering", + "name_ru": "Полный дизайн и 3D-моделирование", + "description": "Complete custom jewelry design service including CAD modeling, photorealistic 3D rendering, and wax prototype. Two rounds of revisions included. Final design ready for production.", + "description_ru": "Полная услуга индивидуального дизайна ювелирного изделия, включая CAD-моделирование, фотореалистичный 3D-рендеринг и восковой прототип. Включены два раунда правок. Финальный дизайн готов к производству.", + "category": "Custom Jewelry Design", + "brand": null, + "partnumber": "SVC-DSN-3DR", + "price": 800, + "purchase_price": 350, + "quantity": 999, + "is_digital": true + }, + { + "name": "Standard Prong Setting", + "name_ru": "Стандартная крапановая закрепка", + "description": "Professional prong setting service for a single gemstone. Includes four or six-prong setting in your choice of gold, platinum, or silver mount. Stone security guaranteed.", + "description_ru": "Профессиональная услуга крапановой закрепки одного драгоценного камня. Включает четырёх- или шестикрапанную закрепку в выбранной вами оправе из золота, платины или серебра. Гарантия надёжности крепления камня.", + "category": "Stone Setting", + "brand": null, + "partnumber": "SVC-SET-PRG", + "price": 200, + "purchase_price": 100, + "quantity": 999, + "is_digital": true + }, + { + "name": "Pavé Setting Service", + "name_ru": "Закрепка паве", + "description": "Expert pavé or channel setting of small accent stones. Price per stone for melee diamonds or colored gemstones. Minimum 10 stones per order. Includes stone alignment and leveling.", + "description_ru": "Экспертная закрепка паве или канальная закрепка мелких акцентных камней. Цена за камень для бриллиантов мелле или цветных камней. Минимум 10 камней в заказе. Включает выравнивание и нивелировку камней.", + "category": "Stone Setting", + "brand": null, + "partnumber": "SVC-SET-PVE", + "price": 45, + "purchase_price": 20, + "quantity": 999, + "is_digital": true + }, + { + "name": "Basic Jewelry Repair", + "name_ru": "Базовый ремонт украшений", + "description": "Standard repair services including ring sizing (up or down 2 sizes), prong retipping, clasp replacement, and chain soldering. Turnaround time 3-5 business days.", + "description_ru": "Стандартные ремонтные услуги, включая изменение размера кольца (на 2 размера вверх или вниз), восстановление крапанов, замену застёжек и пайку цепочек. Срок выполнения 3-5 рабочих дней.", + "category": "Jewelry Repair", + "brand": null, + "partnumber": "SVC-RPR-BSC", + "price": 120, + "purchase_price": 60, + "quantity": 999, + "is_digital": true + }, + { + "name": "Full Restoration Service", + "name_ru": "Полная реставрация", + "description": "Comprehensive jewelry restoration including cleaning, polishing, rhodium plating, stone tightening, and structural repair. Ideal for heirloom and vintage pieces. Includes before/after documentation.", + "description_ru": "Комплексная реставрация ювелирного изделия, включая чистку, полировку, родирование, подтяжку камней и структурный ремонт. Идеальна для фамильных и винтажных украшений. Включает документацию «до и после».", + "category": "Jewelry Repair", + "brand": null, + "partnumber": "SVC-RPR-FUL", + "price": 650, + "purchase_price": 300, + "quantity": 999, + "is_digital": true + }, + { + "name": "Standard Gemstone Re-cutting", + "name_ru": "Стандартная переогранка камня", + "description": "Professional re-cutting of an existing gemstone to improve brilliance, repair damage, or change shape. Includes precision faceting on state-of-the-art equipment. Weight loss assessment provided before work begins.", + "description_ru": "Профессиональная переогранка существующего драгоценного камня для улучшения блеска, устранения повреждений или изменения формы. Включает прецизионную огранку на современном оборудовании. Оценка потери веса предоставляется до начала работ.", + "category": "Stone Cutting", + "brand": null, + "partnumber": "SVC-CUT-STD", + "price": 300, + "purchase_price": 150, + "quantity": 999, + "is_digital": true + }, + { + "name": "Custom Fantasy Cut", + "name_ru": "Индивидуальная фантазийная огранка", + "description": "Bespoke fantasy or designer cut for rough or pre-cut gemstones. Our master cutter creates unique facet patterns that maximize color, brilliance, and visual impact. Includes design consultation.", + "description_ru": "Индивидуальная фантазийная или дизайнерская огранка необработанных или предварительно огранённых камней. Наш мастер-огранщик создаёт уникальные рисунки граней, максимизирующие цвет, блеск и визуальный эффект. Включает консультацию по дизайну.", + "category": "Stone Cutting", + "brand": null, + "partnumber": "SVC-CUT-FNT", + "price": 1200, + "purchase_price": 550, + "quantity": 999, + "is_digital": true + }, + { + "name": "24K Gold Bar 1oz LBMA", + "name_ru": "Слиток золота 24K 1 унция LBMA", + "description": "Investment-grade 1 troy ounce gold bar, 999.9 fine (24K). LBMA certified with unique serial number and assay certificate. Sealed in tamper-evident packaging.", + "description_ru": "Инвестиционный слиток золота 1 тройская унция, проба 999.9 (24K). Сертификат LBMA с уникальным серийным номером и пробирным сертификатом. В запечатанной защитной упаковке.", + "category": "Gold", + "brand": "Noble Metals Trading", + "partnumber": "MTL-GLD-BAR-1OZ", + "price": 2100, + "purchase_price": 1950, + "quantity": 20 + }, + { + "name": "18K Gold Wire 1mm (per gram)", + "name_ru": "Золотая проволока 18K 1мм (за грамм)", + "description": "Premium 18K (750) gold wire, 1mm diameter. Ideal for jewelry making, custom settings, and repair work. Sold per gram. Available in yellow, white, and rose gold alloys.", + "description_ru": "Премиальная золотая проволока 18K (750), диаметр 1 мм. Идеальна для ювелирного дела, индивидуальных оправ и ремонтных работ. Продаётся за грамм. Доступна в сплавах жёлтого, белого и розового золота.", + "category": "Gold", + "brand": "Noble Metals Trading", + "partnumber": "MTL-GLD-WIR-18K", + "price": 58, + "purchase_price": 52, + "quantity": 500 + }, + { + "name": "Sterling Silver Sheet 20ga (per oz)", + "name_ru": "Лист стерлингового серебра 20ga (за унцию)", + "description": "High-quality sterling silver (925) sheet metal, 20 gauge thickness. Dead soft temper for easy forming and fabrication. Sold per troy ounce. Ideal for bezels, backplates, and decorative elements.", + "description_ru": "Высококачественный лист стерлингового серебра (925), толщина 20 ga. Мягкий отжиг для лёгкой формовки и обработки. Продаётся за тройскую унцию. Идеален для оправ, подложек и декоративных элементов.", + "category": "Silver", + "brand": "Noble Metals Trading", + "partnumber": "MTL-SLV-SHT-925", + "price": 32, + "purchase_price": 26, + "quantity": 500 + }, + { + "name": "Fine Silver Wire 999 1mm (per oz)", + "name_ru": "Проволока чистого серебра 999 1мм (за унцию)", + "description": "Fine silver (999) wire, 1mm diameter. Exceptionally pure and malleable, perfect for wire wrapping, chain making, and granulation. Sold per troy ounce.", + "description_ru": "Проволока чистого серебра (999), диаметр 1 мм. Исключительно чистое и пластичное, идеальное для проволочной обмотки, изготовления цепочек и зерни. Продаётся за тройскую унцию.", + "category": "Silver", + "brand": "Noble Metals Trading", + "partnumber": "MTL-SLV-WIR-999", + "price": 28, + "purchase_price": 22, + "quantity": 500 + }, + { + "name": "Platinum Bar 1oz", + "name_ru": "Слиток платины 1 унция", + "description": "Investment-grade 1 troy ounce platinum bar, 999.5 fine. LPPM certified with serial number and assay certificate. Ideal for precious metals portfolio diversification.", + "description_ru": "Инвестиционный слиток платины 1 тройская унция, проба 999.5. Сертификат LPPM с серийным номером и пробирным сертификатом. Идеален для диверсификации портфеля драгоценных металлов.", + "category": "Platinum", + "brand": "Noble Metals Trading", + "partnumber": "MTL-PLT-BAR-1OZ", + "price": 1050, + "purchase_price": 950, + "quantity": 15 + }, + { + "name": "Platinum Wire 0.8mm (per gram)", + "name_ru": "Платиновая проволока 0.8мм (за грамм)", + "description": "950 platinum wire, 0.8mm diameter. Ideal for high-end jewelry fabrication, especially prong and bezel settings. Excellent durability and hypoallergenic properties. Sold per gram.", + "description_ru": "Платиновая проволока 950, диаметр 0.8 мм. Идеальна для изготовления ювелирных изделий премиум-класса, особенно крапановых и ободковых оправ. Отличная долговечность и гипоаллергенные свойства. Продаётся за грамм.", + "category": "Platinum", + "brand": "Noble Metals Trading", + "partnumber": "MTL-PLT-WIR-950", + "price": 35, + "purchase_price": 30, + "quantity": 300 + }, + { + "name": "Palladium Bar 1oz", + "name_ru": "Слиток палладия 1 унция", + "description": "Investment-grade 1 troy ounce palladium bar, 999.5 fine. Sealed with certificate of authenticity. A lightweight alternative to platinum with excellent investment potential.", + "description_ru": "Инвестиционный слиток палладия 1 тройская унция, проба 999.5. Запечатан с сертификатом подлинности. Лёгкая альтернатива платине с отличным инвестиционным потенциалом.", + "category": "Palladium", + "brand": "Noble Metals Trading", + "partnumber": "MTL-PLD-BAR-1OZ", + "price": 1200, + "purchase_price": 1080, + "quantity": 10 + }, + { + "name": "Palladium Sheet 24ga (per gram)", + "name_ru": "Лист палладия 24ga (за грамм)", + "description": "950 palladium sheet, 24 gauge. Increasingly popular in modern jewelry design for its light weight and bright white color that won't tarnish. Sold per gram.", + "description_ru": "Лист палладия 950, толщина 24 ga. Всё более популярен в современном ювелирном дизайне благодаря лёгкости и яркому белому цвету, не подверженному потемнению. Продаётся за грамм.", + "category": "Palladium", + "brand": "Noble Metals Trading", + "partnumber": "MTL-PLD-SHT-950", + "price": 42, + "purchase_price": 36, + "quantity": 200 + }, + { + "name": "Rhodium Plating Solution 100ml", + "name_ru": "Раствор для родирования 100мл", + "description": "Professional-grade rhodium plating solution (2g Rh/100ml). Ready-to-use bath for electroplating white gold, silver, and other jewelry metals. Produces a bright, reflective, tarnish-resistant finish.", + "description_ru": "Профессиональный раствор для родирования (2г Rh/100мл). Готовая к использованию ванна для гальванического покрытия белого золота, серебра и других ювелирных металлов. Создаёт яркое, отражающее, устойчивое к потемнению покрытие.", + "category": "Rhodium", + "brand": "Noble Metals Trading", + "partnumber": "MTL-RHD-SOL-100", + "price": 180, + "purchase_price": 140, + "quantity": 50 + }, + { + "name": "Rhodium Plating Service", + "name_ru": "Услуга родирования", + "description": "Professional rhodium plating for a single jewelry piece. Restores the bright white finish on white gold jewelry or provides a protective coating on silver. Turnaround 1-2 business days.", + "description_ru": "Профессиональное родирование одного ювелирного изделия. Восстанавливает яркий белый блеск украшений из белого золота или создаёт защитное покрытие на серебре. Срок выполнения 1-2 рабочих дня.", + "category": "Rhodium", + "brand": null, + "partnumber": "MTL-RHD-SVC-PLT", + "price": 85, + "purchase_price": 40, + "quantity": 999, + "is_digital": true } ], "post_tags": [ diff --git a/engine/core/fixtures/demo_blog_posts/about-us.en.md b/engine/core/fixtures/demo_blog_posts/about-us.en.md index e5c9d179..d844ee6a 100644 --- a/engine/core/fixtures/demo_blog_posts/about-us.en.md +++ b/engine/core/fixtures/demo_blog_posts/about-us.en.md @@ -1,9 +1,9 @@ -# About Us - **Welcome to the Schon Demo Store** > **You are viewing a live demonstration** of the [Schon e-commerce platform](https://schon.wiseless.xyz). Everything you see here — the products, the brands, the prices — is fictional, designed to showcase the platform's capabilities. No real transactions take place. +![Our showroom interior](/static/images/placeholder.png) + ## What Is This Store? This demo store is a fully functional showcase of **Schon** — a modern, production-ready e-commerce backend built for businesses of all sizes. We've set it up as a luxury gemstone and jewelry boutique to demonstrate how Schon handles rich product catalogs, multi-language support, advanced inventory management, and more. @@ -36,6 +36,8 @@ Schon is built with a modern technology stack: - **Celery** — Asynchronous task processing - **Docker** — Containerized deployment +![Team at work](/static/images/placeholder.png) + ## Explore the Demo Feel free to browse the store, create an account, add items to your cart, and explore the full shopping experience. Remember, this is a demo — no real charges will be made and no real products will be shipped. diff --git a/engine/core/fixtures/demo_blog_posts/about-us.ru.md b/engine/core/fixtures/demo_blog_posts/about-us.ru.md index 036d9603..30588bd5 100644 --- a/engine/core/fixtures/demo_blog_posts/about-us.ru.md +++ b/engine/core/fixtures/demo_blog_posts/about-us.ru.md @@ -1,9 +1,9 @@ -# О нас - **Добро пожаловать в Демо-магазин Schon** > **Вы просматриваете живую демонстрацию** [платформы электронной коммерции Schon](https://schon.wiseless.xyz). Всё, что вы видите здесь — товары, бренды, цены — является вымышленным и предназначено для демонстрации возможностей платформы. Реальные транзакции не осуществляются. +![Интерьер нашего шоурума](/static/images/placeholder.png) + ## Что это за магазин? Этот демонстрационный магазин — полнофункциональная витрина **Schon** — современного, готового к продуктивному использованию бэкенда электронной коммерции, созданного для бизнеса любого масштаба. Мы оформили его как бутик роскошных драгоценных камней и ювелирных изделий, чтобы продемонстрировать, как Schon работает с богатыми каталогами товаров, многоязычной поддержкой, расширенным управлением запасами и многим другим. @@ -36,6 +36,8 @@ Schon построен на современном технологическо - **Celery** — Асинхронная обработка задач - **Docker** — Контейнеризированное развёртывание +![Команда за работой](/static/images/placeholder.png) + ## Исследуйте демо Просматривайте магазин, создавайте учётную запись, добавляйте товары в корзину и изучайте полный покупательский опыт. Помните, что это демонстрация — реальные платежи не взимаются, реальные товары не отправляются. diff --git a/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md b/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md index 276dfdbd..adc5b04f 100644 --- a/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md +++ b/engine/core/fixtures/demo_blog_posts/behind-the-platform.en.md @@ -1,9 +1,7 @@ -# Behind the Platform: How Schon Powers This Store - -*Published: December 20, 2025* - Ever wondered what runs behind the scenes of an online gemstone store? In this post, we pull back the curtain on the technology that powers the Schon Demo Store — and explain why we believe Schon is the right foundation for your next e-commerce project. +![Schon admin dashboard screenshot](/static/images/placeholder.png) + ## The Challenge of Gemstone E-Commerce Selling gemstones online presents unique challenges that generic e-commerce platforms struggle with: @@ -24,6 +22,8 @@ Schon's attribute system lets you define custom attribute groups (Physical Prope Our demo store uses a single vendor (Schon Demo), but the platform supports unlimited vendors, each with their own pricing, stock levels, and markup percentages. The stock updater service runs as a separate worker, syncing inventory from external supplier feeds in real-time. +![API documentation interface](/static/images/placeholder.png) + ### API-First Architecture The entire storefront is powered by Schon's REST and GraphQL APIs. This means you can build any frontend you want: diff --git a/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md b/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md index 2951cba7..dab9e736 100644 --- a/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md +++ b/engine/core/fixtures/demo_blog_posts/behind-the-platform.ru.md @@ -1,9 +1,7 @@ -# За кулисами платформы: как Schon обеспечивает работу этого магазина - -*Опубликовано: 20 декабря 2025 г.* - Задумывались ли вы, что стоит за работой онлайн-магазина драгоценных камней? В этой статье мы приоткрываем завесу над технологией, обеспечивающей работу Демо-магазина Schon, и объясняем, почему Schon — правильная основа для вашего следующего проекта в электронной коммерции. +![Скриншот панели администратора Schon](/static/images/placeholder.png) + ## Вызовы электронной коммерции драгоценных камней Продажа драгоценных камней онлайн ставит уникальные задачи, с которыми универсальные платформы справляются с трудом: @@ -24,6 +22,8 @@ Наш демо-магазин использует одного поставщика (Schon Demo), но платформа поддерживает неограниченное количество поставщиков, каждый со своим ценообразованием, остатками и процентами наценки. Сервис обновления остатков работает как отдельный воркер, синхронизируя запасы из внешних фидов поставщиков в реальном времени. +![Интерфейс документации API](/static/images/placeholder.png) + ### API-ориентированная архитектура Вся витрина работает через REST и GraphQL API Schon. Это значит, что вы можете создать любой фронтенд: diff --git a/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md b/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md index 36cdcf00..f1f9fcfa 100644 --- a/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md +++ b/engine/core/fixtures/demo_blog_posts/bilingual-experience.en.md @@ -1,9 +1,7 @@ -# Now Available in Russian: Full Bilingual Shopping Experience - -*Published: January 28, 2026* - We're pleased to announce that the Schon Demo Store now offers a **complete bilingual experience** in English and Russian. Every product description, category name, brand story, and informational page has been professionally translated to provide a seamless shopping experience for Russian-speaking customers. +![Side-by-side language comparison](/static/images/placeholder.png) + ## What's Translated - **Full product catalog** — All 50+ gemstone listings with detailed descriptions, specifications, and grading information @@ -23,6 +21,8 @@ For store operators, this means: - **SEO-friendly** — Each language version gets proper meta tags and descriptions - **Easy management** — Translations are managed through the admin panel alongside the original content +![Multilingual product page example](/static/images/placeholder.png) + ## Try It Yourself Switch your browser's language preference to Russian (or use the language selector in your storefront) to see the full translated experience. Every detail has been localized, from the product specifications to the checkout flow. diff --git a/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md b/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md index 769d6acc..6ad437e7 100644 --- a/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md +++ b/engine/core/fixtures/demo_blog_posts/bilingual-experience.ru.md @@ -1,9 +1,7 @@ -# Теперь на русском: полноценный двуязычный шоппинг - -*Опубликовано: 28 января 2026 г.* - Мы рады сообщить, что Демо-магазин Schon теперь предлагает **полноценный двуязычный опыт** на английском и русском языках. Каждое описание товара, название категории, история бренда и информационная страница профессионально переведены для обеспечения удобного шоппинга для русскоязычных покупателей. +![Сравнение языковых версий](/static/images/placeholder.png) + ## Что переведено - **Весь каталог товаров** — Все 50+ листингов драгоценных камней с подробными описаниями, характеристиками и информацией о качестве @@ -23,6 +21,8 @@ - **SEO-оптимизация** — Каждая языковая версия получает корректные мета-теги и описания - **Удобное управление** — Переводы управляются через панель администратора наряду с оригинальным контентом +![Пример многоязычной страницы товара](/static/images/placeholder.png) + ## Попробуйте сами Переключите языковые настройки браузера на русский (или используйте переключатель языка в витрине) для просмотра полностью переведённого интерфейса. Каждая деталь локализована — от характеристик товаров до процесса оформления заказа. diff --git a/engine/core/fixtures/demo_blog_posts/faq.en.md b/engine/core/fixtures/demo_blog_posts/faq.en.md index 235341bc..5b933955 100644 --- a/engine/core/fixtures/demo_blog_posts/faq.en.md +++ b/engine/core/fixtures/demo_blog_posts/faq.en.md @@ -1,9 +1,9 @@ -# Frequently Asked Questions - **Schon Demo Store** > **Demo Notice:** This FAQ pertains to the Schon Demo Store, a demonstration environment for the [Schon e-commerce platform](https://schon.wiseless.xyz). All products and transactions are fictional. +![Customer browsing our online store](/static/images/placeholder.png) + ## General Questions ### What is this website? diff --git a/engine/core/fixtures/demo_blog_posts/faq.ru.md b/engine/core/fixtures/demo_blog_posts/faq.ru.md index 7ce789f9..e1f7a488 100644 --- a/engine/core/fixtures/demo_blog_posts/faq.ru.md +++ b/engine/core/fixtures/demo_blog_posts/faq.ru.md @@ -1,9 +1,9 @@ -# Часто задаваемые вопросы - **Демо-магазин Schon** > **Уведомление:** Данный раздел FAQ относится к Демо-магазину Schon — демонстрационной среде для [платформы электронной коммерции Schon](https://schon.wiseless.xyz). Все товары и транзакции являются вымышленными. +![Покупатель просматривает наш онлайн-магазин](/static/images/placeholder.png) + ## Общие вопросы ### Что представляет собой этот сайт? diff --git a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md index e513ba50..157358e9 100644 --- a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md +++ b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.en.md @@ -1,9 +1,7 @@ -# Understanding Gemstone Certification: A Buyer's Guide - -*Published: January 15, 2026* - Whether you're purchasing your first gemstone or adding to an established collection, understanding certification is essential. This guide explains the major gemological laboratories, what their reports cover, and why certification matters. +![GIA certificate example](/static/images/placeholder.png) + ## Why Certification Matters A gemstone certificate (also called a grading report) is an independent, expert assessment of a stone's characteristics. It provides: @@ -47,6 +45,8 @@ Part of the Swiss Foundation for the Research of Gemstones, SSEF is recognized f - Pearl testing (natural vs. cultured) - High-value gemstone verification +![Gemological testing equipment](/static/images/placeholder.png) + ## What a Certificate Includes A typical gemstone certificate will document: diff --git a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md index b6e60614..171827e8 100644 --- a/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md +++ b/engine/core/fixtures/demo_blog_posts/gemstone-certification-guide.ru.md @@ -1,9 +1,7 @@ -# Сертификация драгоценных камней: руководство покупателя - -*Опубликовано: 15 января 2026 г.* - Приобретаете ли вы свой первый драгоценный камень или пополняете существующую коллекцию — понимание сертификации необходимо. В этом руководстве мы объясним, какие существуют основные геммологические лаборатории, что включают их отчёты и почему сертификация важна. +![Пример сертификата GIA](/static/images/placeholder.png) + ## Зачем нужна сертификация Сертификат драгоценного камня (также называемый экспертным заключением) — это независимая экспертная оценка характеристик камня. Он обеспечивает: @@ -47,6 +45,8 @@ - Экспертизу жемчуга (натуральный или культивированный) - Верификацию драгоценных камней высокой стоимости +![Геммологическое оборудование для тестирования](/static/images/placeholder.png) + ## Что включает сертификат Типичный сертификат драгоценного камня содержит: diff --git a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md index ffa1d035..871d91eb 100644 --- a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md +++ b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.en.md @@ -1,9 +1,7 @@ -# Holiday Gift Guide: Top Gemstones Under $5,000 - -*Published: January 5, 2026* - Looking for the perfect gift that combines beauty, rarity, and lasting value? Our curators have selected the most impressive gemstones under $5,000 from this season's collection. +![Curated gift selection display](/static/images/placeholder.png) + ## Our Top Picks ### 1. Ethiopian Welo Opal 3.8ct — $3,500 @@ -38,6 +36,8 @@ The legendary deep purple of Siberian amethyst, with red flashes that make it on A brilliant transparent opal with intense orange color from Mexico. Lumina Treasures offers this unique piece that glows with inner fire. +![Gift-wrapped gemstone box](/static/images/placeholder.png) + ## Gift-Worthy Presentation Every gemstone purchase from our store includes: diff --git a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md index d3beec1e..5ac01e19 100644 --- a/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md +++ b/engine/core/fixtures/demo_blog_posts/holiday-gift-guide.ru.md @@ -1,9 +1,7 @@ -# Подарочный гид: лучшие драгоценные камни до $5 000 - -*Опубликовано: 5 января 2026 г.* - Ищете идеальный подарок, сочетающий красоту, редкость и непреходящую ценность? Наши кураторы отобрали самые впечатляющие драгоценные камни стоимостью до $5 000 из коллекции этого сезона. +![Витрина с подарочной подборкой](/static/images/placeholder.png) + ## Наш выбор ### 1. Эфиопский опал Вело 3.8 карата — $3 500 @@ -38,6 +36,8 @@ Блестящий прозрачный опал интенсивного оранжевого цвета из Мексики. Lumina Treasures предлагает этот уникальный камень, светящийся внутренним огнём. +![Подарочная коробка с драгоценным камнем](/static/images/placeholder.png) + ## Подарочное оформление Каждая покупка драгоценного камня в нашем магазине включает: diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md index 508d47ac..f1dcc9f5 100644 --- a/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.en.md @@ -1,10 +1,9 @@ -# Privacy Policy - **Schon Demo Store** -*Last updated: February 2026* > **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real transactions are processed, and no actual personal data is collected through purchases. This privacy policy is provided as an example of a production-ready document. If you are interested in deploying Schon for your own store, please visit [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Professional gemstone display case](/static/images/placeholder.png) + ## 1. Introduction Welcome to Schon Demo Store ("we," "our," or "us"). We are committed to protecting your privacy and ensuring the security of your personal information. This Privacy Policy explains how we collect, use, disclose, and safeguard your information when you visit our website and use our services. diff --git a/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md index 46dda9ed..cde6fda4 100644 --- a/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md +++ b/engine/core/fixtures/demo_blog_posts/privacy-policy.ru.md @@ -1,10 +1,9 @@ -# Политика конфиденциальности - **Демо-магазин Schon** -*Дата последнего обновления: февраль 2026 г.* > **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные транзакции не обрабатываются, персональные данные в рамках покупок не собираются. Настоящая политика конфиденциальности представлена в качестве примера документа, готового к использованию в рабочей среде. Если вы заинтересованы в развёртывании Schon для вашего магазина, посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Профессиональная витрина с драгоценными камнями](/static/images/placeholder.png) + ## 1. Введение Добро пожаловать в Демо-магазин Schon («мы», «наш» или «нас»). Мы стремимся защищать вашу конфиденциальность и обеспечивать безопасность ваших персональных данных. Настоящая Политика конфиденциальности разъясняет, каким образом мы собираем, используем, раскрываем и защищаем вашу информацию при посещении нашего веб-сайта и использовании наших услуг. diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.en.md b/engine/core/fixtures/demo_blog_posts/return-policy.en.md index d2523a33..2a714c08 100644 --- a/engine/core/fixtures/demo_blog_posts/return-policy.en.md +++ b/engine/core/fixtures/demo_blog_posts/return-policy.en.md @@ -1,10 +1,9 @@ -# Return Policy - **Schon Demo Store** -*Last updated: February 2026* > **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real products are sold or shipped. This Return Policy is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Secure packaging for returns](/static/images/placeholder.png) + ## 1. Overview At Schon Demo Store, we want you to be completely satisfied with your purchase. If you are not satisfied for any reason, we offer a straightforward return process as outlined below. diff --git a/engine/core/fixtures/demo_blog_posts/return-policy.ru.md b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md index fa0a85bb..c4323e44 100644 --- a/engine/core/fixtures/demo_blog_posts/return-policy.ru.md +++ b/engine/core/fixtures/demo_blog_posts/return-policy.ru.md @@ -1,10 +1,9 @@ -# Политика возврата - **Демо-магазин Schon** -*Дата последнего обновления: февраль 2026 г.* > **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные товары не продаются и не отправляются. Настоящая Политика возврата представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Надёжная упаковка для возвратов](/static/images/placeholder.png) + ## 1. Обзор В Демо-магазине Schon мы хотим, чтобы вы были полностью удовлетворены покупкой. Если по какой-либо причине вы не удовлетворены, мы предлагаем простой процесс возврата, описанный ниже. diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.en.md b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md index 0f39db48..df852f11 100644 --- a/engine/core/fixtures/demo_blog_posts/shipping-info.en.md +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.en.md @@ -1,10 +1,9 @@ -# Shipping Information - **Schon Demo Store** -*Last updated: February 2026* > **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real products are shipped. This Shipping Information page is provided as an example of a production-ready document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Premium insured shipping packaging](/static/images/placeholder.png) + ## 1. Shipping Methods We offer the following shipping options for all orders: diff --git a/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md index 81243059..d3ce53a0 100644 --- a/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md +++ b/engine/core/fixtures/demo_blog_posts/shipping-info.ru.md @@ -1,10 +1,9 @@ -# Информация о доставке - **Демо-магазин Schon** -*Дата последнего обновления: февраль 2026 г.* > **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные товары не отправляются. Настоящая страница с информацией о доставке представлена в качестве примера документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Премиальная застрахованная упаковка для доставки](/static/images/placeholder.png) + ## 1. Способы доставки Мы предлагаем следующие варианты доставки для всех заказов: diff --git a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md index 7137f7c2..0e225281 100644 --- a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md +++ b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.en.md @@ -1,9 +1,7 @@ -# New Collection: Spring 2026 Gemstone Arrivals - -*Published: February 10, 2026* - We are excited to announce the arrival of our **Spring 2026 Collection** — a curated selection of exceptional gemstones sourced from the world's most renowned origins. +![New emerald arrivals](/static/images/placeholder.png) + ## What's New This season's collection brings a fresh wave of color and brilliance to our catalog: @@ -12,6 +10,8 @@ This season's collection brings a fresh wave of color and brilliance to our cata We've expanded our emerald selection with stunning pieces from **Afghanistan's Panjshir Valley** and **Ethiopia's emerging deposits**. These new arrivals complement our existing Colombian and Zambian offerings, giving collectors and designers more options across different price points and color profiles. +![Asscher cut diamond close-up](/static/images/placeholder.png) + ### Expanded Diamond Cuts Our diamond selection now includes the elegant **Marquise** and sophisticated **Asscher** cuts alongside our existing round brilliant, princess, oval, cushion, and emerald cuts. These additions reflect growing demand for distinctive silhouettes in engagement rings and fine jewelry. diff --git a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md index bbac9491..aaec775e 100644 --- a/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md +++ b/engine/core/fixtures/demo_blog_posts/spring-2026-collection.ru.md @@ -1,9 +1,7 @@ -# Новая коллекция: поступление драгоценных камней весна 2026 - -*Опубликовано: 10 февраля 2026 г.* - Мы рады сообщить о поступлении нашей **Весенней коллекции 2026** — тщательно отобранной подборки исключительных драгоценных камней из самых известных месторождений мира. +![Новые поступления изумрудов](/static/images/placeholder.png) + ## Что нового Коллекция этого сезона привносит новую волну цвета и блеска в наш каталог: @@ -12,6 +10,8 @@ Мы расширили ассортимент изумрудов потрясающими экземплярами из **Панджшерской долины Афганистана** и **новых месторождений Эфиопии**. Эти новинки дополняют наши существующие колумбийские и замбийские предложения, предоставляя коллекционерам и дизайнерам больше вариантов в различных ценовых категориях и цветовых профилях. +![Бриллиант огранки «Ашер» крупным планом](/static/images/placeholder.png) + ### Расширенный выбор огранок бриллиантов Наш ассортимент бриллиантов теперь включает элегантную огранку **«Маркиз»** и утончённую **«Ашер»** наряду с существующими круглой, «Принцессой», овальной, «Кушон» и изумрудной огранками. Эти дополнения отражают растущий спрос на выразительные силуэты в обручальных кольцах и ювелирных изделиях. diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md index b9a7f420..df075760 100644 --- a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.en.md @@ -1,10 +1,9 @@ -# Terms & Conditions - **Schon Demo Store** -*Last updated: February 2026* > **Demo Notice:** This is a demonstration store powered by the [Schon](https://schon.wiseless.xyz) e-commerce platform. No real transactions are processed, no real products are sold, and no real money is charged. These Terms & Conditions are provided as an example of a production-ready legal document. To deploy Schon for your own store, visit [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Professional gemstone display case](/static/images/placeholder.png) + ## 1. Acceptance of Terms By accessing and using the Schon Demo Store website ("Website"), you accept and agree to be bound by these Terms & Conditions ("Terms"). If you do not agree to these Terms, you must not use the Website. diff --git a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md index b58c5d1a..3b2d4f9d 100644 --- a/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md +++ b/engine/core/fixtures/demo_blog_posts/terms-and-conditions.ru.md @@ -1,10 +1,9 @@ -# Условия использования - **Демо-магазин Schon** -*Дата последнего обновления: февраль 2026 г.* > **Уведомление:** Это демонстрационный магазин, работающий на платформе электронной коммерции [Schon](https://schon.wiseless.xyz). Реальные транзакции не обрабатываются, реальные товары не продаются, реальные платежи не взимаются. Настоящие Условия использования представлены в качестве примера юридического документа, готового к использованию в рабочей среде. Для развёртывания Schon для вашего магазина посетите [schon.wiseless.xyz](https://schon.wiseless.xyz). +![Профессиональная витрина с драгоценными камнями](/static/images/placeholder.png) + ## 1. Принятие условий Получая доступ к веб-сайту Демо-магазина Schon («Веб-сайт») и используя его, вы принимаете и соглашаетесь соблюдать настоящие Условия использования («Условия»). Если вы не согласны с настоящими Условиями, вы не должны использовать Веб-сайт. diff --git a/engine/core/fixtures/demo_products_images/AME-CIT-850-MD.jpeg b/engine/core/fixtures/demo_products_images/AME-CIT-850-MD.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0bdb8fdb475340cc5c664cbbec43dc6a5f78dc71 GIT binary patch literal 8466 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 ayY=Cen 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%0A*t4c#&OSJmf%U0@vsjmvesbgUsm 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 @>QfOSq}N=>JyE{v(O1!|$7?e}BKYGQG-J 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 R0000000000000000026oL4g1O literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/EME-AFG-180-PJ.png b/engine/core/fixtures/demo_products_images/EME-AFG-180-PJ.png new file mode 100644 index 0000000000000000000000000000000000000000..09be553c22bd7d67291fb45e002f0b28138c8371 GIT binary patch literal 179437 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ĝ`4) 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

    S-8^j} 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 pK>Rd-D8o@gwWd{{`x1(R}~_ literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/EME-COL-PAIR-100.jpeg b/engine/core/fixtures/demo_products_images/EME-COL-PAIR-100.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..54d8de220f3c77fb8f51efd9ef2a33c85f7bf5f9 GIT binary patch literal 4357 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 literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/EME-ETH-250.jpg b/engine/core/fixtures/demo_products_images/EME-ETH-250.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b8112af4260fc38560903daf3b4600febebb00f GIT binary patch literal 60645 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 JXlS}g|1X7A&n^G} literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/PRL-BAR-16MM-WH.jpg b/engine/core/fixtures/demo_products_images/PRL-BAR-16MM-WH.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6087d8dae8a45f0ba58fe76720c72dabd945de37 GIT binary patch literal 24721 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 XW1B&j&rn zUe%mr@c#gVAP2(%h6BuuN(@YbjLd?J|Bo=p03FE0%m{KT46v~?GP5$VZ~$cu1%R@Q zOw4R7tgKKKKpu-AE1My^kg%d-VB*4!2bBvOCtg%C3Q9WU1k@r9Gz-}@ps7GDKnZC< zumm%bO^kv}LW+Tg|8Fty0EL+ZnFSf_8TL5996}bITp%gIH~~d#%^v5Dmlb)lZuO=` zJw7hC`C9rd@=vRg3jobTKAkwb_=Hd8yB2-6gM`%egk|alcN)_D@Udl}@g- zmwd}_yFTl~o5FT^kFAfZ&%eAR`0^Q_{+fATUVSzD;TE~3?!x1jFU4ofeD%KIEL+aS zAEuxF%-sCy_TxCiVtLU^PdnzuEwZio#oe4JI80o+osEMg@$T1@tWaf-OiFF+PD`Jzvz*+L1AS8HG2 z-}k%3$J+I*rDcDhTzz}gHT&FuFXkqnuP>_Gx>Neg^;u`r>bKYKS6z6j?DDzERY%IV zy;%J*eVt6DW>wgiJ#|~>H;3uvUir}TPmJ4rN`2tvsk?Sr%v;PRYr1y&?hmb*M~mHJ zu5B&5m3m^oRaV73kDl*+@0Xa}w(pjHe|27PPW92cw~s$Z#?CL~JlSm4_wD{}+g~o{ z_lL&I-{tIAOq*4B#&rJQYgd2fe~VkbJ@;N%1J?;eG-~Nx+;C1VCx7 z@6Tuc<$L7c$82%+^RZNy#7-1*}m-DKYy1V+0L+Z`L7}$)0iidcI>jbzIO5Ht0otp zeKZWad@b?J!P7rpTi^PeUhTT%c-urlS=*;Gxui19!_h|{Uq$EZlx$sA z7he*0?Us^l?KS;$8LJyxEK9$yyF9CU%gnE9O6T8y5xwqGy5yFKho9w^lV2#w8kkf4+x2~+X zrxIEC^Zk+cKm8+f)+X7Cu}i(Vw7EL!% zziOJ@%B`zYi(d0?tXPvP8>?%t{#h-%JiR?${&(uhi2f<30uNSOuFa3xlOBBk_W6Sc ztzG_={bM;P_%HN<)z$WW%Jo=ELMvi_d1##@uef#d)dJy r2V%8xqCG56v2h05}{5hx75l5dvE#FgO~qZ68tx z#kcFQomYscyl&j>2Nh!9>z&T~&fYupTH4d!CKRBh(hw|yhyAB)0Yh_|Xx^SM1biD3 zf!vzkgx$4I=P*)K*G@j<_Qc225UPS#+*|Gt*a5i*ZHoq`;H&nZc>iCGp9g>Hzw7}6 z1dPBr%=U927b<@zW{PpdCgQeo31qoOoIS$qZ_Pybn>x>Vl`F33KQ_p|aM&NQw+BV|&J&&l<7BPGf>s zy!}1Tn>c)>wB@(PbhAU>8}LId94WLqfv`eZSaH+v2`FA&DkO zym8HpQ6|YaVm~c~tom*!=9dZw|Kxps^+Thn?er}B7K*{fMT+NGr5T-DjvznKVrF`L z!du^sWEmN

    iMQ_0J9eX{ir<3ecw}`V+sT=tGIguvo{(-ENv_C1;M)=M<2Lm&)uEA;HS=`} zrmu3myS{-IHju~;J{{}VW}kCZ`NM_QC5BU{zN#hFn+vvCm+3K_tt&FqS-86rQL}{H zQ^4$B{^vp(ERIN6EAXIa8b*?So3jsiQEa5n>NvkJ^TXX?eD`&q`{@)exY0gLbW*Ql z_Lwu7V{QUW%C^zSsT544^JFQj_)D3FO%eTaidGgeD)sFCUN`be(M3OsO}lo3H-)73 zvR)3CI&fK86I-*9g()wc7+PA>p(WatbkH9i2Cx^7!4FulNv=q-1Pq zwI<$t^~CGO+wL2(I0;;RC7vUfH63S~aA8@mVvhM-i#G8($yTMgXn3@rS#YEA8%de) z;h5mc#j0bJ>e1n3RmWE;?_F@e_*fXYul#a*Q9@Mr4}a$-%7?)U%b%8TlhAbj(B1V9i8{}q|5 z0lT=}%o4njk*jm`TH4b3(W2*%!ux~y{&(H z(`Q=BS3`TpOebHbTXh$ha+>Y69-?l|WV>OCO2gR<3meXE6aUJ(`r|X7RH?sDa57$I zX{G9oPH8h}t&g2Df2qiu#HHW#cf{z1L{2@^DHvxsy(QXX&d>FG%PSbArz56W8rM&1 zU7k7lI9gRx?jbSu)BLPK*3AwL1B~NI>#R)JCxB>u&oV<2Cs%r9vdg zRfMSsn3)q^^3K31HTbWnGFo(wB_TsIfBooGL5!`IF9P z?BcXGDI=R!RYh@Sx>c>6w5uD=IppKWiK=vZX4F^5;gbIK_S-?4*wFC^TDp>=)KDZR zez{I}Vlrbp9o>(&#Ws8SP; zlUOXXVDMXHU!<|j#FPHzFn{^p3WnoHFH$&Vb*dq0rlr|dORjM45ElrG+I^nM`ykN+ zC%_?kAhr9PZyX>1m{|`zSDyeS!2tj?^dV1l-n6iHH!t0LZN~K*drxzW&|if1TzJ=wr&%_Obwo^hBzSz{Wu`H z;Q)4!QSL{aqnZp6Kh$3om?!kK3XyYBcaBJ(5CTwwc`hVF1O(~|1qp>hdsTpnIDm3b zfJ2|=DM6T-%6156lfx3EAgYqQqkOLj5ECTyY@JDn9PwtMB>(^sUf~BkJnc;@i1!fw zStSr;WI5FE3cSgAJA7~#)WXhL{ZW0Og#d^FiOpdi8G>k&#Fi;!w>bb&DQJMVkmvjV I5IHXWA5{&fN&o-= literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/RUB-THA-150-VR.jpg b/engine/core/fixtures/demo_products_images/RUB-THA-150-VR.jpg new file mode 100644 index 0000000000000000000000000000000000000000..92a1db1b917dee27997a722c75948bdb71fe2ad7 GIT binary patch literal 196872 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

    #%(78;*H}C)V#!kuG{UIPc&1=yido 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�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�cCV7K@oze@>EF2Ll7B?kVPaErmFP@ookX@ zlrh}KmQu}dP<9gU?(sJl;n%P@A08L%c^=_t(pv4z*7lIJPKM(7<|Y^YI+{FD$l9n4 zTTKb^IhJ9Pbu}MF$m%@J+djTfXxerdJc%q@llAb&p2oHdtVMZl)3xMIu|*P=ce{B& zSUaVRhGo<11JbIwp198w0EoywD}>hR<#)$BWsB0dz8$>#7izz^*U?7p{ldPhb{}c) zCB57Jp8cY@wf7I|Yut2XwzGqe>>6a7ji&W2((Ul>o7+Iv7EM_shDok(dox>E&8BNs z#N`s&`hqkKmTgMbM(;8yyzxgYI@+Y58a9!3bd&;qI|9U{{VMSfEXU7S}fEfr~LjO3>6JlN-;`&KHL=*$_(pF z6%}ABm&f5>--0UM9S2Xl{#YXa()aO#CJ2}!V2Oe%Zai~8;nM_E@I^s~TGKzn1yyG% zSFL{U+s_3>j+#2aJNI3Rj>M75lMNs*PS-WWXuNc@yGE1lGNA zReUfC5xUtaSql$H8IMrR6VQegZ~1%;lXncVAtC|lT6d6b8oQ{;jn6O43y-b&xBVtumrg$-&lr zyMd1-rZ@eUOUxbt`iS(XdY?=+^g^YDTvDQ-nuAJt#ATd-BE&5FcUblOealeqTPZ0x z?Y5!->PYn(FUYhWkPbl5coT{cMj>o%&%;W^YAxq!DrI1dNzfNljRcb+eNnO+u&4kU z(@`H}a~Z^k5VNgZF(3u1_l>aXc369Qb+nn+O3|L3*I+(LIM1w^v}Y>*0ROFa-D&#wFW1iJ1$$&~I^^ zMo{MrxW6{7AE+#tqvO%uFil-Zmd!ZBWu%v9FMhvT-j{j~Y-HI9CE2uG)KrB3)TL zY~hnjS5}79v7Ka>dqd$^t-!1#?@Dze}tdn~vr$&xkM5oVX}YxZ4-~)9vpy zw1y^<`(?JpGqZb;JYZqi5qts6#X%mqlT5HMZdixV2fdw`}(0LIVl{0S)t3hs&tMS0H>| z7Y7e=>$bmL>2~dIqy9%n=4i~okOwIphc66R^2JF109&$d(7e`Ch?y3y521s$NUhT< z^y&^UZd=P%W!Mel)BDZ2YWAb$+lT~$Y6+kR4me^9aN`T)J6k+ZvQk2b#FSuiBoUZ2 z&b8^`ib2DZg5y0~qqnNJqmG@9Kyw(LWHZ;d-nGQ)$aA3})2IjWsRuk~T9bn7%5Q0< zVq{U@nEI?t`DfOjXMv#vnpYRFr&82v%S6e#57lkH8E2j9?>Jy7f;$M^C)$`<|8{9c`!?fq^lMOr_oc_)$WZk+a>E zs96@3s@9A(E?sH`F|IYs7>rjdJ1~*eYwsGyVZERqgL~L1hRwPwTeBz$KnPHv4%s52 zt5$7ANUw!PHgJSz54D2p{WHGU{-wx8p>PqvR1)W}gLW0LHl66(f3qa9nUpISivkLl z{LM5V<>?^gN862k?Ip?FtjqH5>B)MpragIcZH>!%dCDei9xez0>KooLBZ}Eu7r6VD z$GWcRZ$WV(nI^f9N*jZ8g(fpY+E_c%Hkmc5A!k~?s+!?1bWE01xH~2?8>{U;4r#^DIK*X(lfXolII|7_q#LO05Bi2> zcVauJM`zSdNve#!PF_A3&lWB-fmc{@-SpeO)qMW|$ho>t-5;#9n`bJD z{xM;?7~{Cn+ZSvC`rMEaW>Np9(p3xnM4+SO^VXg51?8mu#(Z$~_jQ;%Z9 z@;($UrMtPcXk;i_QxJ3wJNf}-0-D{4p#ayzDhzI|UoaG3JbJUxQWMrrBpJq3X08}k zyq2cAw`-?JC$|j((6Xs;kF2R3#-&HfDd+cNXBp-V#d!X^YLsLoBTyDr-onlyJKLg@ zHKc&Yrm;mNdPHp=wn0KeRCKL+=Zl;I6|>M!B%={V`GpR%+h&Kj^6916cBp4G?&}L$ zni_bF^76%`Q^Q3Lo;P7AnN$(=Tf5sEOX&T&+%KDNLAJ}xB(Qne+x1_o{S-1JP{yf8 z5u%o3l`6EMBN|OyT4I#|uX6l$cPMRo=~#gNxxWD}Zq5MqKR~l`!qG4!e5J;tRV)I~ zWmqvkCm8r`U+QMBqtQ}>m zvyg;Gi1m;5taOlvaG=zd0coZ5WIT0eRtLm%#LP}5b9$?7;LFLl;@p2wqw`RBP=KQ< z&{t3usi`$=zkV~|&R_0a9_b9SfsAUyr_+L>3i#Bzk(!dZ0QK?}2A>RFKeVhpDgOX0 zTkmo6QY(2GtcA0yDm>ls(@hxB!PDd^b{aIYNAPb(Ip8AD)uV=RQ`>Gm4++}S9XblI3bymhp2X?B^ z>Tgd`c1AB;J1Nw!AczwYX(~wc5^3`=@ikCs_6%JT9M-EIVo?!%RDu{1G-jxpb}q3a zriNxNGi?=Bk5xe(KovhV0DuFi;b#2qA04*J^Bd!%+4gn5BJ+M=Y{SGS6^JJdTk_ zWG$)WiL?rq1JJ;ZO9WeB+Cr(xT#3Ry$os+6b*;aE`DGcu*tACGN_y$X&;Fqzyv3P}a!YX*dqL zYr0riw;K|G7DPl{i!dDCrnT!HC?xSaCifwe3w4U9HCT zxJ9-stYtRIZ*g^TB1LTO=#Y@oGlfRR#>kb(j|~@>dZTf(qO)^LrEl)sq)0ecq?Z77 zJ{2y(dpG)V`e@;QLmyAPcj+629kOmgJX=RJ`n2~B&8D7yb?!X&@ZMW+ZKD3-3r9R- zk4C~cqeP6n5wjFaneRlob2&-3!;Tp8r!R`|UGGsF5HSWanHYdvi8qPmUlRcSSO5d2CTxS8kpm3fsW<5&l)cf;t5h(@#wnn3CDb11>(?!2o4qI&xF3 zwr<=>F=-1VjRT`etLH!gLsAcLL0bF(&oCqf&->JOS{b>8G_m2|j@Wl~GEtY@}0iWal01P-P1(=C? zei?nea8xS&2UGj7R98qcubv31tt+4Ga79}LU;oqh@q#7@m?B__f+h&4ve5i6MNO8! zX#M{H3=vy8f-6t>*DMiO%O8;YJ}3O~RaK0hDub6#F1eA?xT-7_%oY3?gX58>UX?g= zS4R?~H`bxUr2*Aib?9r?pv==OTRsZ+A)6Jgx6QN_CpFXP3^S=>N~=*utjXvoPsbIH z60#v8wI2Dj2@%`26soXAp`s`{NgYAfgY2bz^0BUI-u8m#Q`^$c^1HQk z9Ww}t^n@#^K&d@5$Yq^l5GxZ!nF*8OJXWRO_A#R3Z34cQDii>OGlC+Fim4&0e1ha_ zh|3q`wz_+y0C7LM)EoB77g~WpDi5rkL23v804xmp(xB(?ID&C8FZ@>G&B%}n3hR9K*ByKmiRD2Uv-l3-APIaJ}RWgB8#;YeuklpyQ0^OaNy%pGJLBTT>GBH; zBvQ>I6I0N!pru&X;pL02H9FS9_KsKXNY^xeeRwO2M4kv{5tbDJjVqNkjL7H+KevuG z!57fNeE3qSbP*m;7SQTyR^R z7UzFY8$Z~y=0kwYKt9DC-7iJNtm_iTLQ0|%dXqq=hJu5~!x7xf&LVR6b#q+a>$#0h z+on2yEQwO2{9mIi6xBU?eVKL2l>`xsV*@!nxGrY(+1!Lr4$iQooKthU+N8aEY0ND( zoba*#09{p6wWa(=<_) zttgU%q)-gO(?eWmTRCAVKT58DPps5h(BIZr4sDo%-|p_@EBmQMmhT&?TrA$E$(K+- zu8F0zjX^>9<08y$mH7K<%QdWc#BR@7U{g#2qI{R`LENg~qf-DXoyV2X5cjHB$ zyW6cKf5?VLx?nU_w5DJcIur#0i%63`2g>WuwVQ3J+?SOBo7vEGs*Ozqgy;%N zRoPUyVNXe5NgzL8Ay6~;41n=wS}VF21{@9*<&PC=yKK@EueQ_#uUyc9q!&JuU4OeQ zUmJm`g2OvGjN)>RKME;_6y9!Z;r{@)q?+O#u6u^QYekvF4Y^Ai6}d15Ra5@}On|Yg z6{xSJRd6-6fa%G1zK_+71=(rlWHh%(Bm!B+1)r#Ov-JTdy^N*AiV?Ia3arB>kb=d5 z)mAK8gQ@WF#-cL&MlxRIa7Jw?TmJypEtK`OYVLV{jI4AMte;A%%2>OV$$bq25DjH_`ncEx#r zs5M?*s_Y~731aTv;&Ef}SUZ_n-JI!CYDfTtQ|Vd(mzI8Y_~T@_jeO&H=K`bj9EVQT z^#U|QDw4~n=U%#ndQ;MWeh2M6iw?*hWwFK2%jBdnYAApmD9V%|)K^gR)lCEsvlzz$ z*soI2L;nC=WS&Cr!LG3eHy1#v=jpPM0Gn(Nxuc!I!mdrZJGDz5K^6I0ht6Cz!mBBRYc-)hG$BrlPQsf}oJ7%#lG#RO0}Q<}x(u zUb`Kt&VtSRcB0M$xaG;*vq`wO3{|Sy{-WaE2WB?)l357`t{2u22Gq<5uA@^^L1GuR!qD+)oReI89nWvoVt1XBKA~4rAC!9+c}78eJER7G3X5gW#f$h z0E*#vi^I+%Ne~1>9?)Bm>+A(a#;F}-W@QDcLYj)|6kL>o02QWw7`crDRdaVW7p7x! zav*hAmr@{o!s6D#!YL)Xl_M@gBFEbSnb~x;8i`R;O8H|nTY&y6pVi#Cs-3MprxOwk@R|OLwVdNbJ>`Nv`hZMR*{J7L7<33d2)LN}$v$ zN@6`c4cmes)TloqZW;}XYn{o#kNRrlv$HVAi{b;0uSB2Pcj*>?rT+kL_WuB^KX$Dw zEe?%r{jcCV#kjG#_e%cW@nlO)(|FpQqT6Hbmo`KxXBW3I!M=z1 zOjb=QLVA9dGUxo+mWS9JOJKmZ;QAT(V60ID@K{{Y6(B>9ue`irzh`gT?~ zcN0l+lV5I|mg95X+_!z!>gsv7E#q;xkVw~;GS4V^8J|$pt(X+WlMH)TnCdQGyME;E zOqZ>3#p+bL#$QoN4M@3ElciN53~D`Iw&-h3K-13?K)tBBtE?jsE*fB__7xqf3hOXx zIVjWW21Ai7Vy{f=U&i=--OC>CGVC8EJKD`;loDFKJ;%b`*CdC5g@Iw!!vPZGqH}0wC)`UP#0}l zS|^MJQVz8tB+j{t)6AI`x@X2a)WXIsP{uUYt@i4npQr-3ws;j$fK#g|L1oKb1bK|K z>S~1`haL-4LzhuZ8m_J{Azlh!X&#>1N9k1*QKzS@5Q<1?@XW>(juZNk>D*pfs5oKXh`+gL`Q1Dl&kO#-F`F`v% zR97HSQor!{V2Yv)&)G~7Rlyhk)c5g%CJ2}!V2Oez2)+?fOc7Bcg#Pcd!vs_rY15_% zt)yPLb^bK`aaC1gBz-{{9>0%{C{bdkhM@i#*X8kCv#-YmP_TC}9V8D5&~+Km8qssvC*lF7F|2L-CPot!MP1&M?$ ztrXCbDwJem)yYUSB$9qK2Ni^67kpNIso^E3_x+W-R}4!dD(g@c%z&$$kP-o41wqJH z#Q0l(hkwm%>|SyAP~%0Yx6PWS<08(5os5nQh{{VAaE&7BVVKl49}MvhR*-BK%GRzB ziHQW2t2d3H#_P@#kmq%lv^uPG>|pmwWja2IMwKKSwLKijZ|s?8HeTr_tu^` zk2I}i1b9}$7hD2Ig!_~SaN8V-M2S=+=to4Q2BWMk8~wF4sOeC814yn&&Y)1Ojk~gM z_JE_mL{6cODQ2+E28%C zKXON8&}Cq%;<{;a3;>YBpj}SatcH$9Q?|IgSV&Q&%n^a3^2ZKc1LXe6Y+I({kxLHY z!FgSjsc^fjFx(hg<^=BAPVlwd5?HvM0M@KC6{FIJ5>cJG2}U`i$EQ!HS);SF?&nP# zaynheNF3qKXhC8_RAT&%S4MuKJ%;xOh+V(98@9)B$aa0!I&M6dWSnm>3#~Stsqf~3 z*&fR2qy{&N<;1NZYBLHJM^k1}@}d}y6@S;cb$i#O_sy!^zftOJe`jx)8SX+tU=SkN zhz}V(8dWj`b)KIk&9%S{6)PT)>ecj>BB9iTVVKIJI%4^_4-?^7x*fwqxW-em26(U_ zgHLN8YU4hS1_b{Am3S>a*mr9T3sr$h=rPd}TYs*3; z0N&npRvm#W5J=CUZig{S0YP8e?X-YaoY=Q|StMAW)3|W=E;lOlgOr7?{%U~?5+$J2W4HK<&jgXG8@q;)g=m5gyZYG4^zbkeHAppjFmx#}y0xi}4n z?zA>^mm2NRNSp|64(zY5n7xD%sK^S`f(ff;KsCv#J{Xd65wai-0Ijy_@!9my7$1xD zWzTFM^cU#$`D3O>=St{Spr)49p{!I&{OG z+jX(ow>>7SQKvU_u(N3zjE)l4R8Fe>!{rHwm+?F}C1H3Mj4mhEmk|H!d~z>~qtSx0iB}WQdUBRIZnein5Sf)I2=A ztBCK#%aKr^)$TC!ZNfmANScpo-Fy$+n;9T&hmfnR(#s0$`+;D#_U1-maTU^338A@X z8kp699$h4ivi2`4Ox2XbpR*Wf8(<9RuBG;B=#*5tc zz1H5ZL=5ggT!=W4z=|^-4Bqgta*$P+ggMvJiPeBKI#3$6tn2E_JW2z0tuDKEmDt|! zRB`}SyD{hQQOmo6OK22&otise@PAV(g?x%9zJOhO#wY9$@rtpPf0x2SC z+QE-*E*QN2d+{p*G@_2!?Z@d1H414)W9eGtD%J5h*BU#QCo*0%;J%Qza(3*;%8W*w zFajZ;0mlG1V*d5UC22H>1Iocw$V4Qn_SZT{5~P+i@%VJc$4qCLryBG9ml3{8HM3?U z=EnzTjtoHSZ-TVlZ)3Bw{W1!*!buZ4X+T;~VrN(hSbd$X$cUq_8yT8$cmWpGY+L=UinNWF!*daF-Z}W-i}0UnO9j zn1UCQR#g#tn3&Fx$3RkPT4zj-GAu{LWMxl^=l3g+g@%M2nq!U}7Utp{THlP?CgXmE zx7o;TGDj6+SNye#TW|;u8Y2x1=*(ZCAdFV#rXV%4OeqMU8F?=Faqhd zS7mx)1KI5CUtf9$YV^0Ib}hryKBtsrtNyLYT7k?mAG8?}nlIv@EKG!2xPFQM0Bg^q z9lPoimt1{X{YLF~5PdlNOTF42H^T0qS=-%jaS*{Rmm9IM5nIQ(?9g8rcp;4%&MmSD$j><@V(zT< zW1nfmmJYsT+;@B1mZVPP$+YJv?yFi?yETN`VLnBzUhjP~9^Aks9IcV*3iT=nLBY6c*?jC)qL@O-b!=%+R@ z1xSc)=Cv}cmDJDOcQx>-sHdNvc(h;^CI0~a-(gcr3v$a!3W#&m4oWi8MLYu%LHmGBEz#7%&JLdfNFhZi0a}Vw zn(Fia04xl|*@sS@IoLr`yGZFkbIktmJO|r?j%C?M?T}SNbTzJYJuBDk!A4eY6$(HC zl;~<{TIcrQsIo{ueJSHgf#sffBD_J+5BZNQyzoU|1XYw!Q^a-tKjVTfSR((`_wj-z z2$&*ZiGn5wm?EaiNfgh+1XS=vL6`T?j~rDMtEEZsKX2`p2i&TxC5!eZoh#yNmMO_p zEL8A=T7%Hj_fzb}L)BGaZmmOCEV>&10I2k)F6vjtsxf`Htip~3Kq919Do_ED$w9A? z#nF%gp-B=3D_d^c5|HscLs$;+9Y4*L3Y{&T80j8#@Wsy=aKU6m@Zz;r>9UCn$1E|r zsgM?BI(tL_8o7m=UShpRN($1+05~kDO~{iiO}p#|M1kRGh-}8Qg3@6lH^6CjU|7jWUOx4#w|$LWYS4)^$rJwoEjavA;y7MOw=sItW6lpAf8YyHz`?yTLo#7_GC zC6LD;$Z65qW{{UY88(o7F-)-_4gp^yKMO^>@lZ{}ZdJH>(h!n65W3PidrV2y+Y=(J ztD#0jbn>lDmqWmS$hLI%FY9abkmr77tHuH*ZZduoi6s-ks;invbTeB+4m^b3$4EA zx65jZZIM;ZrVijpXvgNpEzLc-1^RP7fxNO_-29=eYvT6Z`mr+_uA;*N3`Q7e^vp(i~JGuV= zP3OFF?#|vo=F54t2IpwpqKimrZ7*%L+fSpqy27@k)B`G$jL1&i*t|{{^)7pL+I>Um z{YAT5-jK@8$H{Ue7{~^wFmPzj0dYqG-D?m8sYGB_v=l2!dV!}?T|*XJ4U~b+MhtZj zge}}A*)+nQ{_kq6wk=T9B!X)|I;jKGL7pvz!Qu|5x9RJ!oGudO%k?+KO?K(pNLJqG zOwjy*p{UE1G+HJ!uoufJcg;I}=9XQgCi{b#HsJ zSlv%cc-kdumJ1m)ay0$hqth~yMaqlqmHJZnnsmCbr7JE1!?0-isH{*7)nqzh~zn~2KV^G)lt#u zj+1J;cG!QkJ`aOC(xsn+vw*BNOHEIAXLSqP%Op+NSrS0aG-z3cK++YcdYpxPag}RP zr@3z^xmKt+;~_xFq_PUwA5XcBMAOi`Cm9y2^7v~ddATX!sw>Jg%F|93E zjq-Mucw#UM_omkl9`YTP#=yWoInAE7V~M{wJ;xifibOqe$Lt}sP1DU)-;*| z6bcwmrr8a&r>fEoJD_5uEk|{A8r+$GuF0 z{``v^Rvx2E<-^Sf!&dh{6&`XBRMWz}G9&M$4li|9o>Wv;H-6oRb`6J=t>a>mqcq(7ICa zWQicpNH71AR{(Y0Xc9BB0wwNsjZgkQ;8c;+zDK3!F=gaKP^G)`64VxgOZr7qQ ziP@$E8AagGc0A&XO5R`Dwmx{YC5t)l=ius_%e==mw4Za7*wtOT3fY{YffQ&aUWby>Cgm*5uQC5se|a>a6pwV( z};mO^e{S0i&D(JT%a%2D9AHBLygKRtykI4n50EWBF zNRooXwdJ_%ww%6CgE5@NjZohoXT*Fo?_Hre>0-%2Wlvh=;-zVgH}t;XK71;uO?bWg@OEc@v_JB3>UP-cDSw-= z+F!fZGqDyAYz?-_L&|y!>@&cDFjy9;>yFDET|s;sms^TyBAzq;Y{2Kwc=;F7^{=b( zz1l_U7A+g1C+V#zgmhHFMCHgB=ypUy+0}x&d}Hh5KG`Vyg2>kc-=A@&ZQ9;!hP^&8 z#XG*w0Mpal5O3p*ZMx@SJ6UO6w?rO{3a!0`fwgQ>TT|q|v<)>4r zHF}p70FPo4{CsQG%F}g0Jn)&LC1mdbL|rAYtI!N=eDr^oH4GG%I2mC~6xiP;U+ zG|V6reJSm~?bB74Z`acHXC|HFjhoL0k-&te6%P^0>ABo@#t<#t+!6%Pv?%LNd>BYq zFyB6E;$`_jz)Jk|?M9w)rwg?D5!aKM;!(>8WjH1VlL?@$WQ~TSqG^A;Y>q}v(u{z^ zz!()12+xG_o8aJ{_;~Iyq}NKthZ(g`T(`W`l5UG9V-c4Yu7a)^0iZF0G@<2IRfzOV zKD9EPT(6T>Yk3`$`(Lx5j)F6?O;H#SO22|1;2TUyNy)!yfFkpqj^tSUwCwvY%rth= z_>$_?rYNMeSWwh-(V#X2(hX|1W*}AsR?yKUw3}dkd#xbny`0A`3F_i<4DXS@Pg$7@&$({c0C9 z;Ary@MX(gY_8ehjF$T{Ws}2VLtZ3QFYv>1V1|ZuSam?J*3z(MT5^820wK0|~D#6(M z95LclV9`ZcFpSm6!_ljXAYd4V=5tGIoOKGm3RQx`1lCfY7&jUn`e(s5EyqIN!MnsV z>nVh5$=Fj=S#wzM`;N}LOma?#9hpnE;;pYsWD_dG%T)>wIJ}80Aeps}N%x3Q zvRIvv5iL)coHyb*K9Obb_L$4SjmJ3)BK7ZYqqzfJ((09J!u3ZO^Iy}>sGQ7IEmw^% z$lV*d%UP%&4bP41&zw!1z}k5yVaLxGJh3Tg`5|&_e9zGWaTf6@7kByF17!`EQ>Q)K zALY9S;chnCzFo59X%7ClIi*cu<1W1d>AmWhG)zYGRSNf`yiObLew!J-QB~fHp6pwJ zoagv2g}J*?$-dN`l<|AxB1ly_H&g ze()D?{~-GhP(P5UlxSTP^rQSc#24_*T7eaX3u)`m!u~eS{ zZ~K2)-Ub^ib~`TqJbh$6_}}cwBm%dPsHIib^c5+$OISHVj(XAtaZo*y#vOJpzr9e! zHIL5f9RB;LgjCg^4ex68%dd@AJMgDx{hHDf+aZ%~=;nZ4d-aU*I9F(Ax-@gth&i>j zK+dt#E__{XMDFVf84rHUq&zGds_^|Q6BK)9`^#;IX7(O5!&|+4yYfp=rDb4bt?C|f zf$nT8z2?M1{Z+J1Fcmq5396sF9$kD>ql8<7FU&&Ra`Bid=6Czfj$=^Q<1^le4u5f+ zgIkMCn31F+W&sCWUi;b7bnjG9BlE=v-$!~fWaz)g z>35?^Wa33xFvaNS8x$5RPW8#R%24em5ewq%?Owj&fE^4bfyemFLdpg~XIH2$k(q1soXW$&e_5yyO;LpLz=Z+P<^{)&)Q3>A5X@~>wvTe&N7U$wZY zPTa?o#$0D5OMA&=zwWHBlnb)V`u>Dav#rtuCpp&HbnVf$;d2?raA_Jt$I#w(Rbqbk zn=JXGcdqF7i$tr~=58O)Xk8B%=?qX_QGy-8Ih)LsP&__a^blp1rB|+%sbYgzhXPKS z+-)%$(md15sLBh9ii7!j@W?QPy@JEd?M6M~FA)BFww`#h_NOOJO;nvY?Xj9RY_+Ht z&nCL=-6fau_HoAJ#Wuh9@J3iK=UY4+BtT$mFuFgvD4Ekh_t{bH=V;u-(*&|iC2 z{$B-d@(w`?MxY0ifvz1et+X^`S&I&xCh<+(4f(D})z8{MYKGflL>~LQjF4i|oDbbh zi=wy%c!R#XWTfcAN1BPy*;s3e6`nuY^E@|E$6u>?mYzuEP^nfz$>Hp3+|_m zqP@myGk`B(^yUC*U#1up$Bg=eOMW+{ZkDHTGm$9BVgv3ku;!F;M*exq7|Y@wd+b z6%r8Z?rXu0+4GN{Vx{cVYdFpGkpzpKH!rG7V=}2qqC?1dF+U=GJ^mmVr0nM@f(TGQXrBY1|3hh<(chGM$(yQLd)(=-R zS4a|suH$RoAU4wWuqcSlbrsIXr5KQ}5@b-QOxNV4)fJ=hR~CD`Z(5m<5+KXR0T!VY zc%D6Sij2bso5<{FSG6#ks(FPa*1{_(dW_;aPOtx|!zRX$fj;Kv66Mbaq3b@z%xb&E zb*LV0N1K=oK_DuQ-xXPEP!#sm^gRM=2NukAxEJSg+BE&9j z#~|y720%vRxLEnResvZmFgHvL_z%F~yOhH~fy$0&;QYP{7?EEQuRYlQJLD#^dUf11m8Hq_dJOf|pm=c`5fQ|S8x=anyMarmZ9rbL5UqUE!2tbTqLlo+GKd!b^ zA<@|JK-0rhqdHax#c-`OH(B({7szEwWdfw6?U*6#;({V0&=ybCB4~#*FUR;D_iS}D zH=P;uBTI@(k}Ioar$a*9L?)LD!xkC|sa`LUP@eKoBIsQYSzxl$CA;3wli9V;^(mFA zl+Lf0+nl3zVkXmRSJMucBVfT2s=B|cXDV@y%cb4;UlTVTm$-g82L{yaSs9xurf~>V zk)gEbV5mKFWPSudSy&*ee%I$WJ4Z}Gg&RWzw}E1fpKTk<94<>~xq2Dh1d!3n=>axy z2YLluMa<21v;H1 zxVq4#^zbIg1)c%JILiEP-J_P^qE88O<-J7-XRl>a&q86Qm< zSPV{X?h&;t+mUp!4gud#d^v5J{y2UfaCO3>l-g$7IVwU$q(_gv>V6v=bdh%!YnDYu zX1a|>K~**IcUvdlqeaXeTn}%)B~SJ(++tuS`s#=hf=eRebOrfUm$s4KQXBpOzX2BY zc%+Ac%oU}}obw5e9ke*yx+ec=i{Y{ygi3)*xG9C~84dqLe@yB&3i?%FpT^R+rm&(MV)ZF61%cSrXur4sRm9;Gysl~yQY zH`reWKHkaZQ10Iwm$muX-2AI;9M?K?eE$xftX|&ZEU4a>Gj>K|6?c)F_+d_Igf!9L zdSblelqD!Dbnvw8b$Lu9xI=Ma{WHGLf^%yYIp@-GI+2^1%>8@?-U7j-CUMXlZ~Ae( z_^*ldtAWGnUxNC4>2t^OKQpI_b1YjqGw^1aqfK%!_|_#pA%|^!GHZfH9e{X}ddd!L zAe9v5eM&c!CVuMr^!Q{apUGWA7QdaoD+CsvaNi?LGhD(W-6H4H8jXo*roe7Gk|6gh zxjyiH)uz=ES9{C9iF<)Ow?^-@Y3V3Ro9p{0EV4#PxHN6AIXs!%SpQF!g7}evE4W&N zV926&X~X{!Z84!}Tv%8VL-B_%mkU&a!QS&_V_^5;`r;6&&!wO$dNph1{vvhne*llX z;1ygFF-wk0flDeU89#S+Ns@++;c8#fkHW-)!)xdA&e+ZW06T?QbL!$geX$g6j{{9j z@9Wz$7+?iGNjd8!yfl1?b8P60rC{&tdn0y=4I1P(|z!^V7~3Kzt!$Oab0TKTB23g_T}v;(@i#3t8kOqAIX=D3OHA*OO@;ZDEHCn zF5LZD|LCeG^{PF zMN1AEzs${ju0-0NJ=6YjLE2pWsQaHr5W^l%Z4++0whhc@EVP~Rmxq69NOeFc`4wo{ z892sb&9&|m1bwT-D4Wc#AINvi!&X^2Q=BnwJG!1YNB#^=%Uh!o8XTp?IN0Ynm3eM6 zfnAw>{5|WuLBmKfW1;!sX6p~Sb{4|)=fHZqloB#h&TkebG5E2>@w(=>G0vg7-Al#v z6UcEt{>VxIDz(NKq1*kydi%#y*u)|%RehYf+m2Q|1ykDT4!L28`Z-_+Qv&G{RN1_H zt}&;C=O`yd6+)fwJGT_Z+x;6lm5f1-Z;rEjc8_<&BfPe^`Z-717DQJ5aR(e*R1rHt)B=II>u+K!Dt!Roc0RzjEAeB?*b=5Z~FzeVkYfkpTTUj5xZ&g5aY))8aP@)V=Q zQz8(Uemh%tE&b5JF5}i3s)#A2{!Hb^J1M6oiQ%_jC!ew9B4|9wvsm5>^@XRF%WLb+I8^VDT(y} zWHh?G{<2l|h=U$4#<%c|sd-7(LDKKBq8JRCJ^>T4%VniX6o<%LlsD@`Nv04?lE9P{ zPYW4g+(WtN<+t*}77n!JT|$l)6fJ_%+uWixb?;*p39#x*GwDlgcWZ1^*kgn12~&NU zqc$Na_}zrj!>`Ln9cfo<{$;~(*=I|ZkpP`+skGLruu z!!KKFwnVZnSFTEBe~}q_X{tMSPlS(AUQqHE-ui zecZ6l7;|(?xPsZ8=GwZaH+st*&M1T3nTHO!#tl_%o z=O>yfY*Ie$^apZb(PTl%RDR6c01!_QcV?j-rDR$JAQ*UU7#a@27)nzbZe!N(gpyYGstLFaB!_iZTDHwl8iky8nu^3W!o;>vxtqkyNPp^P-Xw-XtEe-RZmZ@ z`d9hS{j*JYGk%NI&P-86wB!8e6X*8jkn{k-{<|?J=>y8g+ItLT+}0c)F=e8mqBlj( zVd;|zangEef(1(2NHh$1?I+QD=Y^5-S+{*hV7?Z_Y=9MTF)&VVx=n`{!k#H+mQ$qi zx#91AIp0jObSW|%D0;c*7_@VFfRdy)d-ZpXMdhCkLz`;ndwi<6aP4}cygRAW(&&*^ z6xq+Pnr2#g6bT{1D&?Gj#B)(iy$BY^eA!RbU4GYG`*d))FdQ8FW=B>E?a|hjqz$Z_ zkd#au(Fg(EvH^VUOguqDsjWL@b$u#U;zVxbD3~K7;W&Q%N&SK^uQXz@K%C2Plbc!> zBr%q|mPr~#r6g8%`+=Rev@=YJozO&{5i7aWeoxGvk3FIUQK&VjN!JZlSIC%`VFy1lIh1EHnq6v-#<+2{#WFNi znr3=lSJ)!Wh2zS`Ug)-pV0Cyc!(al@pnuiai&Ie}tv~@zK20(FH0m`OO&!-}py~Bh zVI(VB&E4Pvsp8`9DVZW&J+T=aZO}YU)#bS;3K?W$MG&y9#D^3v&6jk>$4j`EQ)oq7 z$H$Rxwe#v8AbR-Qb8%6d@d?u!7^XJ6!_(!e=Z7J>##9*-ry!WWZ_3E4Uf}{S0V?kS z*U~!w6Tk_e*Z+W^OHnc1hQ30sR~P>OAsk5mz#5^c`a3QinG`%Wa2&=03lqlZWx}pP z8OCU%5}kbb=|jD~1&+&4DxB_*IAXyWXQfY+!7LM^0Gx&wR%+Llf(!@KQk$IXlgtI!iwC-rpNb+(g| z`zNw5o4z^p7W~30Lk@|D$y%~Uu$Wm7gJE<-nJb;gu&M5gs-Bkew4gCYrfKhZ7<$SO)?}=!R^Z@Vh~w~;_OoY3Zq;fFdgKyXFxk4-rne)t zR|~ScIvj+QP*V-PBHRFIa@co#UB5WL|B5rh*>{&@%rRI2|iyHWAee>tfxIfJjt`XE)cF4gY;JM(Ab#~|A z0AHgQyOtV}1CDHQtgdARJN$5Yn#oTKWRO^dI;yk3UhR!W@)L8#t`Vu3Wp?J4u}=sl zj-$SegOEYxI!qsPlzFq^X-_!+-aQ3>LBK(yO993VdRiknZEz~lXJbE z1G$kxC<;_L0f0`WwkjK(V1)iuv9h%HEhygkJa{yy`F`!r>tVVjv6YP;hYGbgPW9lo z=N=0iQ!(4l`1|`)?On7`~Yq4 zM-r?1lj|FlENf)DI;+C(hE@t8h@@s8&wt3pkY5beXtvwEt)Mv(ye?>~{BPAX$_vDZ z@fZ9O=~X#{FCt9^D+LmbrEjKM8p*79XJ+p)m*6*Cs{`YMPVDAf?r+mAz&& zKqY_2^)0dI(6P6RSNkc;*|DNr-cg^wy=RCjP+RT;4oxe3B_U)4H=r3NqiJF|5W-4<8D8~9qzEMwL;b)iL`bTc@e^X;B*-kBp{O?Oz|p6odB-L`K428IfpI-u%d!eQ(eU_ z8S2@YWP$|iY`S8G;o{g?zE?z_ph*=#XOh?uGv|ilqdWZm09#|O8z-1=THT@a1g&k! zjtgh(=YOvS_Vrcy{5-~570c`3(7yy*4OvN$x37D<^e6=x#t4KSKNWnV<_D+Rary^a zy`udGF!Er(A1M2~H(<@4)NZzWs$3mOUUDf3L zdXAtNk_yjF6M;j~R>7DwEbgTz=9FoYy_fH$x3Oo*G8)1GxMpJ5-L0r&@w($g5W^zC zVi=JDs`~xZE`zQT^2BNEJ>@nb`)7b{!#9N{`^bA$osaj}t0A<|I?c`@PJp~#%52Z= zE!J3W2Nb~``^GXlfil;L)^l8Jmqc=v(6o-*qE9h1wOVyDHbPf|iZ2ac3{?!FOJ+?C z(E#p8UGo!I4fy5ApFzrJ6SS>`t6p6;pA~KgDE@-(Rfg}Y%9g)B#sOl3u`xM-?We$XjDqKe+2)14`Y|F>T_e1OAFqU?pvht2!f z>h3DAu*D0ZBHb?$VVX44lL59_{t%?drp-JtBsPv~E*7Uxjc$nedFh|~E-S(L)uXOc zLxVMOz7mhZ6;@s9s3TgtT{)u~9ix8MY0QtB6(T{uuAVpNl{ceW8?BmMPYF)USPC&2 zG^a1Pt{6~<@;K&7NEwG`hiBv4d$qed{{bxCG%ybfcN`_;g~y(PeLJ)EEDi-Ju=D-{ z+_z?hKX}vZa+rnj>QPZ?j^f#6SAp9&I1|C6(X37o;4*7yF#V@iXG3e=lc?`}50C9P-{z?6xjV5pG=>n+RRX$#?=A~XnFeBbSEcZBSQb=YSq^$huP zv4*pC004lrqrVSg990-zSxjl00w{)}IR18t3zRyBv$2jwrI4>03yx zmAFDtqO0(NvG4_!H^*~KP2u;oZ#1BlN?4}$6(m+dJ6Pz(beI(k1O@GIoMRaCb5TA+ zdrtb#Jv#;HegL(Sta|yqDhx(|68*}tBy&zUuC4|R)rkR&eH-E?2tmCC3mbSP&BjGd zSKeWY+HyD2O&S;F24s~M1Q##WR+rl&V`vejJW$(ew-p0?lF`e}$Y!;Yj+K~7KuajL zuxv)usss!x(0*s28@_hFYT-8hv+_m>M2Z4?x9P^BaX34@cu#8eGLCLc$REgilcpZu zdevaj9UeuWn)u`C^Di558zH z95kpheS2)LhwLlBnGPzbV~9=J+T@v;S^YAeXUgG+Pv#MY$hIWHe4wEH*1A|~3wSnx z^Adalt6Ty*!=L{F65AQ66k~=Qc9xTCqQ&AHR40miKyJ{;lt8L>qy{~!Q#FQua3apn zZ7+_AV1_a|8EW?{c=9N-Nr1-qIH@_PqV%avUZ~I0IlMTa1#otWpu_ zcCoKQaBK?rD&5>ER4js`bM>z4H*X5>Xk5O42&)BFVlbpkHK7spG_Gaf4I%Z!Y2EP| zrVF&)^5hZ!qX?}VGw&2)DX`996VtH5^oD!*1d+Vi_1v^xcy)AAZ~*KM6{}QZjzDHa zwBiU$Jr3Fxw(O|pt9*4E#;MS4SNdT0gTZR!E&C*D8Ffvq3@*!7z|clsnq2`rW$(M; zs?}DH!$|1m6SH^sO&)%{RFdZ_Xk0z54hBn19VetPD*SRpD9bT_vvlT*@+i~}AGpys zRo+DROiWr+bI}&>N2II?7CfA_Z#vnJDHQ)^q0Cq_j?66nUU4}lGx@M{Z4^S)33>jk z+fhm6qyhm?)o*#Oo;W`@Hzm^nu~eBGGPoVJ>S8L>vG?r&00FYqg88PHTwHDB-)8S!FRzPa1Jt+PzfviF*{-JV75l4pG&s3LE2rseU^ z4dj{9O{-hz4YK&!coHbfvC^pPDZt1}0f$@j>U?{0)?pY~Y(p1LL^T8BI_f!`_NFw| zq3cAw@z?B#FtC-Khu7IQeeQ$A z^c*|?;cm;iXX!caXY5{9idz@_nW0c`8KUT+_vLB`53N`_|31%Ek&{HpYRm=ewPLYf zb1yn2nl4HZMjgOPxxR|q^784)+JLG$CvuU{2w2sQV|A?-oB)_2&=m>Da(GqhPOs)Pl z^Wt|(a7C!C>4$!Qc@X{Zd>AO3c@q8RQ147qxB|ns-OM**1*BxmJ;75P&b&?q5~6Gb zc|s@%{%Wl*g^GmV-ztYEI{7F&yE?i$d*Y_{gY{gTzeN@!J6U@uJZ=|dnn(io11;Kj z);B_yf7;G-E6`zqJMMI!h{b+c4b*rU zzmuM#_KuPzL{{Wj5{t-?HPoV-I6bX&UkZswpiiv z)03RE6Ov)Pvso4CSg_{;XU+=28fwC9DPo9l9YN_^JI*!`hljwoi1RlAXW(z(+s4j$ z{zz&Cgx5S!&sx{2v&bFK=uO`p_+?XNqMAYHrQunMH^?$DGpd9(a3WGf1BgKPhhp}um2F-w26$vj3dbJF=+Qt*K&CLr}c08F3UH1rHYwOZ;v)2x7 zg-R3%SG7yf11H3XN+-9UJDstfW)52WHa7;VWZQj&JVlY(zx)U&^W5mzRcpH<^g3?7 zTJyfC?rQ^g`oI-j&W-zN{@m=LE@8wzN6*=ko3E6CM|mvVh!-~L!$s!{@o_cL`UJe^ zSH8PnI3m<`Dp7HRZLt!k-N^99T&HeQvCQG&YB*(b3%uTbToQTRnSr}apm!;c38t$WNbzWL!+_o;JoirFCX86<}ah>Hy|t}(GDUO zezR4oZ=KoN>-mW*@P(-2ciJXN55<-zDFkOXs`NCSv<4i!k#LcuaPBoD%PlKt?wV{IWjkjn4f75%XH{py&&K_r%H5Zph6ZZQ>{~)04Xa{hn#R%q;%lXMxap?#bV( zS?yUu-a|%_`{QO&!dxN;@^*_3;oe&xzm;=}Anc7-=m?K35?Js=XGkFzo1f!VYhp14 z6*qIjl&2eleX}uI{WaQ+06Gjiwkbo;FQJ3@{q zH8CX{f(bXP3uR&ztoRZAs(v7VCV?1U7UvI@%(fR<=C18V7G7heV3xyfCmJX+S*%@Sf|%mA zt;-=eM=U#!m=$J$?#jxssBNJ$Ys|(k)n^+&7xwyH&r}rbST3HFjH+&j5s$HG$U?|5 zGmbcz%4`{kchqPl(SA+w-`rC)$6q*4cmEY{y$z zbzW(us>{kOHNRp`Vp%wsEQGpIKrEd?@Iu5v9{=;qHWB<&`}HwveauWVjF+_xrZVio z`>v}++rt~H>0F9fJFB`NWac6VCbYF;0=Iv=HU&V`|6~Hz9+IAVoCq0sPGdee} z_{QvL0T1YSe4L6UV|8|0N4L;IAu^qWrnQlKv4admz7QwuBO2iQ1nOkYOda)2idSMc zOo5eieuXWD)M$N5TS%0GY~}q<+^6wcsC+#~S8wqHXfZ0hcrL{x&b=}d#618=Y>MSr zJ;^nc#~Ld>2kDp&QeS{t>2I>ZlL~+9No0-atN^6BnKIcRW@8Xc3OB&+I1WI8#|RkY z$kEl!8M>B zLW+}m0*%}8(*mjE1)o(l$d|D|Gy&A#zF!W2u`BI`&`l$Wu{|JEjU?u@S-!_&vWW=B8KP0F$l^2%{Qm9b@f0a^yDb%p@Met)Me3o4k|sh(LqL~ZFNWYDhU+aF>v*p-I{Ml1lag6@QtSSNE-%%Ie(yr&XBojs>ovSUBlGfAch z_h=_&jwoCf%P|bSD)G1lKQO`X?A+t3T1+lgU%+0?Fa(IUR@T61$zy->La#KbmgtYu zz5Tohtw7DKQ_RJzpt@jRysBIv?Ft-H+q>1naZdR{@-x(-0Gwcd^{FRP*`Oazno=SG zup&#Q*dxX3s(aHp(!18*^Ejx8h!D?b){eVWQFVp|!B^*KtYlmRs&vt|h^hAt$($8Hq>C_fZ7Z$$!LK^9l(jMbI zW}?1+r9(d(QwYb8l4eNON@eKI(x~f!_kvbZER@MrwZTk?lw)e-wML9#KBIA2|lxHzUmJFPIX(B$h02(LC>9>#!B9v8W)Sq<8?XnFWy7QKk4ya3FNXgw; zDd{*iuy7F>#M?0vm2nJh(A9|ZSLirS*)A)Nw+VI1dOaNL0qI*;oKvL^#^Ozm{v+y$ z!^D#;mn{A&6f1=N-SN|#@}8UL+26 zed%XNi}@~(!MOvNyDU~=Dt`=1?(1g<*Ga%6n_ZjU-|LH8edEG*LR2vpIa12Ls#PZB zUh*}dEb_4G8OCsIby`&QODwaT6tfRn1yx~_gL(|E{sXj&{B=Fe@CRRF2eiQHB)HcX zPVF98%5Clt2+kJnl6>@crF6@t3G3I^AzNViJ9bOg8wwYQYMu8Yoa`)HK=0K)#v5eC z{0DfVphS}X5tZ3QB}NVAGATr9jzUV2)E5!p;8%* zqAm?{%nZq;G*M|OTbc{{A^qCtj51_koDXkk^m>mhd3ekk?GIluS?_faG0-tCwPsr8 zk70r74U-H*Y53tE{&%lWWJL*l`h(G}y{XGQ%{ z1WmU@S~k$iinQBV!n9jNl1}lc8}8K^HND}oQn@m!IPo}vs9QDllr%w#rk1$ymt6s5 zovShNM8&!;2TDS6F!~Q1irZVR=q^ib7DTnB+*EY{z$b{WycE_ys8*$6M@lAOm?3($ zE3$y-HB-*sH^t$T#HaiG{v5D{fOq+RttAwd%(-rN%(is9aRYdi0Hew^61P?yf`A?9`Jq9eKzNOfKS1`6U-s00fWrNb3!XRj z{I5{%%(4+vhj)KXO%hEIsb?>f7NNn46XGu*3a3GtgAzdU1ag5 ztjItY2v6S~8dWTxIh|A3Q2L~1G06+Tlk8H|uXKr*Ixe|61Hq> z%4(A!ebW)c>aoh$c9GnQAZ~#kiSDuqY5ol+?IrmS;FjN?zIjF7ce}Inc{JH`+gq!+ zw#k#-t?S?E%{l-5TnZx_b?FZx1p#KMDm&()@tR?qlgclWf-fR>vo8Mu(t|IB6D`S| zmj;anY%y5yj@!*f#HWdV(!_^Z5?P^A1E4?RUOis%e~V1->bW&Idlg>zH#@tNrMqP9 zIQcwbZvzw5KBJu|{1t0^4OTK3Ff5W3GWEmQyOtd8?hduV*_o*9NSQ_WrBkHG*tQKr8mF6H`Y&!sLf{hCnOoj1Khs*2|2&a;cf=w?8ct zYHFwy3Nv9D@=gK(_|x8GQ@`SKBb)})=`A)Yys~7wh@#1@yB!r!0Ifo1ilnN57$ucV zKh*<#!;C16NC0eLo2o9=7N%2WmH;m@ z-C>IJ7R%qVa7rcE0D;5z8fXJf@*bfCYy{_2AcagjL|S2{3;g*d4*mnPN5yti{FAzj zLuarU{hzeT`icdluhinH1Tog?*qNw-#@OX+HCEEVNeoE>EoHCzwot4u%HJhf70&GA zn04*a%IXmmR1@?(nrWM*>GSwC9GE-R)FoAuF;FbI?r9q|>xF6!jcmJ8;WKn^e?*Zh zf9KiHuB=lQTZQ4)Wos~RE14^P@f=Smmtdi5x+qiizj|Fg}|Wj_8>qZ4+#_K);lEbCE6f#Zaz}LCFq{ zD@-8s8m9Qc=G0J)zwU^R{@v~FEs6nyDU3Bz)C$nJp`r?E)a z`&vF-x){Z8NmE?y6wYd}scB)2X$!>^5zm?$m!l~qzbcejNT|iV(c(nqEdfHI=s}j@ z#^r3x*(Rjjd}dnI-2oDzdpAv5_oEsYC2(R7nnxw}P!m3oRu(UTfuYq=PEFifnTt3F zag>|wJ`6j|Z=K<&4L+RG&>+)F!qk*q|J38)Tx#pU`SFC>Bbrt|Htd{0yS}EZaWjq+ zfNyQkGZb1Haur~*FmzxTT8o)e3#El!^QxjMWAgJYKwGz;JZ?Qd8C%D9fC=veb6f(K zO3PfgDOtnvQsdE#7gK0uq07=L=l+q7<#?0^F5KW$4-q>_J`WUCU7^4!FveIkDJj7o z?EyX1td6ft>V#rqa^u!!yckQj1JV{&P~@~<69bxw{T(aLL(i-uF=U&n>a0#NeGpdo z>OXoP1;3-guB94hxU8#_SaJ`I9;iq(gdn8HXf=p1yj*Xs*LMWXI9^7V`9x4t?Gw77 zgkOUM&~lKHS;Fp+8E~|VNwC7gYtlnU1eL~a-;9;O?PxM8vHOgJnvn67H8N zWF+2Ct5szpQ55IWM8 z-Vz`b=_mqH1(cG2(iBh>qzKZhH{Y2vGiPSLd*}X>Hwnq}kiFl%_F8-WilQ?6Gdv@? zwJ;kQ8S*7@&GikZz|!|waO#AgLtAfS4vcPUyc;mL+X+k&ti&3tOn@~|9{|?D@swp! zfXo?Cb&B8MF0r8=crU9207(6f{hH*{+MY?}M`Es6anyb@aG&~KPXC#XHD8h8M()Uw ze$Y5Q6z;0#{+xk#R3fr%UVqcHQpw6$8_Q>QPQyu7rug>E`po0lBG_fk=F`&d`{}Fi zT#M!N3yC82+mUm>^#m$8N6_&JkFxZJmlZ zp%{9|HfWufUm&d_nW}vJk;E+Ws~VFJVNIEwmAfbARvn{%?uX4*%|%j>cX%t9rGBt2 zRN8rh*bZ9qk|mH$IB}eiBbS_awKkgrZ3~~}6uj&3s3XO4@6-j)j(AfBicA3(wmTKi ze)oGZkw5TS&kE^1!KRkaEQr1mEylmelJ|TtwD!_&$^OfypcRg{U0+^>k?+=ff*Q7L z@js|Kdqks^_;*^EUIWjsO3#RTJK zuMMtfdnu1tDn;r-*K>V-#?iP8k*_dZfeyQplLZ@o-2{BW6H zpnD^^53o1tlp?$D!DQG;`{mWv-RVz{79WLv&21c+(tq&ElfZ@+yMMzqgBSJvGYfqN zKAMtMyL4}$=w^{DrzaCXc6LnX4v*iIb+b1tIa7F1fRgG4`%LZirAY}=WbIeg3i=Fw z&?{$Om-OQ>_`KqndzEFKd><#D>Ms$}0t=@Jjt%t%wJ#fZiTgNm|W-l)bvkd20e zA^qA5)Xxtbx7y~tOg?w1Q`vasN^c{0aq)VS zRO`uhZ_YFwzF!F89G)$&?e-a{yf?d@@a!m~fJe%QH@PAQAX^_ewlTjN&=&r9#|!7M zWGXTogy{VI2)yD%JpaR+DKKzy&{rVfW`Ube`h>1CQq#?CUPuwyln)a+~AHH&ZGP^*K{$8~8 zU9#FRHTMYI49L62XeV`aUILzw@W!P$;kaD51yumY^_D^N5j0owsX143t>&%hEWNl( zeVp8M$`YWzV`OewGzVmYvxv`KhqMP*#WZ2<8Hz|;}dz|m}gHqed zizkkA9jSv9%qxqJot8t5ndfpHRwmo}n8wqGW%m5sJ%tyNu_WvP=>xrI_+q3Cqle}s z+3Qf9)i*YWPuHx!gx{VmP#cQ+U}m`+{}!8OnX_#?rr)!l1SR$9)Bw{9h*V&4!d(tA zv$!~*DNI8J0Kl=}xW(xSBB;8-`U}Uu3?6&EU)*cZ#RL@1EV??X3W>%FvG`Z|AC2B3 zGRP}PGFFu<=1FisweeL@yHz4BomkX(7?PMqbpi7g=0fIdXQnz>!}q(=qpwxPZ>b87 zdRPot#x-q@)E zV&>JM@GA96!>GEPpO>Q*MY5QxkL{9_cr>Ms8_7p)<8ijgxdRF@+6Zc0Sy`AKN_oLH zv(WQ73{uW(!9#{qy=AP!Ra5qJst`h3JYcRwMSJSnZUFRa-x{Y5h^N3qJ|_sDW08J<%jOd!TVnlJ8`GzX#j;XhFs~ zUeuLsND$RJKr{?cA1(z5;NLm_!27)}+|9_vSvlLc3{TgHH^Dwk;$=_I=4ow(s9YH8 zuHj+SFGo&R_f+*jF5u$!_S?nM^4|lf6RIQ6_Ye=w$AZvg3XoIwq-AK-vpVGjn+ zkTTkQU&%{T39ui8XH1tSkc`vaSwU$x*G7ecAjhuWAxNd!swrbP=DMVB{Usw&xeE#J z0u*kmRAk8?I{{>}gtdOVz&*wo00_HQtd^~?No{n&T}si?j|iCn_!38v{`v_UTD8P&B++FS*&kMCOP{IF_WG55NlLPwRNZ7Zbbb)9L0o zJ)hI}xx~{2uEwj4L72dN`SzOAU`Iy~S4nvp3d-RI; zvckiK{m7a0`F>8YWletAiY-?u0jCz^O~?96gHYwf4Gal9c|R{1Ic(%A;}Z&{cxw=v zFDomY;IsBR0D9?bXue2kMV~Cr1k=S1dpivwn>=BW2~b;yxb*kg*j_C+Gi{Vn>Cen0 z^pm@ZzHDwtY7%leV(|yChy~F>eJ&KtR%x}b)qQWqg7mwFrNO%}vvfLGR2P3_T$1Zk$H~-2q zpvUQ+(f{ef)RN#rGyQb>QD@j#>cfNG*D^=i=QN{=Dc|Utu(cZ8e*ltKY)pF$)V`#rU)~R zZ|9y*eAuSnyq}O+`jxhzBhr#Na_iNrPdnHxhwHcObW+{Y$IJ5Vzd(2uwul-30CYMY zdg%7eDOv}1CrnzwSBgr5y+a+?OaZq~w>hkv(B=E*sc4DXzZHkkY@Hv8#6)vnkN?bs+2%aZyY zllOw>PVn2L`p}7uyFVGp^UgCan+bX~f$MeeeR^eWmh3d{-@NuPps$_%lUqo1B`{sJ zguh~LMV0F63tr@QZO|)kZLgxJ=_LSsf%watIiSLePiW#LaT2A=SK5cDKh+0SVG{HaX!UUgF1=`Y$axJ9+ka?kzA zW?oyB^P<@wFvD5j&%u)JtWicc!iy>?CuUX>2VZrZzFEOlHg2LwkA@i?toi`1yw+S%@@pjKUA zm;w~rjDxjMhKuZm9^}nizH|88 zl`326C}i`MyP#0DiC2ZoxVxup%Kg&4>#e3ZPP)uepq0n~-XJPvB9gT3@H02Jxt--q z{8-e~V9K&cb*Ph{)%c}w+!N%nd#j~El%2HeVx%^fwqRx}@;80>OpHs!A?YD<%|+e6 z$7)qE?Rv=Lqr34D?zRoJhIqXpdojH5hDYF;eQ@xYP zD9fM@6H0zk5XQcX%kz0#`>7jzD*0Px*!i1(SHgzJ`(^`8(nz}VN}hpb_Q15HKL9WN zy>0CBal}uXMRigfk7p6iWA<(t5n~(jxp&ijW&C`P7eAkU_&YQggZYD-UYRkxw%CxJ zS6A;simzl{AE%Anb#W(RSKzr0ITWYoy~pUr@p7|OX+BKgQuf@Iulonv5vsr7S6R?) z8^awpi(hK8#U0%DoG0#X3MaNZiQ*(G5^5kVEV@!i`-xk*X!>0n>7UB)>AS@hUulY3 z4=ldcc<&9+8Kh$jm^a7%IyTd9**Clt9Xq`CsLiwb;HHG7wv*x1m{Z&Kc}NUHP24YC z*LT@OJPboaMMP!H#|`33JzT#QKKMnLOL}w@xkkNSt_c2;JZm_{(8WPqn!Cyt!ho7U4La&^SZ8bS>TM zWWLO=0VZT3u)QIDAv|jA(bk>5i0#wH{;Z0-}cP?3y_ht7_ABUF6 zfxz0TyXkO8bN>SRirG2?8xpLhXuIB0630q^W}%s<|7p}M|9E*#Yt3MP40%~eH~_gE z`Z`BpJ{8o4^OQDbnpQ9<3sW~Rhn@8#40^@~q{Do4ps(4l)eI zpA{9X%QN`)LKvFG)Swc?#q9u9TPP?~zwSu|){NfwS^IIJTCE57K~QmuU{&Q^b>vXUvewf531MU1TAG0N z$0WpMRoUo+GgWX2i*dKOi(3a{xsm3bHg6pv4uX+ir9%mCM}$6LLU<^`nUgHkag;B( zIjW{HEpG!>fx%c5WJ%Ag`uGQ7w%w;?55w(~UZZvK{$`v+y4 zHSUR-f*8%J04Xjabwm0KAGRP&T(2hG4s7#E4y|K0hWVHePG-H{wT~y_`C1$=>IE^B zj&y+1zWEBKGh!Jheqsz39oVdjLJLkyj%51ok_)oE*A>pQ5ji$#K7fS{ClT{KU=}ui zyO|v8#sxw`CQ1cWYiB-UH3dIaFeQ+8E23CBeI)hCu3x*+LBmYCqwOZCzBK7Djt}d2 z!v^2&W4D6Od(dJ|?J_=#WO0ern{!DQprPx}Jbmx1t8s8)Vb#k?ZwRHJ!eo+1Nh-0e%dLJZtd{D{}#g z0D&GDFvZ#jKq45$i&u-Zehsd1U+_k}Rsxr9CO?_o-SaOSd#S=eGxojw#vY}r@`2AG zRv$tJjx#HFx4SkTr3XzX*eGEJ-x2qkbZU78bsz&Rp+*%s7TI94VYHO@M#@itavi?c zTCsMcvS3vV*Gaj-i|Dr#gP+>!2L{T)R4~xbX@JPQp~`H?A$V`YYWjNxlSXo~W5{D+ zy+zC4`J?39V#XW1{*@|+Qt~aE+_3^YlTZVH?8tx^5zM;7Gg|zlPVa@kT4$n0%}AXE zqbdf~5oaOm-=UQS;Jmb97k5+%K@ZM-pkra{|1pcEiT}FZmVjhp z;xjbkQwUs*VHq*Cc$dn+0iA2YX#7OUXr~pe*?dfuf5gMB8GL+SafG+aw5`_v_7`?ZPKI!hexrzIRP)xXx6pDj3M|IKvn< zwPlbE5BHsTF{K>b1f@iq*+*^NmG)yZH(!b2VSfNGIicA}ixENW_U*QQ?MrVKXMjFS z&(pSjTcT*#7RTBQb_&YnGc@e0DpK>hWVVwXwk-;6(T_#+EJ89V#F;O}j)XbZI`+e6 zob>mf@3S9r8js#JQ1yYlo4bW}h-T)tn$u}`8y~rmQ%cf zFUt$Xnf6WXj^MACPFFwfX$i$$tPj3lOh0}>gjqKu>?J^(G1?QnbrRL@qoVrO7fqke z6%&nVXOmZrnBi6}GvERhDi-+{7}Xp^*)V+%L&UhwFCk^8W^GdOsZ2`BAeLfly#Ou2 zN<>yE2!Ed(?>8EMLc}9Bdh_Uq-`EXNqAFzs*UP#1mo~)X@C_IGZ2a|gNEy4nP`>tN zJ^|t`BCeyxTY>-WTs0Vx$o(~ED0sfAHG+cKI&uCXzCPt|(q)db2q zCrNDgJ5%`_-1vm29b!VW>c<>K^0jzbn0Sn=l?nj8DVpUC;~{H$rZL_|mZHqLkOwYJ znFu}IzC_gqaZ{``yIu*SlKzTrkS)NiLc;i*CN2tt6xBIsGSvrsGlLO-7n3Rw)e@h5 z#z^)RHGHGv(3#NYa)rQ1OSzs^U(TNyRE}}sOF04J&@}&*4>eBh9z$x87%m~UUJ1Zl zqemZ5d-o(@@U0%DQRWBugy-BR*!sH|x3cM$dW1dmi{HDP935@y;z;K~y}Gu>x;ip# zn#njkBv}FnBcm%+;$6LO7f&i6%38E`r+GoEda{KjLoYuOV@IQdS%>I{8t~@s{W=x4 z0UEluACyf3&mK;f9PDDwl~=T1AYO`EVZg2F>~NQlca$4pxNCB^@EQdY9~S1*$;}Tc zB{pobt8Bo70@!h+n~;x+Ag;f6Hn!-ERDXf|yMBti-xm~m7`!Q|5Fd3!t7M-=L%FI! zemG~iwY(i_1DRj^Y9(4Ui2HkOVW={jDbXweZS^1gh&%s7Q}sXo^v~l4Q8J>9jEP@_ z)QH}D`m=36sTCy!p;Pve6ke!I_gM@I&FmS<8Z@$eZ7rYrMyg>)x({65x2t4MpbBxu z)1uyQ_hIEv;6ZQ(K^&PkL6OOs(hgn_kAxASoqu!3{$)Of2#D#LpK47{rmZyY7eQc| zGX);%hKATRBuAE|+IUJ)zz)7s!bK0cK2EF6W^>5dm!VdCwCZKz9%My`zEmfMs(^9o zFoXIxNH&|4)1PMl?2 zM_g0T>RJMX8E3J(8ztHkg$OmL&lo+~xkvAUOnI@v+EUi+7?49(tvxNE^`!`Y*C~xp z;8ouS4g-B8J0iT(=qk+SSn1yh1CLOGHgMA=Cd=ZEz0@pD7F{}n&__Wp)92Gg%+{w{ zF^*C!BFH*l68dA|48KCS?lD0HHIRy2SkvAOpHl_NqW8}WW;s1)#;_1vL%vBl@$qE-QsSGtt6}Xw1 zvvkJ#d*w`E=?k4(4&zX1lCdriEHk9V#<_Yl@+;e5D#-W`z;Qp~@jK{_Y#fA|9}+q5 zYY>A*uLIJkjd-cx)L&(Nh65>P z8^8(Ph6;4ZG4P&-K5K5F7tC$3=&{&D% za_rVn?Z#QQ!bE28g7V?l7O?c(8R=YP_{KmOmP=a1cwF@X-YMCLM3_;dA<|yQ0f#Yr zH#k$6cguw50tL3$s^xPq%zskQ4ET7<_Li+^Xf|{@e9p*18JwZ0Mm`>`TiaMwcc#W^ zgp|Wz{RXM2eT=Do6D5#a%V*zSMOQ)Zd%~U3$?P7bXc94C7eb&~cv#&eyRM#T+&cmO z2e9p1#j}u5$P0XRPZr-wU6^?<1^rB2cQs!l56t#!RL(cGXn@Vm75Ly#v`d;Q+Rfb8 z^`Jib3Vgd;?03X`$z1^jMMczWtAHG7BNll-;fmHLS;GEkP_Ws3Jvf~D5CGq3aUm{u@IvRv&4x)G!A=uNIH9hgq}r1wCSM;U9H z1PyhOvE+Q_k#ekOAq?cg61*C|rY^Zp56opd)=ae%YHCnSX73u-@C=|=M(-x%{dZX% z?F_&$UHeFs@Ju@g3{L7i&YC?b?PgOy0B_`CXf5TWzRv{khAduWMSo0%0l2YjFftKq z0Pze`sVw9a2X=CK&OwBa{*p$u!bF^|>A=k;YG#5K_0Ejp?3jUAK1%`Z|h!ye|kAf@wFR z`?5aWl@@OP6zRm?2z4bdpi#k~0U$JS;X{HQmA|*VeQ8#b9K_V+WsPfvAS@*BsH_`|a#xr(O z_qeU0YV2M%S{_KPlL;BJo`!Wmgp+;f?kxQYjwGSL2u3cBFehYi`T=rBJRF@ zL-O@P3_<4by~R`x9U|0t@L~>AWQQu`A6Tt9jPIPsw`spEh!l@2y`7EmF@Y(F!$wP* z>%c?!az(O4Z#-Q1zGzuVH08)CwXs$9UN!_t8&<*Kiy*LRODIfW>?-l3c;aj0K_=j+ zvW|BTL}fzaYYt~%eb=yL$p<+-ZXXDw zf~81Ty8j+r+p8B8=%DG-xmn?3G*%=GC|6%s${D#ar80wX%XY}I&%f-5HwrJ5f6{Qb z5v!O)V!8iG2g;u#4>z&YQ z9sSU=N+&Sg+))w*UGE;Nc4CA||Q$s4iHCG8d{z z`esnBqU2$n{`*9T?6+WUb(0k>V^=M?5F4?Hvi&Yw^U6TH zWZf*q4M5EVo4r0;6P-PTKY%(k|56(5OwV+@m4Gk~(MtS7IVJfF)N_8sP0JQNm8Q@Gy~d zx<*;Xi^YZOt3Pm6{P%2JD-2fDrKxdn@SScLWLMtpYfMiLH@<13_#z^Eicu*>k{wy$ z#)S`T@3x&*$kzYf&5$R^)S$>X~@)YqqgW$1a1sKI@ z&QeWE>Bj}m_R_|cfN>yXCV^k<;fgAX^{Huo00!DNa>~j&9VtgHuA64g-Quvj3$7Oy z53Gs*R`430igV@^jkKsL^-VKz$~FEAtF#LsB}3_m!izpS!vR?%{veboa2Ji)<`zh=o04m|m2A}y`2_Zfu#v^fCd=fP)lbuO!!H_< z*%_!WD;W*N7P#FBI#eb2z=vqkRH=jeb*l2yoe45%ASSPYAnr#e{m|Qm_9i#8gnC2! za(bFBUyDI?a`HJ@f8=f#QKDNSBK``jbYQP$a=$718C!e#QUa?eC3oO4Vf%{AtjL{8X;NQT zv{a3fs^YN9q55>WKH%wdcf2-)P7ig_%C9Ij?&#yuArzZGd)pIjTyU*gRdqE0Mw<-? zJ88|z$X7t#_RNyje5U&yaJvOvZx{3fHJk#P%BJLdQ1vMnPpUEA>m?AMdvt3 zv&ST=OLxbP?WtcbgP~J4RNy;|LM0Eu=&E#yM{5+gnhMMwyN|yr?TW3?0JV?VTnBmw zrTRR2Ygk(fuAVOdrHdQ~uI;_1c&z?du)5W}2aJPmpCxh;vB;3TrbzK()ND zK{|g)`DwQBvVWg%a;xgDW|AI;*O$T1#7Ot9ZM<+Xt=sr78zGTL!|@#pElh|Sh88Ir z9ylsQN3a|lLVdOZlrPC<3|vUVscdH;t$IBYiQL?-StE9pBElTMQ5cOsi~eBg(F)WR zAdf|a9J13@Otv@3D)Z~pJ4^^nob!kZN4V_|hhraAx+1VEM|_3g8|j#5NFQ$MP4a=XT@7k zz&fD8mhB8TF|fQ-+gn#5)8#79No2@5JOM_IbWriLcl<7`)Zqv=?I&~VPNj~A-|p7R z&D8?~yS1-4*LF8{dlBGKsNsI~)Bbu0Y6Y1!rYvutP>Tjc5JD2c+q)r=G&mv^f~xw@ zs{9|pC+TnH4E{6A`9~b*SH4CIX|^JFHzrY-OZ>PUX0fiaiIycy18#!! z=kAuQHtYc@fYpY^+6vMUPt#Q7gMrdo!ywb>CgbgVyg-AoHixozy)8AU%nA|v+#0Go z`$n3xEt~?(W+E}H(`vd#P!W-*?L6`4y4vDAp^Tsc3r5*M#H!ydCxJZ<}_Z2<@P|!DLfibT2&O?s-&b$ZS%8iMTq@&Zx$Mr ztV$kJW#1LaAzMk=XIt1I#3FlkAWrNSa%0snfyyu!@Jag=$qsP%zG+B1ju>PVWt5C1}wuW{x#X zZo?>BvrIchwNj$Wtb@c<@cUgd-xr~d#6;@LC62Cw=`4jx()FNkHT=&x2!aVqgN?cl{135QP-&355^kdFa7mGKb8U;^xyahDC(pCtzkx zuaV9anVpXMSW<0!r~M?EGQh1TbrI-DBY{5`=!1e&0Hm-f?Ko0h#3 zHhQZH=OVea<6ur|dMgM~vEFdM_&FxJtiB1?VAy`lMvthJw@X?#4wWFlXJF;vaP3a} ze<`&7Z3+JQd#>WYrw#wIP6>-QDN%JLx0sNaDA1cgw1&4P2*M=8q_)6lcT|@s8Nti$ z2a3DQxaUXii9Nc5d2_{f;etSOEGrptI&VHn27ANxq?Op+Z5OHpjEvpAL(-OTcj5^k zRIFn&@+X0B{1mGU{0NeTyb_X=Ih&2CS7BRsH}>6_&ODw z?Et8?83$-@m3-%+cFP`-R@BvZQ+S$>75D3^a~?&{naJ}AT7;-_-N-C}!$>}^pnwS2 z`0{4)K>%-htF$8A6r&XU%*qP$JRf1=TH4_GUhtwKpdkTGYCntkpb1=&iDaQvk&5GF z>tcIaynwou4_T9`nS?pbMi%d$`-GHcgQvGqv_2>_8qJkFTq_<2j#m*nIhu!O1AY{% zXX4~Z){c@{8j<7 zaOh^<*xTZ7-cXZ&lhgTUa{M2c|0@OJzuw^g^6HIo*;D0(6+L<%0l{3`g?dU%HV^u; z%PuK}B6nMtK%G!|NI02hl|K#3Zdeqz;9i~jVPSe@V;d-dD)!)1UbxtUCB0_}Du8Rz zH5Ie9DuUCIaFgK%HNXA>1k7D5lw#rI@I@n}9y|Ze5OKxsJ2rmUHzR;~PJdN!in~Ja zgH1JFR(Pmh8GZcF6IJOu2>yV$-AHk&Rcv@-A7?ZIH~1_cJ8{ca_`;WEGTBHH5`l}8 zCqGYM$@ok4M*)5pY$R+-(k>!YL7nfeY6KHh*L&I99>Va{lS8vyUYuVZ<)W%*lueqi zT$S1-WOe3JlP@hG$#N33oS!?@?hLR19w@)|uTB+G9kk+mA9gc<#{clV3qS?{?e@+1 zL2BDk7uD59Rd1xLZN*VSI{gLp!h*K?5yybg*J{N?1VaN`j1^xtMSrh9%Ub%#izXGc z4y0=?N-xfD>^@0xg7gTXGv0Y00cM4&DEFMKCS2-vEl_tWKllRx5@L=Wx)$55pbQ8f zhui1X#KHR8{8^W7|xMAdYn3t=>MdOUfa%;QuBV_WZvfj(_`&f4nKmr#dmbb$PJY$HdOb zxv<^G#1I=AK29H6xK_!;&diFDAP5QS^-0e&LzQ{(RT_ca*K<%3CPI& z1bV%+c?p7J9DJUrkiw?r_vYj`a>&nmgrryKoB4=%O3clO#>+XAu`${igkh5{^$1q! z;-YIc&dA%{TRyBetaa~XIVr0BgrHWt%fU=cc*J;a|Ml8iw3T#D!m<`!F>&1Mk_ zCU5BeLHTHPKhK4GjzA6Y#4{96v{ER+zhY$-8_QUJORo!e#o`i$oFPMV0HUV5B?v*+ zh-Ai>vA-{bzIfqlZYuD{_s%4*{0Pq1r)#KG$VaQ3&oSb~y11?18#$DnbtEHU)tH9- z--AFfOkFjdo$|z_;fo$U;`)Wc@USu)LOvUs;9uzn?nBHNvC|ped6QSFI$uLd(y&4( zsliNQg_NAbTYI|`U^s%epIYS?=Aij5)@9@#=XTtl>v0A0yQ1X z;Uv3N5Q4eY8;Bdc{P>i&haR(YkPC#D#l^vhY zH9Sr0zv3r@Uk@dBsJ0sZ1n6TA+q(MlXi1MgjNUju{LAhjf=P68SNRnPVbv1+afk3y zoLw;Evda_%9l2vPT}V#ZNxH8bPuWREa^-TdONg$vt|3=n_6E(F#CjSDeX)Mxq&z^l z^hx-feZs#3e*b2L5JoHMf9=ox%|XR~A8X>B9E{D>yx7(I^$R$DX#kHWtY zSs5|0^DFlpM-)-Mft_;plj?HvoY*Cpj)%+IC#7Z(su$c}>x_he*3Y3Vpcp3AC;3V+ zZ0RS=1zj3}gC0*=pzP7(MOgPG!Nm(ZeN0PKhJ-IH34IgOsQ&sRCy4u8CG^b&L7VLW zcp7#}NTp2H&Ua}BnYaoSUWY1e(fa`@o^Bs6CmJqA-|6_fDDkg%%$>ing8BdW`G5P7 zTh(d5E?+l7_i-zRoOgOiZ3!!t@GFZbCM&e-mi1{sVk>s(7@8>Ofr zOCnq4N+U~%F@+e(zJG6ZzyJHb=bYz#&iOy*_dLII&U5w#_dWyg3q~eJ00aU65by!^ zMt~S#KR1tn09@b@2>wHd1VDg|Um{ZQ@L{AN5{Z(Kl|+eQB#=lctQ1C3UP(zwx z2`-2<02PFA2}1VT0C51|f`BhL&Hn=e<$~?w=HUgk+He30g>XT+xM5t}Jij`CT0s~> zY9ChU43S&QKpdSeQkx(HU_-h@oI($6u=9>uplR|p%7T2KKepA$U;%sYp3|Ag9csBp2>m= zC3xs@6Z7M;a4g&%@n+KY(n~;6%@Ctf^J^+l0D#|bYXJamUKqIwz8_);=aqzaU6Zyo zjcv&iOzBD<6p+l~H^@T1xX_hrYkN{zlH6qy?Vfa8IvJTljpc&yfjp+Bo(7<6VNo|_ zQNURM5E43qiB?RJvCK*{^RPExOjoBmSIazj$c^M{?&^=41&_3Yl| zSU7CC>b82!9M2kQbR+;y)UzR%Wj=|pLgG+Qq%aL z?zKtxfM)}%J~Um$-oWu9Eo-ar^ew928^)TYwa?Xu8M8x;^t`}QTLrJMBQ|Sw82t>> zirQ6Hlc@`%qu@bAerbk%x_en^)%2BrtB}6*`fU^26LM_X%GEE9>&7LkVT*|2>X?Aw zQ2QeZ!;GT36Gt@~t*1%dK8LE!41-59g~v6wrbbw*vzu;_=<#yd$0l;;ONvtox3j~u zwFKSXHuG+7)#s>P)*UJyp2+9K1zt7E-cSn{haIE!o;(5*he+k7}W0j z9kVK%-uMW~p~)3_=Op%p@}=n)7>%a6<>2QFRL!aS_RsX#FYlMwq__STnCcUT0g29@ znVC5{cs2gR7dwvnKAYI|>)H7p=qQG;pl~>f)tf=5Pj74 zWu2S`^IE07gKe-tdaPct)lW6hUyse)yFWbRnv;uOIqR8SCMAQ1@Fy< z@+@5o%WvCL{U{p6T=a+MHr`Fv>opH6}{a?f=G%r8jnhNRMY?}o4ZKv(NyzDT9 zd0JrgiLc{tHhHYGBP6_S%rop4?u_i%ek~{t!d(a^-u|?6YO9*&;MAbV)*= z^TZGDj74V7>;Z2kE$Cx8ukc;X3&!HAwEl-_MGdI6C$w0d{5j4S7I`YbIDXe#c2=75 zvBG$r6lu;0_@hU3V4y+ogmaGggLF!G*tO4>zEiyRcl*YwFh&=?^;xIirdU%6)oWYm)bjz6!w$~K`_{GisgDPz{fF(GUFn~m zPL{eX=3^EXm#2Jv2@7GHDqUjv2@}(7mpvfI`R|TA4^2EL=k&MtbE5>+-TI2mZ?N9v zFq14MZ+of4Py{uEi0AZHE+5_S!nMXncHSe+xqP7E+vcx%9CjA6B&}8no-4R>3Xn7a zTEP9$(FF-q0S54_+ys|X(nhKpuI92V8`70cySlEhnk#DTm`BCABd^wXzYcqzK0~rp zW}cUQa1fIjlilORrWv*{yXTXX`#at13(L2pCz_HFo#hSBJN#aM+C+mf7Gojr$j#%s z6wpHDH`!M2Rwq1lZ5khC3>lwZwtUX|5~`G59%QBU?rmz~Pz(-N$1nekjwV!}ck zfm(U_wJe{1iQwe>SAtnRX({*gp+`M7>>aHp*1KE&ON%ZQ_nyd%i4-j?AL9Ot$Y2y_ z%8T}J0@r4B_1-6@dyU8WSakR1i|BJzI(pN@eAB3x+_mUVPblV`0XwZlZ=r@TEu3Q# zv7o!mny0pw(`@1<&k1*aU@ZK;@nrS(!wuNVW2&tU-RuZ0`<;kS+^VBm;A`ye{Rf*0 zq8qCb^6jhaa|1F&^|&Q_@VFBeZULf!HYh3F;$^&x?qh|mx1pbBw1s_Y+BF?A(c7McD#mMs#OO9}Jm01DQWHOpk299B(-kS>~Ez2MKg^UT_T^bLJ&-jDX&q~3 zC|Ua)TaFQk+C|*VYcygwV+)09n~m=&HyDrqLkUqCi#yWtD|XZ>;kfhCa!~*fh2nJr zgigY0{y{ojlZ=rf?{_f~Q?Zk6z4;@OEFossD9*%d#~)2JyqeP%PdYK%ujikVn4(ZW z7ZJF6Aa^97I_@miVb|*&q4@=IPJ-xd_Jlb4U1zL$F7u98J%?szZTF$7Tvx6)w_9KL zMYYA-nU!5kYGN7FFR~|laM&cG$?aL}MO#eekL|F4aN|mAQ)j@RIOvsGvP;ds*6|bs^cjexCTYXPmxI_E*8=9{qNHkol zM{aQ>@`gX>^zq7=#!#nLpFIV z`=6c9B2*=oFxa=7uYU_Axk=Q%u(yAMK?_}RZ&uzx-yPbGF8eT-IGDIU67eBBFfvwj zVQGE~jlRgIInM~#+yl^A>5W>EF^)nlg`<|NxY^@HXe`;dd3?LHuR?R!QP<<1M~vll zSP_cebu1G`+NN`c)#D1KWytZx<``jv7VvZdqXt0urNz%a1fUQs8HSgOi_T3+>uXS@ za>Z%p1({E8hF@r3ZjD4ctN)-*&9jAYh#t3siO{5pCdz!-NEwk5*m^lQg%UQ=L~0~F z-F+SGepaL^`2zN0Qy>1|n^h&Lr~T*%Q$1^(X!wib#43|iW!Qy8^kLnn~BPD zs9JMOb8;8fYixfx z|BWTfI*DG2C*OsG*8>3cvj;D?B!mylYN6awP|){3#{dY^C?HlUS~xZest7;~G@~Ge RAaQaOs01zi1kc{k{{R}iP_6&~ literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/SAP-PAD-150.jpeg b/engine/core/fixtures/demo_products_images/SAP-PAD-150.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..be263b3e84d408dd30f6acda858db52a06e7b3ff GIT binary patch literal 5569 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 Vm>a2<4cs}i_y7Cx$8z@?`(NjG>T&=8 literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/SAP-PNK-PAIR-120.jpeg b/engine/core/fixtures/demo_products_images/SAP-PNK-PAIR-120.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..558ef5ce0862212279ac32c2bf6ec4ce0cc80873 GIT binary patch literal 5762 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 IDS9~kAIE)c2mk;8 literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/TOU-CHR-280.jpg b/engine/core/fixtures/demo_products_images/TOU-CHR-280.jpg new file mode 100644 index 0000000000000000000000000000000000000000..31433475860e3a928c1f359e844c9ab9efc89f1c GIT binary patch literal 16098 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 literal 0 HcmV?d00001 diff --git a/engine/core/fixtures/demo_products_images/TOU-RUB-430.jpeg b/engine/core/fixtures/demo_products_images/TOU-RUB-430.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..06ba9dd78d1bccb111123e974bee0cc89d8d738b GIT binary patch literal 2786 zcmd5+`8V5n7yhPdDXo3qyPz7O31V$^I)la%r9~o@9HS<+*H*R9Yjm`zzKte|&|?XW zb%vr;WZEK!j4dH*2~|ZYA+b}@FZ~PVe$Kh~JomZxIiDY%bA|7O?*VxiCxjCK z0s#O>^Z?-`kO3T%kd%^?P*jqXQdLn>Q`6JZP*Kx3siUc(tFNY^rmCZ^p{;jTUsK0G zOIOPP1~ITSF|##2t#57%xBlJ&VhRRHOH0e1kkyoz*D^KKJ7oodz#yUo0b7C1!J=$w z2?mRxB?JsH1DioaNyI@c!Iq+?2!bKPKL72Aa1DyhnD1gKiK*BCSTl7IO&|d-k z6XFt*N5w!=M?|c(Ja7agc0?Q`aa3GP{OUp+~<95ce!q zI&~U$SvUb47ZZ&sh$#RLz|^I`1pc)lM+gDKlJwm2`BwLN4GomwDx;-q6ZN)8lzY_z zv=3|kOh(CYVx5n@(f;F1O{)GU&E&#+%o;Q09o&Jv;~~tE_2p6~DD3OLiq+OWWf2{((c@TE3ja;sSa%V&Zm7dgJpsZ~92~cy!A)YLbXwd{&zJbSd!D zE`I|~rgrbY3MHJ!u@75k-X}61GzUAw$bsuo&X8lNp#|*n_B^lbeBWYz?t|L9*4F71 z2wZ;4{DBcU3DsjC`S8mL_i)PWhi3~0l;I>!kXI}$DA>0 zSTbX;ROs=+OfKZaIpVyNN3(ZEXN-Gy3c84o&6Bb3v#TRRALd0u34%@`(1wZqSRn+w zgEj@MT_q?9oL@fIsaJXO?11qbv`4xBV5Qa{9YMIvEh%*hU+{Gc zDk2#FMCL_kb(5Y0C+~k_8nGT;drLEUo&}9QB)PfN7yB%i5vBP>RMTMlmo4)J9(ewM z*VNce7{d@kO1sI@SPK+;vlue>M>c8#bR z@VzYapxI@hA`pXcO{q>Sz$Qk|AKvy2+pWJ7Y&>*#0*&RUCK*kB7Wm81G(AUd8O4P^ z?KL*3+i_LrweUirs}-?x4Nt73d|D~CjrT61oyRwKBIQoFC}KBp-9ZktUsY5_KWx=a zPJ(q*chPy{se^5}(eR+MA*xRwmK_59GvRkqQ;x-qTk=JN#O5`{X?6&OncnktMOAap zumv1d^6^dVGV*irT6w%vL+M$>+xXR(XiK^ynW^!{*p~BnFFR9x$|0zV99aLk9$MUc z;oO1SaF`a=%9d;7K3C9N$C@FU#4qLSyxXM21UW6}J+9Jlaz}J0xtigRThr#)>X=yL z4|kkU2)i1e5vnJB)4SiM&7k0V4qt7Iq}|cK!dcV%K4n&>!2dQ^(q_Y&@tAIUf*qN% zGv7-Lku9ciL)MA#<(DnxD$*r9n?U2v2=}sWbn5wA^h}lFR4sH>9}!`oy(km0f@#ek z3;1FVUQBxk(LbX7^EYlf>Z?2yZ+`)M>|lt&#jo7l*3?NDXc{rq%ufF8Y97Mu!wlWA zGpR_oDuTDU{F{H!F@sL4U`jhT<#@cu=;yK48m&T`5C~c*OE*#s;F8{M(@N#qr6=KvS!eq{B+!b5o5-W^x1DrFKbP4Y<`ii>Mt zdetm5ZZ0EX8Ge{r>v=)#F2paK(}0&^J(L%}#z^ff2=rbWBg7F73otDr0ofG;VKc;0LYi#eg zm=LPF{ z2A>L6*%A$}hhF4n(NBslS#NX8MY)JS-;^{qYZ8c8DC>jC9oy(h-Nd5I*+V(zdR#Sw zCYvGzN|0p-SF$bDQ=A5ei@%I!0N!2S_yjnf##g)C#A zmN5fg)2^4hS)Oyi-H%5J7A+${tccbZPo6XP;Yf zQR|4PHvEWd5Ts?n)i}^D?j{YXJm%fC5ezRHw6gb$Ob&>#BGP#YoLPwfpzMIxBeH=I zU?t&g(>YCD%!bD!~|OjX8gXvOff z$Q`>d>-hV1i-kU3xKWj_rPMn0joCVkQsHJ8I5^HA!Q;H=Ky+KvxFe(U_T#6C>+RFm zSwUY9e%VU#$_Vg_U2-lm)0u|mtD9Kmd|ml3%R$zH`9twxuy@*9-rH>qeX3%_af^Hx zI~IbIUN25PMVqHcN+TBHqS&))!@aw!Gjko7;d``>02k{VuPm%03K#f`I|a!(r#j@B zwWMBaAh?ou8r*6(l9=6}st=so`1Tk`5<^_dmJ@%rHVXCLk*9cF_%Z%x>xsf8vA)`K zy{n2pfOOPHA6?OX>}}Vz3f%T7x1s-JB&a*btT}T@dwaVtkBPtZt!@5wI88YIKSH39 AF8}}l literal 0 HcmV?d00001 diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index fda90940..1f5213da 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -380,7 +380,7 @@ class Command(BaseCommand): "description": prod_data["description"], "category": category, "brand": brand, - "is_digital": False, + "is_digital": prod_data.get("is_digital", False), }, ) @@ -403,27 +403,49 @@ class Command(BaseCommand): # Add product image self._add_product_image(product, prod_data["partnumber"]) - def _add_product_image(self, product: Product, partnumber: str) -> None: - image_path = DEMO_IMAGES_DIR / f"{partnumber}.jpg" - if not image_path.exists(): - image_path = DEMO_IMAGES_DIR / "placeholder.png" + def _find_image(self, partnumber: str, suffix: str = "") -> Path | None: + extensions = (".jpg", ".jpeg", ".png", ".webp") + for ext in extensions: + candidate = DEMO_IMAGES_DIR / f"{partnumber}{suffix}{ext}" + if candidate.exists(): + return candidate + return None - if not image_path.exists(): + def _add_product_image(self, product: Product, partnumber: str) -> None: + primary = self._find_image(partnumber) + if not primary: + primary = DEMO_IMAGES_DIR / "placeholder.png" + + if not primary.exists(): self.stdout.write( self.style.WARNING(f" No image found for {partnumber}, skipping...") ) return + self._save_product_image(product, primary, priority=1) + + n = 2 + while True: + variant = self._find_image(partnumber, f" ({n})") + if not variant: + break + self._save_product_image(product, variant, priority=n) + n += 1 + + def _save_product_image( + self, product: Product, image_path: Path, priority: int + ) -> None: with open(image_path, "rb") as f: image_content = f.read() - filename = image_path.name product_image = ProductImage( product=product, alt=product.name, - priority=1, + priority=priority, + ) + product_image.image.save( + image_path.name, ContentFile(image_content), save=True ) - product_image.image.save(filename, ContentFile(image_content), save=True) @transaction.atomic def _create_demo_users(self, count: int) -> list: diff --git a/engine/core/static/placeholder.png b/engine/core/static/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..448cd4521f13be77c016a1fbb9ceccc3aeabc5a6 GIT binary patch literal 333177 zcmYg%cRbbq7ytX(qqrn4k)0K}*<>c;%DS1CtXoF58QHyZ3SL+uM1a*YiA|&vRZ+OpJ8TGH@{f0B}}cPa6&ZRODZ& z06H4-C7eehntY-6(X&PY0OPqoKOi6j0|BVdOXzEBnmxd*9@D?%c6m5MA7-ij-Bgi2 ziE86eEo1c%+*C-ET&dBvsqG4J^`5X>|ILZIW>Be`_BgxB%`Lz=l+cr~R&{yJsu=tH za?|j#1+T}upxIVaMFwiK^Q93KCN9o8oq^38YTg#k0#~nIl_&#}f&JrbS|M?Xb@a{7 z;Nw$nmRDW#n-8vCO#FMvW>%PsRs;UM`0u?9RW;D;|NF?rK3yOO`1yaoaxsx47-0UH0i_&jJ74?(Zdp%7k|t^zS>I34wbTkE}9^>>sX7-F8XHQ4Gq4 z>Vy+cmQN27TZ$|HJ(&5oxRX~Me;zfPS^2GZ=VoF{HOlguDk}TL(e4gDVY2X^{4^Y3}@aU)kR_~!d6877N>H$ix-7tq=#VNcMZ6A+aBii_HJeh|{5 zWM?lG%3gO;fJJ8BL0jWTb?{d2A(@Wo-da{x4n#O1d}l8#h4?Q9sI33}FU_>gO?$I( zl)oEp2k$;b$*^$*`e1WI1q_q#Y9DnC!xrXo5043XYe0Kuyv~su-b%VBtfS$E`ZyTxR6^9A4Fp;DZZ8cXq2%)%D&GrH(dA*ps-N3Ftvs3b9@zL7 z&}Qb}R1tqeG7@2F7wSogM3-(b`w)0rJiD;!zDvI*^W8EAR${H(PXqIJ>~DKc_+pxu zFo*BuuGz-N(O%d&Xpq&fMUd7tJKs}v9=2aaderQYsF16o$khq^EJ?18P3V*=U2I6#|V%MZaiH|Vhg-xy7CD!_|}6g?;{be>;Dq3nkj^${ckc**ahw2 zCLl;&_v4`E9TE%P>i*flYBmKfw&q(-ub(9OsVnX+B6hEzrU}m7AWa6j-=4!XWkGei z+ML0gzkkim#h}(7TiCNPTa&!5cY1nc3B}_#V;c;ZnXRbAhtGDU!V^*a)8gjh_iulR zQ=}#Ecnzi5dk?vLuTJf&a$WiNI5Pk3h(6s6@|qadi2v@pLlJgx*t^knGOrU&VaYK1 zD%H;(a-+`*$pk@Ww`QyWj&{h&)i&7 z#!OXGO5o;?vA+pvnYEsBh#Xrx+uw<;xBe~<@7@2_iTB4BHQYdW6m++Qc&Z){PdQX} z$uKz(?0c)kwg|cQUP+;7Fg0PXl=@&!acqNVUFgk2`lgt0o}wS3t$ryUX9IrzW3Q4v zeqlinyZMZXFgE3u;SoTb9vskyuz$y#c04k)`4KG*RyJ&#hA|}BME*@--iQDD^9+B| zp9sk>$9*u%d5lK{+rol)NzIkLIn}#waJ5W; zkn974NVSO9Rt-DFz4#E9Xy^~ujC-(49`#S>vpk0GaUed&&|Cbc(Rs%k3Z!EZDquEG?neP? zeQ<3{L%R&8bO(#&o4dZk0|g=q>+RG_ahHx`GX2`J{1~8mR4p!FU3)^2h^?v zjQ9{A5y#eMC)eWY#~YOS7dEDw=K~ro?nj0nmbL9=wgsMlyzvL~`ut=6%cMu&rdnuU zpw>C2#~aG71#b={Lh)h05O01l^0ODDp3{och6Q!qV>pO=FaXI1InWBoOYC7#8A=M6 ztpeQ5QFs||gT?UA9VhH@?bn0DXRCXF!+=uYn9|$(J#lY2tHfZVb%Okl4dx!WuyzSH zz>c&1aE+F9RV;u&R*_AL(7tweqmS$T&UC2kzW<%cV9Q7lb&=GKH)dGJ2Tz16};o_!~L)HIQ$2oUNP1uj}=MGQ{fw`;cf>< zv3+t}XMa7h=fI!@V<72pct07WW_lqLozua3&rc}EM)>Eh0hg`Zk-+bUw3*NoMR!;! zWrT+50Z-fmm(~l8XB{S8ldhhmKe`P9?h#D=+ND%zC&16CPG~IpvA93bOYO4`;_vK; z&r~?Q@Ado<^hf`|+}ts7JdEc;(nf_w#9jBEmpBW7_Uj`8OXn1pyUIU2tTK*(B9`^#*3wKKW20o23f5=P^^lv1n@2eI7d2 z(##v3)c4u~0X9q&PM)IE#wP0VF)LN7_U|28eLJg-DuKLOV!Wvq5TQ(+@gijTfnF>a z0kcknPhN^~6>;IhA&yy*<)3uGI3g_v2m3|Jhzg@9{4;))_^ z9Z`8Z|Lem*?h$opXOM`pq2A-!kP_S1$MlchBthfjiU)*Fu=S>=A7qM+A9id0*)+C$ z|1Dv~1@g9*g9o2hqpQ@rAU4&WJm$THsb*8&bo}zZgpC&V;W>6U3Az!p!XIb_$c9;| z;mTeVzl3S!{+I5TSf;wu1gv z5VJk}&nSv5B&Q}IQCs5kA%dikf}N0lSDHCuS{91A z+|;w}32xUaxnS??1Lk`>h&3&&MN`|cR_@RWX6s6ASThyi!rk5y_u$sI29>}LS5^H4 zz+%dcc>94 z+A-C;?4(JJ_?XFu{@5KBrg6Y-#v$oICUl{;U3tZEtz#P6JJO*+hgFbeakG!_A*-KF~BCu zJ4Ec?2@6O{pb#j+zx+T@@{_C&=RuwuBs5sNtOby49Zj;S0YY&}whuwo`X!)+P7xX- zmv9U1kUQ-~m$=)TQR^jP6tO}-Tn2^~xEY?lbRTk0$4Um!Se<1JKwsE7c4Hls6Y`8? zBp@2uyEu_;-H=0`oHKveL?3PZf0@=ue^8iO`~seiIDbO>IIH(!`&}{D%nq8uq3a_K z!3qKe3O?-Zh6oa?j}hoSyLQ1|@q>zs5flfUB<|xZ@l6%t+csqY6F{UXbE7qx({xAm zL#`i+-sHA&FP?jN+>A?WkEGRZy{W!Y%?+iaVOs16OH~q$h$xP z>G2ZzzSdPPw(gF@9{Vk)7X_lGVj=(y`fBo9nndE#8Q(BUM%LX83LW*ajH47;2sH&xUC|^nYCUiDd|~7G~v)nL!ql??x2tH-#dS|y4M^3 zrAUqc)wS|W0~9Kl(2F^pZabWsDRx-j*Njv*KYRgy9L2|1R{MT=HR&<~zmY-7&wI}M zv0$7=N%c^u#>oyE`m55OIDQ1>n`C4XCo27_tCYA=1Voje{7@wEkx6}n0HZ2Q(TA{f z6!k*=@*Ru;0n*}S8RaLX=v_OPa^4|{-h-n?zM7!K@UDc?NseF|;Ze?mL{H6^mmx?+ z;tKgif$CnA)z=vmq6f`>Q`?(a_z`BYP4je;jn!psBnvlb zP2OF}*&65EdwAu!a5+}pi*aBlZa|dt>KloaHMn1YKd;~^=xfsy) z7fR3kCk0$uc04s)xi^T2|Iruwm!Bhp)#*!l|rsI{qQux$V9dZ9AHb2R&MV^Ax zt;l<&C%2@HJKW?oyy*C+nLaqkkebVs4Ni^V5vO+1aVhvwdWK1x_klNtx3e5ao72?O zmoP8M3Nf!#8Mzusbl=)}_(2JP)!L!}$FJ5Z&X&qlqKa2;zOQMdA}H%V9#|EsFPvEo zMLn7se~POOW#SR7%EhT|aI-z5saTaTO!=;zQ6x+y%KGaWX!8wfT~m9~>Q2LAdEq+! zbpqq;qz>?4KAbLr=dzTJlXRr)UZ1l>|ec zL3i6^@L}P8PMF%Yzr5D`+do%=^N(taAIF}uB3ILCMr-8wyIZBtT)=D%4~=Z~prkHU z$j@5B?MxywOyM+IbfwZ9xV{`SSe7MBEjViofVYRx0347HFHsj6_(hd8wH}4?Z>l0! z@0U?v@8KSv2S0u_+;;FBe(7=LrVe9PnG z421RU>dg7Ke%JbQ2|!j63vexCf_aIGyM{0o6}KPEh`}9#XOUQ{o-+dLL&~ZUg=O`7 z@vjea82K~aKLRv(E^dj_8PW0E<@!g^`(U|&}~ zx;98o5j^BDJ>}f|R+;C-Uo9Q>U%|Cl_yZ@v@|9YOQ-N|_a`m&2 zp_|&NGwTK=u+A+6E78flL;buLq{RvHen)r?@cOfOw0sGTM(x&D?FvLpOvC8n1VHa) z4ZFxV^wtABTkmhA`#+D%*!~a0ENwk;!;glmyXxGggPx-Tm5dHvr4(N}LMQ*q zGrL#K_RB6K-@eb+)Sxx_S2@GbUEu{9!hYy6)nW{|>w|PXBv#WLrvG9p;KnONX(FY@ zSs?laOv#yQ`@ulQSa@ZU#|@vP6JaSR@r;*}6Y1auxXRV}xO7Q|sL`?Nnp~heFVsM; z#H)OaZE~wC$^N@>xJQj#qPeYQ?!~}4w~S<9{(6~zkKi1=JNAG#amrP{s#%wMNW_2oT!j? zRos{CRv9T)D@M{K2;+HQfgHNO4B&q-yv=wd_Gy0uf{cxP3Z8ohU#>~@Qz2oZ3c_6Z zzrPke6By?|{_C#z5yy*ULCjWD?CdkNFGK&5akTcXB8dW!6u7Kys*OFKc#+D?!2eWx z#f$At@6lC(ft*H46X3xGU^}z8?H<^78WL>fE}0_R(x+5!F_MUw+T(IB%BsEqe!k8A z=Ilir(Hr4j@=)z2t)4vRPoIFB?TFy_5QA~bR1=60xTK?D1MeGBVo`QH)@s1d<+4Vv z?P2+yOzz=+Z@NAL?O6lLS;KAzpVgwGCAwUDK){2Caa-ET_=leR0l-Lpe7|4HZ%cHQ z{VNP4htugVA>EIg{|6UKbL8zI*iqfq2RSr53Dk;PvM4-F3lXl1P%0d|}l;7h!~$wVU~GvD}Pjc|YU8bAv&Lb z_(q_z`^Ek$bWbq5P5$W{yUNfge)iDyX^rbn*>761X^s;Jw%RITUZjWjxyN2Zs##wXwe$2%`cnrQhr3ZhwA}%3HOp|G|5r z#f@+ir$QQ_7)=b+sH3E~XP6dM1ed+1F=3qiz{Rs+mkKzussWHLbu>sS8ya859}o^j zeCHEujFupx4sC@wuK9A0!W7DZg%TmJ5II99*nsMg2+L1n#FL0v{<@_A^Q)5nxfGxDgkdKR-a?+ErS9J*IMxwc>`7IcX&iduL9yFYuI zPOV!>gkS!>SP7G!uoy7e0j9L2&k)tYoTZc#h!MT_e7#GUzf*{w0w&fCFXhpS+bb_T z;nMm{)p#k@&eVQw#7=8i-Z|FvZ|@omVo>pWwhN zvJImQxyFh|6ol#6A1%GGs4b%Yqi^2!#+|U{A>WxVF;G!hEH*Mte8+JS5PLaFlfdl6nrFJ>0xfh1;!x{o~WE@0IpE*42cvqA1BNj4HdznNHEq z@2)Oa(X(v0PNm;|OiyUhM4p-Dc9Xd_{IFFytH`$!Ni%2XzE)Jx`SEGXH;4e!&MOqL zIW{iG{aDY4uIqlrH9BCQC4LL*n;ou7jvs>c4?+ANv~98cu@Rc;&a)lGdT7A5j!oHm zeF?!HUl}y`J6lE3UL1KPw9?XGrYHy5Gi=zwTVlOX3#s%^q$7Q?PFL_7T}4tT>D{5m z`Sld|7vaLF%+%yPD1IdKTJF5DlFR+u?9`-Gi2fpmiuyN3x0&TNTF567pl)XUs&iD+y0b0k|L(F^Q?iDo2@2ZO4}aU?1; zc-=6V^zQdKL_-6VhY$Dxh%8Z~dT$W#%F3`>^CM+9lCnOoe30d>dcu5U>B0RFjmUSz z)Sks=b)bF{Ms+Q#O(6@Xo6gR$C4Myc-F6np{@kOtW4gtH|10)M zg73-NvzAOT_8`b`Ih)ObcKN4yzWkl{Kx~c{Y{&UcvEY4}D+e6Lx|(SMSCi%AQ!7oi zWz*`nJ;K7iZ0HqcGp2^T-1-(BKu~I6u{9GP6)Ftz8TD5ZW{gq1qL_0osw)ar;IChk z^y9>)dg55To0sZrX+7nf0N_LW_C;xHoMj;TPOKge1(6E`Y=@nlyeOcufU&6|s6~zr ziF`V~=n`MmMJ_Zn)3}UUjZ)m;__pCS{&qApBWi2ycBRaLpu0?_tFnX&I<>vS{@qp+MzRiE%ks5%yPgx`-K> zhe8x@WE>>~0wx*sXgiele%?bW5EpNutFo&&{B&K1+?jVdzm0x?9A=U!X(jV`?H>nU zt@$4%4fzzbFg)_+>ajf(e`3__hdmqPSZ^$L1JrZReD_i6FFiJ$L?0;{3y*wh?z10q zhx)ioU_te8DM_lx#+LKk6~)SJLNSUZX6?~@58_bMmi6&l&JN*5bXB5M#?&0iD4q9V zDi&2wnoM)UKlM?x2d!v4&rky@CTbJ6Da++_KU08Nc&%?R@=>>6Cyry8a_gpAlu*pN z<#OGCUgQp+LL4=6twh!{fZF4-;#E?)>LMmzD(;A`qn>&XD{EMC_cUPOv4%FQcrz`_ zp}#=S1?&|Y_ogUU(&UoR>kzi-nJn%&V~D30&4_20?mR_6VK84`SXNO}InmyFtb)hW z|LXT9$sbs#klm<~$g=cXeE&<>jOlrxju|7t#$Q8RH%w8?dHd-X?^2ngpVQIrh`WFM zk1hVre<^sqhn#}DTV#Xn36v;zp*&TY<$TEJUTh4QQ~(}?Ge{^_`VrjJM+!Vo zXrenQN|dMH5nyvS|6&@7fx}C)f1z?eeLN67f2_Z*7Q?;bb`&6437V7X`up^xzi%_doilVIlkr z#ZXmVd%zvQwwZT*$j)8HnvdXc}! z;B0U{dq^`!KUj;~Qk?HBXnNzTGM*RGbJ;cw%&XeRc8jyLG z|BA8m^CE$eLt%zbgBE;gBKQ1t_!h`W^q`Z$Y3oQYC=4rk%Je)Q^!_f%c1*dx?e4t7 z5e+7jsGQ|1p}Cyv&m(YAo)}ALc(1_=6l3LFvZ84%_4{uYB5wUWVRQNx>WZn>ZCCPx z<_5RAaB3e_Q14MU=AfZnXlTKOBwZW##0%J_a*5Br{0S*lX-JL7;{yYMXehG_tE($E z%d0_T+YanLV>ti&b$}mQnW4r=FLi@BdFGVG#d8-@{`EjnfW48G@4cIgWN7xoM(+C= z7v*$FJB&}Qyc!~okQDKm$kDQeaMOtr^EH*MnMD|+Tb zX=-Ud0vit&kV?;kie*NI7suMu`Cg(MDhEeVBzl~G(99OgPimId_~H|3OBcmAIrQ$_ zD#Ky{7zz7qE%x0Iqd>}`rSCoeUa2@YBvOY`6e!M7a(NUbiO+~^T4)Y3>PJND&@3u0 z2AY`)Gq=E2j^5n6_U6lhomN*MC(9LnCraSMdDVz%@jzbJ>Ci7Ax_66|?Zb_l%H>o8 zlgF1R1-%Ixf{7nGp zDKcB?%HE8*1W0EO>CZo(ni#h%_4i|EY4VT(Ikd?YNqm#mkj~e#rFOEgu;1w^bobN=ef)@nf$TtMGhg|SiL(A-qF3q=51XQR`8yXx zpGx@=O4jP*sKtgqOP}Fovt>iH+^xmgO5JcNNKL#;8BW;OW{WLIoe>oJq%^}D`|Uc0 zgAwFM=qfbhAnRKLx>w9!H1vZMO|G(NndHj;{O#AJEJoGV*#HnY<0(D7$3CCUa66Tj z9;xX@X+(uF?=ik)w4&;Sk~AuXs2p%<;S5el?9Ln9kD}pnYL?A6ICAGSd+}CDCFdYp zd;amR0b60JbX>}|9WbiwVDFNJLjt{?ILcMi`OER|O_DF;i0gxh@KU}=O$22@WYPwW z-khQm1CTZLP`eq@wJFwV1gN=Sr*bYW$yhtK_56CK-(nOHp5^J9#qD8D>zuA~r)K>C z{d_pb=Bvaf5lla#I`M9814B32S;}QfxQ(t#CmXPB3g37Cz$%LJA55U4|G4<3!UyCY z+m(fIjz{0@3fauvf}=DD`Ix6GmtRj*-c6CFv&B~ee85; zl2ouPbJ(t#lv}pFm>dVyH_97c6tFK}HS}2z@|mK|ZHARdTN0o)X|12NdXpJVlvk|? z`+jAGIk*$!^MSKNwQU3aGhQ3T&(dq7Spf)=!>X=Vr5JwX+60wpFiRj>xC_s55_AIBI<4n@2{`o!C*7 zeafRKyCt^8#!51q7?7QMZm7eVKQoLNB*jguJAFnR_R8w(GxN83>T$)_bu{$35Y<;P zy-j==D8gH_)6ja2(!B>C)rXkk3e8xR85#*d_stKNo2=tSnK@;_w23;Yj1yd3^` zG7JJI;cK;X@@!{xO|>;WMpk5_rDCtKKKe?QK&>DiQnRU8dV>Dgnd!r)UG)56s!!jm zXVHhyy*p{*rdlqsO$U0nuFz=yd<)LgowD@_gVGI&2@CiBN?EkES0oLw_`qPVl}Kj8 zJg)kRmoZyVu}-J5lyCP~=|(8H4C*7$z0l5=L#r&lGJFI36(hSFXq0qa!X3c(B0xZp zv{q(Wv@Z|YXlNUNu+T@WoUsC7ukJEiuRJJ|h}c|ariPU^mf8oyxMBH}EP($$9y@Vj~SZLx89EdCafq+UTGq9!4YE1gEQ#`1s6Owxg6C`{mORr~*$(jW znk7kGA0J@de@y0CHGduU$=QD_Yck?5Fv}j*VS`SM96FTh93kuJ@UUx^n%VSG4wp;} z5JBj*)=!**1~q*<^c73> zT#^bDrE_(s{e5h2IHJx7e{hZ{{*+c>&Y4&d8PI-Nz=%JOveU-Gy=~(|JxaQba0eLs z&Jzf1;Twa2T7 zv7;V#Ucseo-4UDz*KFHAy+{V)a*HnoB1yDvyoI6|dJ0@D>f}LA?s_wP*#q(@kfUe2 zF0t&QxWAs5{)^t$7dHHzZek0~U_(*_&TKz^HUxt*athZp2zeWN8y_Y8G8wM6r@0K` z6Og{MW%jiYrXX++$Zc2F*3R&5^FON}MI(^y;YIlzvEq$zaRIO@H3Y3kC_+bpZ$KtW z1GRj+oNl^MmmH@Jrh8)}z=M9P;0pj7;s!-KC$<-EAp3T4k9JN@e{uJ%ch5^0R#o1d6?Z$;4$dvN`Av8Q&H zFgPwbbu7I^vJEaZHMA_gIHGKu0>60n!y>y_re-LA@7EZOEblQedu&vIVCtB;i>{DG>qk@At>9G)V;Frb()=~NXbAZhM6mXqBmMtBs%e~ zt|3CveX3PaUrkY(I+Sx>1@G{@r&mW z?hL;tWcIq1hwVoYr%RIuz5}k@AJW?S1h}v%gF(jt%m{*9M{+vqx~yrE8_8D-Ue)N$ zc^B&+30g}=%H@5&{kpJA&(@@-cD>hleyJnnSop5)%YPP){Rv6q*2lzvhzz*jv#0T7$9`doYQ?q`Sc$sK_p1}%N zbw}p6&vRFYj7un>-!jJU?uFG<=p&Vg!^5#tH%~k;`zq>iHiTP5t~xJU9ZZ^B(dWAL zUZ82!ETd?rS&xr`+i-CEb%-CoVaf5#eR>YKbdJ!bo8KMR<7Ru2C2|9!YikbU#@)71 zUI8q4 z2H%h?JG-CM&ZY8u!YBjt@Lh9IccdvW1Jn3&kxRT1`L zYEtq3Q)&AbmD~oVd}OmnB$iDFrerev^8+3AtM4+*OnTB@?gk;1qHl^!qmjT{YA~P89kKxJYf1M|#%(Zp>tAkI5zx<9M-Akb zg6!OPeXdHY1-&a>`pxHnu*-pHA=clD0?ydWE(1cQz+2V2N*P~Fzv}pl`|pT^0yix# z8iPy2L&B&pR>8V<9ORBocfr!FweJzogCx}MCMM3o1Di!fQohYbCyhkE-fAi_W{p_o zU(uf&1pyzP0s;0sG3NkCU2=kFD_O*SA$NARAJ+c0WA`}zc6PE?+7?b{zH4{58lB!} zyRn};CVrk9{oXZ~SJC>={L4Z<{AukkLUqVp&KoEqAw!ouyxlX?@l{W9qb`m&m z1Ec72lUDQXl|NOnV)l(HO>Qd2eXUZ0PjE$*u0;WZb1tklB17gP-*r|hG(;W?%8a~l^$g@4owbZ>dF}X8 z@G4}6(KRHxe7haA#9;F4u7PQpnn1Q6paOr(VdHsFQ{J7=R6vh%gf1#A zp$zJXwec|Dc>GZ*qNPOM*wHyHH2z6Mb%}h9hkXk@$>FBE;fB3sUJqiKCN9Ui_Xi7$ z%Ul68AugwzXQoL%`C5vh9jN`atp39aO>U833@WvJQK?tfFsuu4=py!Nz*V+Z&|zee zQNRwi><_zhjab@xg}ht#db5HgZshMEt&b`4cQ$t)HdG^O@%@u0$8iq?^yjWB)}?(n z-e6~GTecnikwnjbs!lGBSCyb@fpULGllp=m{~apn^T+=gl<8RWmcgqHdcT4d{!+z{ zl9WiadD7zgB^KvvpS|~yefs`zJn|WQ*#!J1xLR_@F_%eCjMp3YAV1a5nC-w;mW!}wZ!L*McVH^`Yyj`~GSAkT~r7=x4xX>!kF&aqlX>3)6po6)!MI&#Y#ad`GU zF6LOu^j*X_fwpF!ImV2Ht&(}mx=K2y%*4V>=`?z9{I*Al)&+|*-U-TiR$ma`;7}gi z+~-?+4rIK?siXmnrrb*zXsRo_Jxq+4FYW&4_M6Zp(^U{of z%M{Ec zB*Gmft3N2^-Xg$VAFa>o{mIQ5^6r}qzW;c_S-)89c60^PdH1yvA^oN5AyfilB@6F5 zj<;nM@wRdg7Yc9jPY&tMaAwsy(@$+xgTH*INdSX;oaKH`J}yeAy-h*cI#RFu_yf|Q_B0C$Y?dApadvJcuUtVjNk^9`AQdKSDugh8NQz1_YVw6p9Tu>yeObH7_Too0 zpQtOZUF7O6d2z>kI(2(b9p_xYSD2x4r%30N|_PjYr2^b7SRihRv8h0GxC^P z!_~5Tq+CWrhD5YlMfSSrMf8CtAam$@;_|bydrA1G?P0AsY`zw zf;SyXd$Zz3>ujh2=NkE~vE2s)!fzCu-d*N?z?}TR9@D7{{#M=Kxo(vFz2xR&z?wRt zcKlaULfh9keZf3k#X&@{kYNhB5=0Y6RmyR`b_HLp552g$hL#4)e^J)cV{a+{Sl#Dx zk({E39OnnSCTxl;6U%t8tr|f9BjaXR&ysDFu8`0u~ao$h7ULC58fDa_ME8!Yo+KW`_JLGuJik zwf#C?c#W(QJW`r z-)VhXIYmfcjvPQhcR(mewuxIno@@{_E*`+^Zg4A5q}=1$`7H#j)>Z7QIj1YV7+Tq$ z-F0ve_Q$5YI@$#sa^#BUskHJ1b=*e|IhXY*zFU`%q^VReYJE|~Y)KNvwMLi*WPAt% zRd;9FyruCct3BJPBh=&}knELz2VJt6<2dXe27SQCUkFF&ZQcV@QNH;6L3*+{wJ{&T zS;91!a2uP-jI%k(Tst-${dDbnljs>Hdj1S-UqO*QnZd>+sT{1Un*>u7E<#jf@LE3^ zVPXvZhk=ZAzS=M-N9@-CsfUt`C@X}W&o@L~%!jzIw^=b+FEHi>4$N4`lcPpz&OyLq zlHZ2LBY|m~kwD{%S2jpPt-vlRlJIExcUFe2oQpgG5&_ZC9(>i^yjP2q@Nm~}>By@_ zII4)qi2%X?w_3a=+mby-0Z$lvvAY-6Wj2UN!A@0ML)&x&TRFhb$}g!{x$G6WX^mV` zDSekzv_w8V6#Xg-W0?H?((3d@S+31*c}6tawyv_v`O0Jn(&OQH9FI%9Be5Q*m_D?k z%ThH+UEu!^$PHf2Yp5V*`LjUf5rdz4kKOes&?D~MV^t9?ws9_?S%7_+QT9~;;S0t` zcq!zF9PFW1wUxgE!=e8MhDnsOAJgqxZNzr!>O7`?IZZQMF(&J)f>d4(t&lp~(rXH? z*8H7XIQS*%(;wVEU{M(NHKG?|Ivm3k9Wnl>1g;+tN}K;?`w3_wQ#=+F556B2NZ2pr zGm%BjScXT4pTJ@Kg|=tj&&ouLZ^|BCiN$z&dgH#+_~4D`I+l~GRjAvpetE0&=6t4j z@|}BVEsc5vTWchpgrO=abi3)``f_hg8x;WxKfinfaIfB8d2Q4VS{6NgmMd`nl(Q$_j z)sTL7xEg+ro^;{3<=$iF?HAEvQz_{}O@T9essnHl#w96Py~H9^Uabu9#XoOTmQmeV z3H^H%uhc(UfXJsV*beF3ALcySOa`~5*atIf? zs)bg{@6u~uK94oPZo8Fsfj3J$6f{~`)Fa|3bu6U4It_0}tU{xp&N59B&_ENYk7_$`2TD6 zhTxUf?O!=A=;QAAO!@4Dyf@y|S*ZsGg#!FmRq5Y6@PWCG1 zZrs^|JMAz&qYkU3Wrf~l_Ay^t4;uq;6>sD4*`KQid$Ekl!z6H({oN3}Qr(%4T2VJ9 zR6Nk3bS$)&kggTijO6x-%*}Rjbn!Y_QNP3J3vakjy{s|}jnG0@9hT#=5;(b_Zk?Z# z*JQS)FX^W!WL4jOkHNpZjelwUgOyUG9Gb{BO2w|s(&-z*=5QDNTFk<#QvLngLlh&S zB}Ko>k-1&UbNr@O&uT0cMT}SCOx8a;CFJK(0 z3aphbE0gE0XLmQ_c7K7V0MeYSIdGf2cMj#_bwU|f zXqPUb-93|ZIG%>l1Ec}7TS-$FFK8fFPZafO65x>hz_uZ$i)g*sP4i&jwX@k)2l zZp)}UX)2f^%O5+{Li&@O=lQxKby_rE99Bp{w1s@zt+kJAZTi&>2lL}@^RO&pRK8!G zrw4rS70u~_4MOdTNJGPTf}?9z7&Fk?qjZ`8??^|G-gS>x2H-by|M+0th~%-V44WK+$5HSWceXH=f8j`7T&h<(b3i{@x8E9{P@PcQpU z9uk8im^vX%EVXD^U&!EhdA!}KFs`AFxI3B>^cqq%G2vHsNF zg}CqFQ=+HOtyrucUF8uaPoFzs*BE|dab0NQ?b}z0IP}4y^>F{;& zbcvirOEG3joQlcvX9=yyU-j_hAK!y11jQDfz{MJcv}FJY8wURIGO2u4% z8NPM>G*|4NA}w!Ug5c2d&SM&$e9Ay&eJ2LOgrJIkMp4S`b>KJ!5J?s)EYR<(k0z@@ z;zR99A^J;b&vCgQDcn+?vUY)lpBmeCc zCTV^{U@m9n^89KLkh}4W9#i5kM&oc zr24hZ&Xw4Hobe+hh<21FE7(k_OgN)?ijm)JR~;nxD2y*+u1CycBLWPGVKk!`X;Z6aDU3ACXp03dx%AI zIuMltpF)X8QW~A)GYTKR@GI+1K!yrUX(PM^i>`T93wNk$R@HP zN;qWiBkPbovmN_{>^+iEW^s&g>|>8)k7#i0V}^*6ot=F@`u^^HJnnzz5B_jo-tYJ8 z^<1y+s8|AAMn3Gow&VTIQH>hMF);`0S3)5@STz~6y8mz5ZEKossc+50X0b7^@v=EM zT6*^5>+CSi%Sa7I#l`rT_`1+X^XhW!J*gaHUvyGxAtZge>tT4BN`>2TVRb8$)GvP1 zz0n;l7I?=TiSN@ZHztyo`)0o0+XtVs^0>`PB`dhmM-IGPy%hRl2kz=-qIr;%dakrcFj#OtSyDBAwUw}eKL=!cLhfn6gq5CF0 zFU}1=y`s`)wAog0F)T%b=5|>e z;zt~=ctHs*>_Nv=<57QJ1Ld;ZX{x+t;43Nqs~7yb<2}Cu9&pm-&GU3Y(@5BQIv9Fo zTRypRqZ7jRAcKEa0+(%dKd#$GmjU(+t>;bNW93d4C8V?7wfRIC7g%9d=`!d;VH<2H zp!`$4%kPoSGLlCS-l2610BW0VeHl~h$|<3fmXP~c<%;vwFc3{Z_^6RI%I^s%M90^p zAYUsB_0n$WbXw+ba7F^wbnCN(dw;JEh} z{4XjEaA&21tg|X(2OFhLp3aZ_*qI)z5$WdM#IA`3t(6W9-}m>T6TX#2!b!0)OI$$& zL`I60Twv#nJ2qSFh~XoOduwUfzxOfCDJD#$B@vC9R={r!AEh&S2Bn+Vz@O0e?;Zul z^q8c8QWs4vEKV~YX$JH^5H~$V*id6;#K$Bq6)sLQ?9V)eT~2(kc{S)6?I3-Yc?53YR0|Y&QQHc#` zbx&gS0rhTk-+!;T+1-CH2f5n7dX)!8+x^EU@2ofZ!XD``Ex>U>Ij8@1s}myoOz7G6 zB2t{K4}#O-%Sck=`-FFsueUjYNmcElqx_}`v1hee9v@0# z1ga&9uZB6vPu*j7sDPAp0z#m)e4 z*|SW2pvoQg%6@L+aArwZ9aL6Q{K>Sr!;+>G(o{7cO9YrphFN$LG`4gJoZlxce-wBx z&Q2nHtDl5$MEZ7~I?dHv#CAW`pN|dpx0ziYHu7ywO;uK-rTzWNe2z0|kCjTR&Z(KKC2Ri3FKwqXtdSdE6<8LVyI~1l%x0M1r zDk(+?C8mB~iGeI@iah)`;un4MHFyWFFyYfy)>Q*T4OMN zK{k$Ex9Pl5HHyv~(7}k1mdA+Wr9QFxlK$2@n}3+xIF6j}l@+y4Ln>}(y?C_a=mPxA zg^jhSPC@GE9{WZaIgWkdjP#+|aZOl+C;Bk)e7F8S-q||!FOFGB_z&Szumh7i^wD`% zr7}>Esp3b_6XOc+m;{leCfYlFQ*EBf6_RmOJPB()6Isl}OA?nxxzinQf!^4r3KdOIr54Gug1FZw)>aZrtAj$v zFppCtvUh|)eCo7RuDJa;h8PkB(y{I>5-%wsWi^SoJ`ptB@pb58I zIb=PHS$8K$34aexFWiR`wrHSW+IEIe&sw_ZteNZ^$o*+y@-O@4=DONxsj7Z(uDphU zpCxp+8a$c!RxG-*fI5J8L62>`%Tu?C~;I6Ddl)cI|F|+fN`S^u>Gv zpitaIBD0R&oi6Emli4TU&RmUaUBMv>t|G{4feBL|bP5RD{HWacz;4)t37Sv7e8ZDN zOYcT#li6#oP;a*m5zUP@*8gV1p{HesVWJb|lC-_*1$Uvupq6B=6IEu){dJP zvqj`Fy^#!a0OEv5aQ72NZ2QTgweZ-xg>YtXm7M_%d`K36s-xxq|1UlK`th$r8%%5g za-+F=zp>)Dbg~|gD%kp3{^C>h2Jtv(HtF+HIu_E1JQk1@Rf#wd%EQa8ijT?>nDJpy zk-qhXmwf&iEV%Y!5uN(vKB^E@Gwm!OAq!VftKK2c3})+`|u;RUNT2+ z=ZK_c$dL1eLv5}uI;B-ZQI}@18nOKfoF7V`jfifyj~^K?9sVI5{&AtXvQVCy2mLsr zazPeQ?mYx1yECA%VjYtF?|w1n0l<%k(rQ<;_5&6|ThrCniq>#Mss0R4B(J_IW%wT* zhRE!76TqhBRXScV0OeEZ5iTTJBa*=Fqj<@^Zpp>w|Mr+)O^UqyrmH4+x<%we8{M@# zFjP`FrGrt$Rzl|cwYi8q*d-*ZlQt2e8`rx<&x zr_90v@Tdb+pYymv8;;a6??EPleT7|p6wRC#c9;G8!~dBX>}E&IzvFkVz($GH;qcz%B8PDu0^d zJKyjFWd{j3|HmegU+j7M!`#XLu%&KT3+ER|2VJ!MOr?((<^exn#@^Nf>|2mLgDrlj z9rpwY#!pI3iWXW#uv44U(iz2-5FYky$ZWAgnYd<~^jMXIpw-s=(Vrg!)urw2Ch(A~ zM~n9f6Yy#8-=3;6wtCPyX%2+aA;(HFH!3lb;;&;}aj_F0OB$TuJmiYW&IqjJn z)FwMq!s##moJ0H+Q0&KdTnD@B#LL;1l@qG9&;6A_oi0dG-Vc*c*lY&eY@QAs6L2OL ztB<0FcaTyn{a=q<6u8xwe6s;4mf6Dt3YT_A4>nCisE<`Kp*v&+#y?`YK%5vU`0t!e zu2)pM=Aggzh;8D~fIzf5NNH}xY-o4&y>6Dyl@IxkZzTARwHbx6BKZ0bTh-S1V9mX7DW_pLa<924X z(n~(S;ae|>pseH(i$9MPr3bGBP`p!>^(=UWRCJrRpAX|n>6*b$<^_p)OO>-&&(Xg& z<=Bn4pZt}td8k$WDVxoKCxZQrLaYm3Po3DCa7O}U@%rPFA`Zo`27$l*`g3!vUy*M? z9Hg=va@n{#)r2Ttp?Y%4dBh|Ob6V(PSw6YblXhJ6fMU)z zxtH$C*dY-Be!$5d6WJ$ARN4|!WFwY6k+!M=)gvWr^1YP^6#I|D(>$@&Gq1b!80YKM zB`2l1YA8+K=nxACtOaq{`Th#8JuEi&o&%oJraCLfl8lG>+3$8CO#A%$K%Oot_y^s% z{O-cQQ|*ho;Mwb|MO)-QE>v-EN#nto;-4MizAs14Zu{wj8uC|$H=p<FbCA8_vG`AUf&`N z#!F2-dsKGeDimXFL<@Ui0;Ks!5z=q@{6c)-LWgb}J7GT0V=Jzl&2+*({c<>WH*(1z z{D4|HmCI^rkOMnq7LwSw^!uxTf9GiGwRs9+X!>R@J|(@g+$hN#ab(8-P1CcHK_Fpo z?rvuaZ<~eu*8c-uv_jAGj#GSjj=rPmed;0b%BCL6gKkj9#?+}N6A*hSe^~gm%hjAr z;J5~UN*^ng-*A+aBC$3SSlt(>$@8NMp1rDk>3<(DLFAX@$fiG@!!f?xv{YS z2Q;;^In%Fj(8Xi$r8X$9a7;Xs>Y2Y5Vdz%u@LKw}KRaK1ya7^k#KH7hqxe-M^&c)5 zIPSNL%2<;>YoR+wV2YdEemI{IUIE^doz;kt+K=U_<+J-;9aNmtwSLQqE`Qi~y@g35 zT$>kV`O>~EpDcFJMNKa*L|J@7UB67SH}Q+(HieJg-Z zJLHY`=d({qEtV*uU_nSxVT0*ZV!T5tZ|tuSfT!U3z5l~lC$<=f#mJdROi&5MyT$Cn z=FAX%tj-tEsO=91Iw>-a)v5}C9pGPJoFccr(zO{@3iItXx+F-06<#jf%_$CFRE^+0 zrC5H_>?JhPUt-EzH?<|tfO(tkcoxM@oU@8#bIvK(KVbDSm*V4YI2q!JUr6x?x2_WrZf=r&yC{rvTrwHzw-x06F>xk(L{#~c|kF1bF+y~c?4~H$E5oAYKi{C1IQ3J7^9Q-R2G2|*XN%Q zMDDwQv{QT13T?G%*ok`{MCl&5_8Aq&u|}hcCFlo19iPqR8FIc?vPJ$(`SnXaB!fS1 z2U+)iMFR$9bk~umdP=vIk({gmrO6*qEKnXq5P(QG`8d214}i;Th?D~#L&$A2I~kUI zv&Co5r(gTF%lGRVK+cJ;F;MbrX5e1K<^r6=JbMOc1fMcQi)u^7YNSCC1HqfA;u+OxQ0k0x z!L#TNw|c)ztf^bHse3b|c>^GywER!p+1?vYN-xtp;m_Z~R}3aQiRy||38S>sA< zvX26z8+cN<+ISu@QuliWToe@&^8(_dgj5e%-{D4su?3h4X4+cTwDzVZpz@Ym! z@3vs4Yz#J4n5Wur5wEUsBhvpw!fQR(XN+|1s_d}(i2>T68`>~)dyBDGoImXw<;Wvn zsz}uyq^4yS5EBRFUm=E+ICmil4VPYL88=VQP?WhMn?ut*tqEhF?;*pTPUU zoiFYtJ`lWr|FQi8i}1C5`fjp1dhtPvPl0t<&5%Qd3h$0AuCEX3oAgRklSn!C!nQyA zx5?wdWfy`uG?U#$*S$X(#sCI=+p{BAoLk#rdh@LN?8wKH)vPT|)20&VhEF2Ic%(+Y zwn3{^Kosngn;@XIazj7%M9vus<7D30FFK=zu?>P}H(*thly?;@cRO#>C)e}6nIw5h zVl%)Bulmh6+zt>E7qJpLO?i+Ww#m{m%>|L(W{E_n8^MUK+GTa-h3uOpWXT||`+v{+ z9HGK)1VmD3kz9p7AYPR9+pG`g63nbzdAg7z3g?vhM(ug=XI5&;J7}rn+nks?=u%V1 zyLiYK7@0RgSJa-ApeKrxT_*c#@-&@c2wGze70}^Y`!9 zO5yWuOTckuyYb(+O!^XdrLIi-reqy2)Vi()VWo{)t%r+IYsdmCB*hxLCtUwq80R$oW8m$x91=#73%z-#bYW~SgKpO1q zSzgZf#$_@g6;vwSQ?Y(vz6enK>MunnvG72tE`Q-cwJcL4n3MyX|LgK?H^e9|jA^wOqJF8jeJtX93dh9`X&d7V8qi$6q5f@R zb(v|L55=&gpIZ9Nlewg0W2bu;UbIn1Al&j$`S`v<>d#Nj8morZBoa$M&8NIj>a|g4 z_D%R@1gGRyKQ%gf30jo$oKvIT6-)8KJJxk2XYrl%8Izdbs@ST%%Qg8*G+|AuZ0t@X z=qy1bTZjbouDVZ$+v4^sJiJa{>RpJ^6KAwv#ZZ8<6#O0_9S*s;5gGtyzq)7uQU!Zt zNUj0-w*TJ3gPHRSGN8-;e&cFfj4ciN2=KlJeHVA1IX{!9x_sKPpur*ZtUS$rq6{V! zRIDG@u3v4GG{HuAl?D@?tqe|P$b{9Fckfudp5WKE93trruysSDIjQCn){XLimU7y ze}*AiEz0_DUr|EVnKOaT*=6)w=eo>$s3+}C%fy6+EKKcB|Hzi<|M?ZVc=Zvs_aPh< zSZac9=LW{jqa|dLfO`IRc939X@*qk3LzOqy`f7d}9qA!77o_1)X}6p365u zd2%9dIrI+`$O-YHV~vy}U5Q^JWJbWC2Ec}V2lO%?5iA*>e|H5MmG}YDlzs0j8*oCC z>N6GqJmcbM)?L;ZZ7?KraX|ZW(%jdYP8qP|cGP2Siku(ekcp)lb?jPW5D@eF={@!H z=mww1gOrS25{?yHr@^350PoL2ppV`Zu9aY;p8XN%e<%7W+@p5z_441+{5$?O1D^1K z9z`zjRQKE*wbB3vt9=LVG?2HkpCif$=p2R4R6*h>Z+}GNU0$XG+$K2TvE+ihJPVck z!#)`}y7blzKAvs)$)oD$0Uu|++%nJo5o_qe@aQksb-(lLzh}{y0Z`qPrPoCBF+^G9pg z9m||8sm}${>?`Xp=nXIV)OFAXj%VhxsS53a21vY_w1K*}woDQZ)9jA#5uW~X6CuX@ zkj9zEe`9NO%Ef(x&k~x_Rkag?WS2bTSKi!D&O?rzmQL9B$JmM`(vo(Ps={ti_b0Hv zZ3N#pwQ=Zbwstu9pj(x+UO(M9pLEi){b^&6?eZtvsPDWV(e%~|tv$Tks6{)gh-$u! zeMzCsqF`v+*(X*~^AOMK5y@zmiSHCc$|Oy-ClV>r2oYFt?`Wi+ERDz;17gcsQn>g? zy}UEI0DI2iytC`khM9vxW)Tq(DSO$5e2nFM-jrv}*dKu0svHM=>&E4EHbi}lj|f58 zJ5SJu42rEC+@xv?xyGugnTW(*ispu*60**4LR6Re}LKkTimrc#dxYpq>ojI^l}Z{Y*y;RHoje%Dp_ycqf%M8F2HP1nz~>B z8;x%)HTWh~z*}YER2^*ZXZT`By9xSDnq?!6W2*kn zo1~+(m8lPE5238K;m~%=FGaL+A7GGXA_D6_?6|;Z-20ReK-KXO5qvZdcDJDGRn6F2 zk?8Q!cDz@UpD(@Y4z>HSr73+9FN`tg-|My#27PMn?EgQC-$B_Q!y7zC&w=~xUcg$4(8m-y!z zy*Fy)zXQtnp@jHrqe4!S=s#R@E;voZ2cEl_tB#t#*;D=dL(8khrQfTArfPN_?rEar z5ltGp<8+P!Y5C&cQKLMNoy_8*#VaeS$Y~;YNh&97-8~WLCbe#aeUfE6C*#mEEWbrc zQ!78{l^3qtH^n1`>zdAyt96-hO(%ooYB1VD=n3Q%)kFrEw_|8v5|&10GX7pJa|t=j z0ai|a5CC!bl{bBatQwev;Pez?mHD{!U~b6@^SbcyuRVdhhbNpMtB_2tjkQ*g&E|-x zX0B1c%!ALK5z#9@N6+#v36m28~5|s^=aP*E3wsGPQ8MVU47*_v3ojBR6=9z5Y z`IA_x{PI&7;*Gg^QF?}BbL>pjJ@qH4m!S=A9bX4NH>oEdNN~y^wHfYDuH(xB?jA~` z*{2Wfk{qtF(G$C`UJqU^=U`roY92EnP|4cM{GJ87TA4-KHEsdjnKeGF)H`N^ByWm5 zgHx@F)?g!0eQ@U;IC&78CvMYX^VXV_V>}=OnDwbf#DmVhK=KxuO9MhbHS8Tn6MC4l z&=Q{W+iX4nL@kFwf7(RFRVTf#8qubQph0L3mrKkG*8E+95Yhys#)A5fH+;dYlVpH3H0J_i%oVrX>=v|1pH9TyP!28bZF znqPf7u%Z`qgW-nKWKVL>^ zjRg=r`>rnh=kjbv>Zo}r=xDF)cs?LEwYI=$ff8rsn}66JLsdIxTrN0<^LR%Q7saJn z9{Xc5;RP$8d+G4Wju4BU&ka*gQ8AN!6>I(q4}A!RyJ~k+gD8sBNB3p8)JN?!rve2N z7d}MFw|FgZHez#P;*6L?+#^u71B?N$@#_Q3=`hq{(CN@7J2eUu%z&P^H@> zYV{)h5)RLG@?@>fc44j%ei{$c9u=*YTTz#SZhucs#WF_qhk)e^X0t*yZ;QS6H1IuZWeQieP=*HOO2kzWV@PxB0A$Bc0zjM= z`))F&QPsNZ$lY4XYIJL7k93qN6yRQ>Q^RTpFBDHFF9{?aCd19hU{lVWrS&M99?UM= zu1wh;VsG!i?rUhg0AM6CssDzrlP`ZJEl*m;*U#MV*bIXF9!I7EJ;wU`25z$U1SYYG zR2aUgFL1*C_>|T^Jl5vrJ|=`V2slzjkNgxSZ<+D#VV}BHlD61!f?&w`75JIV6xyun zp>IIO`ZK(D2#(W8YkEby#iiCRFnA5)fr6E?hbiyHOaMYq@I1+|NY)_C8~s*;50H zo%Ojq?1jqR9A}bsZ{a><$%6;(-`gzd6B^3CS5l6AK3w&D@`i<8zV*5Bl-G@SgrW9C zU=XsQ?@eVW$Rnn+xl)ONQwxIgF@~4G`Eo@$CPB8%`-;7Q?P>pqS*M%P$i{CP)xsXY z$UY3vP)v$0*Eq3^{{Jn{=)(DIh%xk}D#k3ZR9{E~<7e2?M71;roS^=2_WN{I&U!)_ zKCTRjKQpDj}-9Hu8PTPEs+Y#r#rd<2p z9cvBpq>_cZvtGBjm}jo8 zWkxIb3P=EH*sx65O$EG!eGal`?`?);&Ym`ypk*FfDJ>r3=vO<&i&t9N9G1BRUogrk ztxG0PM^bUJ0zBZ^D^D@7N1Z3lLTX3)!F<2xxkuMVe@fcq{+VUjBomj{WZED2_=Y=5 zeY9SFP`EUKTTo@Ab0Zn90H`8z5Qp38Bz_$S^gy*-0groe7M)2 z25ehG?uWS!^AjJ{EB&c0%o20G1olnjvegUWTRNq&4pBhgf8s~C-nYHmI*L_|p9=LBq@l{~Tv zpdygYWL3`$cJOq1WwBF!{FZ0Jo)kp7BaNFY!4_@!_j-EGO|gD&o%8HHGqb1YxCv^_ z;!;o2dxhA}yVr0vKgqKs(TozPR(+b0kv{K*4Gy_%f7lEHQpE2i*p#h{?>zoDxSEQA zm9ar88(R6Jj+zF+2aik&`Wb8}e-Q`_J&M*7M8{ReN#nigT+mZo2iZ=Z-vhl_v6j83 zb{}A^;#8hodsXj-{cFi7rH4BHq|NpS`==o;olu!w)oHM8;HjDRI|mYCZBSm#s!DKM z+n%a)jTL&LEe&-@o89*!4Tacq#pCf+&8(NeA8auJgz0+G!Cu4b2A>g&Ou)|F8#e^_ zI{F}2y0=O$prtuS4t#%qLQB*HrPy4U>0#1Sdbd_Ll^CL%JTQh?xb~m#AhH3!nW{R> z)l+O)J6EEn?y04|^`szXV8v+K7SnF z;AWXwG{nB7Q+8#HtaC`=YA#L63<$n&CB;eMI+?ND4L|^y2V~fuAHECHyDJYut`2}t z7Yu;!991PKB)A1_xNPTG=-K6(XgWk#sU_FLS##%GR!oBOeDI#lGI?gFY6Qr%IAyYW zV-6jY9nt-Balwl8eeWWiFwJ045r9((u|GH5qoq2Yi6@gow5ZokW(pX@^%Y8gCGl{} zbu}hVW+)nww2ya12@yElv>(E!<^hK$ld1xO5J(*dj&#`S$6eBWklbYB@CQ4)tUuC9 z=TDf(*GK}bfoesvN(0qWO!}`{kFTrcst{|*mmv_sch$m9e59h=1X_suXyK$qJThUy zs64X4B<_-bG}R7<(M1;k2WsjIFhM1)B6Ar4!xmJxl;~5ElnqW+z(0W5iYSa zDL2m>=Kxl)gsnR*XM}f{l4QvT2V+m;->e^X(>RYpY3(Li^%0t;2l9g=s@25aSP5CH$G^j2~`Lvr!N*HEG*gRNh@{rg*~ zVB}+69#cVjugJ;rAy*5~jx3usNn7npJ`f7-F+S^=1{66l<|?4-=3ul~Tx_;hG}o&k z;pk~0lIo&qk`d-8aOfi}17pG>vBxOd(Z$h_`~Cwt3+l{(;n?o$)4 z$Z)LOaW^KuCO7+i4rjpio|_Y$e}U6D#qawM0;6Usueit+SqQAPnMz<@4yF3*G|9=( zE%Kh~jmN0*sq{h9(r)8l>YBF#n4-Jd-#UB8q~>qP=OThXnhD7_z_y%vR*zB8J?643@Qz=ZA4u7r?8!@3XDzbtbaEQ_$SD58SDw|XC>qsBjiu0>y zVz%aj7QcKQb8xF^q!kT=b?uPwg#=G+g(CXVt~a=MG_0mm$c0tfh_b;oz)mWW)lzTf zNux|>xS^Bk5I(5Rb1o0Tpz_zfk5P|kan4r=;Y zTP&gKx#DJ(6YW1@m$k`9l<_F6s<5l?T}JO}9=7;J`71qXGb^uJ-yBw@dQ&;%re`Iu z_JdHJncf^;GRfqymmliMyz^Mn+y`qHMcGhu^c>4d1-`xHFYVm4*;D~;TG?JPMjzTo zPcdJ2Ffq40mDgFPU;iMHz#+3-*GQ0cSQmv}Ee8_LZ9?298lTvg#MERgVj$+qhdIeB zY}Z}(q@vIU0G5m2|0jfysef|SZFqUpW|LkZt?c{j6Y3SOwTjf*yW^iBvKIUqE#a&f zzl$RDtkBBV(F`wlag)ouQrx-pGh2?{OJ4Fu!}7bc5ZuWfkBZcMMc22ooaFeY&HL=% zA+i932ZZ_rhyrRXn+Y93#Jo+^Gg<{K18$n)h7Ob^8Cuy~8z7yZ;J1-<^{b_B4ENxi z%I5xAyL0Jy7OafTXhRHaHOkm#*C2LuEOy5#k;$e4-*-@jwnV|XJ`suVt+M%1pq^|n zSt|s(&#nGce(6GSdl|@tzfHi54Z~YjSvJb#3fdB1(2&6W`CX9Iy5A#vuJ{#;HkDmQ zGG&<>v6nYnZ#S26X}T+$ktB}kcMyX7M%q4n0wEE&WYO(AJe(u#2J~_}l33R9Pc17Q z*&m%mmlCE4-XVM*swdB8H?(AXPe=Z4PUp2Mu2U;slPUKuK3rgE8){B#yb@EZBsKAE z4~fTSe`|YepIReeP7wR@2582d0MK`OY;$q0N`V0(yLQa2P&hdwHSgk;4B*YYGVj^D z&gkp;m(hn){0bbMm0Li50x^eA`u8-}7G93tpHLLi)j=~K=ESjZ+Ts0OGoWx2-A)Vp z_TIT6FyD;-a4JHb?SWqrQ322;I0yu(QxPmH#Ib5dFp>N2?ww!y`tB^e06w(+dQ7p%sZd6Ef6C@be6T;-Jg1jv*}qMdeCMK2pI`IhulD)h z5h6DK-+&X)ok#tNFo{(*U>@8G#5uaodtlz?fJ`mv<(7##58^o-(UivU*ZfO)V=rbP zlaCVf8s;b0bw1W!s01aKU8G8Q_@JIINVenmi7m`hc%sG9HBSqj=Ego)p`|I@l;5&Z zZ>Ye>Hp>($jNwmx0trAzwl9b=j5co86$S8`-^k_r;-hl?QL)WjJlh1J)|+^B2!$_!sQW?=yf$&;T;%ZZGo*HPo*zxzgfpVM)4Z>!FC3bT_2ZQU_yT7(=`l7(X#N zOVU(Efi#VAgDgWWOQE-lVYap!SVG(qh@SHdgamqT6=KhZ^$j-O4BTy>_Fc^OtCJ|y zhuPDrha}ZMFQ|xG(2By;Ug-`RcEatkJ1z4xOnNW#FD_eq3qV}+v0qn_H@=3CNGkQ(E3<;M zOl>kZ*gKtYn{Dq2s1oqrJPeUC7IBUbme@a|-TpQ;JR|0@yyb&2R)S~bATgI@sSa!&drJ28cd?qB`JiFSP1nY?n)`VXaOg=w82zGMi_uB&DHrGTaG-9irRYM>7G$Ew7 zZ$_vkOR#F561DCyB}pGmZCIX$?a1~+&JY*rU?9N9LKh?67d&QS>ZmL3LNA9Dr2xyx z=mHOn-V#dZHL##fuGmRCpBS_XBqgahOOkM)#}om{xJ?5`+U1dmAQOB|LQ3+kXIn7U zBZHtI6)*+B!1u!wrYS*D{vbia(An9qq@>$uSD#l06Zl4-S>H%9+Eab_ZvQ6I5Q58~ z_S9PqOl;Z&)5leQ062=dFaM38!+*}nET`v4FH0X5eqVuV5|12G4M1eg(FV1YSOm%o zvWRqNC_2ow4^=Hot3&Pw^ax7`paCZplueg^D)Bb-aMv0A=8Uj6;#hPIo&473hCO97e|(3 z5_A48r6Euu6@Q0aHw?)*F-+N`=N==-LvQ>GCJN9DgI>qWpXahwZZii6g;*9KTcY_a zi9hc(v5qfh0*T0|c#NaR;j|N6rvBP8D9g%x`T6|jfHAyyR5XbH>ZSavTfllbxZtxc zvKG9~E;eJEU>CHM=F-cn!#4zZm=m5{|2^NFvn51op#b?}1CU{kpfrVFePNhAHrq%5 zL@{oQ7erj$8KS=f@;B;!A_D|8$5?~HZoey9BlM_*&y{XHwL)+C+>2#W1!Wf8s2Q=R zFbv--Qi-fNs&Sc+EuC!gA!F$)rmE2h95xBSLvHBrBw(}O2g3(-qyHM^>VhPz?t&_5 z=kPnN2OzY=o_KOI+Vu^G#uBl_+54%mc1-i%=jAlMK44_-D@?kQeF<#B00;tU=e}TQEfEH__+mb(x(v4wSrzA%PhGs^khtwVc zR0c-Tg{q{0?tBapfP!i6zaru!jSx>uwbX&O3!ye^=u%<9h8~w@`f*1dn3hCy^%Hyb zk>CJ2>;tmWlEY8gox<`|NNU)NSGGTh*_Wbv`n6bR0~WvFtXYB&cEFhHCDkqXAPj-S zfEX=J>j_)U9*f`Sq!(9g%~ZL{`p>1v+uzGvLo>4 zd3|irfpt$S!bCxO-wkh(q_ZE=UR-_YzxnAoa_MQt?zvUk60e z9+B|4{BRiT4M$K=d&)!oSV3R(E?Kj=sRsYSh9KGUEq_cahPW(!tPv3A>EJ?ZGX)4N4D}r5~6{vfm1ho7VA@MjeqJv zS&37fWn5HrUvLq3=O5|m31$EasRR;^Pv;G${k0mTyXt%^BY6!;13O2l_wftL5yUUd2SgPbQpK3B6XMb0T(7JpRYmScbTg9U6t$ba>R% z$gQmWU%JwP}_!b3!Fz%SZ7se$u$0RshUk9gcgcYjq zY0WtXMw_d;EVKt5@PwT5Fs*n&+|9*J+7)Gd4Z?kg7s;?r&4ntm83xk6ERqMK(XsHyInUw4mVol+kz5OisMsW3mLTEyME z6SEH~(`Z+qD~*BPZUDix1B45`=WOYKHb0%vB*kc@Lv`!Ag-}y0jo}r+h^xUv)cKE_ zcheG(h%#ay`J)Kvw*UxEj9+=&XTC;hIX<^isZ2;>!%qiiwuw`ypUu&vx?v;!Zqf3g z-}d?TPJ7!1AA0a6_b1<*u?<>D0~Qh?y9ZxsyWZF69doHCyQVcF_p3-bg5yLQ7tnu; zhDd>;a0lP$EkU&^h-B|2nb)C5RBz{YXPpZjp&4|ug~iQ{v<=QSpYXl z1*}v*GF2Ph6`hdGQ8k&K?x^&$Kl*n(kf?U1;_6hYqrVfeTGP)qyFW*tJDc9X(tx@6 zISSk2IYaBY_oldguCac`=()_hlm>kg7Tdop!J0~5!R`4pKhQdi-72F@7NAyAxHLDq z^47@TuG?=&b8bI6`c~1QmE4A{_|06eKK9Y(Y!YDq!625&#G+Y%Ox68XZ z{*$)N4POs+zrnt~v!8&#{wlM|gV@h$-%;v(c4yWzDyY$Vsvqf|)(kmQ^`85R%7`mK zmyt1J4wk24hCyY%LKZCJx(z@Wp7M!xSER2mi)e=7o?`>7l8i&fxO$5W3iStF%d7DL zxh=}2o$&@y*Jydfv~#lp=|G=e@a*Zt0Ey$0`tx2GyYi(} z;=e+;!I5xN2<|(QOem7w^;JM5m16l)Q~1>orQ@v~Bp&?|r{(*%6l=i?)t)wd@lgDz zJL>3Y0X?y|D>YTRr*rR4hI)7HLzfC-Mnr;!ULnl?KEn$lfm`%4(NB*6c|TQNEja4 zHwCP$m%*NWny+fGpx%1qGY(NDQ5D7JsPQc=)eb35Rn%TfJ1v8Q3sf3Kl~GZAbR$Irs|H(;xRbW1jP<3D(!aZvZiG1*5he{_#a5{< zarxo2+xL%F0TyOjE9yH6_Ckg{+}agWYzIFb9CZx;ENB*=Ts6O=!|o2 zm3?l~g|g7VVC>kOmP<=9w;6>qGrcAf`sej#LMaj`J^4^;I#;sr(D0#l8#Y_Q$&$%Z zX(Y`}{C>q3nU}!@7M4lDoo7%wWir|GyRxlkiBdbQJOB@2l10SvNL9P|2MuWRM2J!8 zZsoE57I^Uom%5tG2R0$iWINDr>H*+XLwL#n$^ZK1T8V>k;O^oqpo?uc1%Cf_9;>p~{=~ zO@C!bw%Vf1Kp+c(E4#=u{a$5fy=;yBiv_Uv>_xg!N0n_wht|JH&ju%jY>U$ z6b#vGe`cg+0`^P^YtpPQ@#*(f2|l>`@VLlbVB9FDqwY7h?bo zGN2kgykjtjmsyz5$C^P+;L@Jn$MX5=Hjt7T8=GC3md?vw`gcKzg%ng-F7OTFP-;R6 zYRTU4x$js>Ib3tw#dU|6^Y&UTou@IeNIyeM@_@&YtCGvrtekVEtS|rooxYj9uJuM@ z>qGSQ%tZAMom08@*S&E?gD=3uSOeu4hM3POtx`q7i6Rbn|$-}t(*-=pz1ZKrsH}lN~e!^S!=aXtsU~BB4t^kAXB0#%+^>1r8 zESjDOefkW3LG#4A`TT`h`P%}yK5y=s^rBaozy-cr1Q`I7M*zYFDiL5KFp_MSPW4Gb?BH2CLaXb_T50oyRVXxZ*+UG>9_do?i`gI; z5QnV-_MMjibso2EcO8H5^A8K?|4{XnQBk(v*Ec0d4xxY`-Ho(#>rgV%ASm74ojM{R zrG$jQh%|_#luCDZheHn`JuvU>^ZS2!KeAklweY&HbDh2SIeUY>*X#95>Q*KF-1<4P zP$l>cNHTB&luGm^dVSfKI`?p|Bbl~}?OlF2NaH<}t-)-T=Jwa zIyTNz0=6!Acey(=U^HV+2v8Cs`uQV4i?G^|V6^N|6|wbX7c0%43!$wsq!XQ-RP`#S zK*`tmeoicObj0fyN(9o~i$P0=9o7osDAZ-n5=5=o7gL?;7u65NOC$e4MzCoInF%tb z)vY%_+|1nn_JZ#tbokGF=Wcuh=T8v==n5CNV5x$OV!K+2*v*f0Ew%_@Tl8_~ERkJT z_eMr_br6`azC_)E#l6`%W%fwl{kmoN`Q#1(d&AUv4xq#>XD=E-p$RKy(9lFoESKs@ zpwFEaUp2y{z!{Ib9Z!BJ$1LV*4PDM}dd4&<6V_5d5o2!L>=3ZYA!7~oq!{1k=opcZ$3qGg^1?N(Js-ji33%W=%L%R=N2URtoW!xvf zx^2<-E!|>3Gw6T5XZDd*Aq&rrA8+@ehwis?-h>s-g z^!)foIH?&B=+YG%4{hk!y97kok#_LsK{2^M8<$1i9BF+2vtIv2=Q6ki& z^isE3McTPHPSzgN@RSFD3|JTpxIZ#{AzTisUEefup-3WW;xKRz6(zt1H5%6aYgP@g zGM*(VzuDX9$awhNZg{EECvzV=VEH`^Mkl%$RT#T`o~h3>DItXvO=+=>hP_a7!c(A8 zJ=K&@%CcB)aOgjA(vnd@j0tdWauTVN{L0ad`qQJ0fbmcGf?Hyx;OwcaCG}9_(c2>t zb*KJ*s*X|OOA^)E$H$C0*Aa~VU;x@5wmVFG-5v!(uatfTc+j8I@e4hrAAckp5t_Nv z>Kh3hs@HCAJ{Ng=;f(yI9|C=%qIQaIAJi5nAY7@Pyt0l44^+x zIkZ(L>e{)O7e!LwbJAEvHDUP@F@Ia$?JgHnWu*!W11DZ4vHoq6=Im1ZM}G?i%2b zAvTg65lU${&e*G-wU56Qm-8z;lMX{rjiR?)_N`Vv`8|e6B1NE3=u15=8q!~Rz@v_l0P|9zFc2bqF*=jrmBdcLfugmda|&Kg9R+1uj<>Vr|CR~rJ5N#o;JFz5P%~d$E=T#{~9e84`aVb{ky;1!$8G5&DL?9EWhem8#BSLn^!Zw z^IKoc1hlyzQ*&M^c0&nMA3n;r4UxVjBmPEpv-UB}z0gd6%w{tkK|Y;m$*4HM_H+nG z!LS=f=d>?Z;Pbguxy77O-8$w&AUM@I|CAn+aW)K8P1}m{LWJX;#K2S%Z$_Zqru@eX zEXd2;?fbaS0wv?#k>Kh;1z(D$QW%ZeEUq%R-SwEw1gi~#22;srGd2SACMc|& z@r?^q5nmUyWw?sZJcqWKeZCZCp8Qz6XEy{|E!JG;!l9%4PNz@9Dl;t1uHxO=jtnD@vszDOg;TgntLSOad@}gFv>+0<2{u9c75X@--8^vFgEr}NnAlY zzE+@g#4Vn7^67DpV*xOg{uF2sscd}peQClIuYnzt;Wcz4%%Ux6$EegHcoxhqDG>vg zO&|nD1U(ML!wXRJuO5flYrgpl43Yd7rDR6!Pp$ycPm3qu4mXCzYA=i=vZ^xI=L3wJ zu!g@w^=BBBs`|UgFi;FjYM{i6qAp20cFxl?OiS?!eZ+{yhdzXS@?&U9gRyB&X#)y* zRI*Isr2&O=%Q?FDKk-}-uH370i00sV?Y!zZ;vp}>A zN3?%~h0iUIu{|dMMvYEhk$ZrFl0I3)gMFHki+&;Urf^B6lT#470ouD%eU2`PtSo?*Btb$*2urj-6%eXY94<-<+RT4O?fU-GA>c;T zOl`J_#6YBhJXzautZHs+$-Nn}kVMQG*cM%kfssP$+#?{BQDHY_&i~J}`8+q5kt)xc zT#5cY%oiIa6dPy)J}9ogd%E&JXj5#Jg4yvAO|av6#gT_-N(8L2G&|iZ=XJymJ)=IR zM#&D^7q!14PY@-`ALj6@FD(gJOQir;Zaqgo;h@+=!3FW?Eylg(Wg{dh`lx>C6D?gX z7X?2Wbb+5k2QjRSi^`r&(JhBu=iau38Q*qQ-t3%bXMN&3uI6+*`VF{N*4mEJguJOe zdtScMMx;`fOp+nogbM`GSf$Q1ei+#c$uiwuI;hX{`k;n8g~wuU=0gkYm~a0w@tS{p zrb-+2%SyFF<7UchNc;TyMW%Qf%21WN_Ov1hbvd@KBhOxk#>`$*3Q1M$4pGK?9kh^V z7{`P#V@0kIR;;u_CtP*w?E4&_x1=BBY)|*^=4@|j4S%=0(rVlGnCEx<%QF9M^Nc6) zM+;pY-_H*!{2%zBYp>IA??TL~qHq=VYOU24f|mSPMDi^g!C#z)m;CkmS`PYkV1`G8 z_c+Jv78z#1XGd9Y)#;)K39gxjK@6L)R(L*7>?;;{_!LZ z2=w#?O0uTchD&8T{nK{<@I?R;{$2;&UxYPue|y_ao?4L+|Fq z5V$eQC=g z9E7BhDeUWQH$jIBu*eO-{S^q39b6jB6Wh2^b4(LJG?sRB{$5U2ptUCN+J|#x*Tjs)0MDh>`!`mzr29@cNJ?s z*TUD@))e?vEiN0EFALf4A(rw}(uyuGr(*(vFrI51!;1jN2$$bNaZn1RBD2-ifm0ke z?HD<^p=Bazh#X6)StgvvLZp1X#CfuIvA9-BbnBAbC)UpV%^za+qbWJBozUbilz|5Y& zo2e%4h@a<$eaOamHSW%qBX<2a$00dW?Qe(52$`tOyyoMU?W_7&@yG?ql{P3$xjM93 zMiZn`VSCe&NH<6>W!jM`OZTtoW3ewX8hwI zX!p!Zl0KoHXb7i$)xFszU@J*Iz~fA`zm!_gyt#DNaq>7!0C872l zd~Gjwlh?o6s06|q&cMjHp2cF=J0xgP7mblO-OqhMM>lOu9fT`6>D-~ur@wb&w=NYS z(iIYK8^!zFaF7NY+A4l`#pQ0ap=geDxRQC!exp8gUoE1poegt!3N( ze9YFs_V|1b`mEl4+DjT_A!d>nuV>+LB%||5YxfmQM=#b;L!ySk`Do)TP!{QgurYA^GyWt-YKI(3-P zIP}vh)TLC+V0&T63fHv!%Vc{6q4t*x#T8b|WMH(i<#;FI?c29JMZwZ4Z;CiMyEW@o zU$QZ+ky}zew(`uu1KhW6@t3@;FJtdXJ@4`@YWdAdm4;Lu9d4Y@AeN^scgj;HI3!I3=ZO zBDRREY=#qtDWCecwoIsy`pmYBhKk=V*M^Ge5K_VECK4Io@FR6YVQ$uLWGx}H57q_i@*b>FJIPIYk z>1TDvJ#B0kpc&h-H_GfGqlVQkaelk=AsNAN>%&OQliiODm@Kzkf9X3InVR5T5uLCb zk+#1?c3~$Xxvj{?hw~_&I~Wu7qAx`pI(0=wttCF*H^F!q;-p4CFnyumt4Zq;zNyV@ zr5qz-C+#!y+J@dkG_By%k>A=ydhz>j>Nu@0PQTS{dgt=$?DSa1H7Yx$lnR_HKMCNV zM0b^wjgnN*7l#lF1%(;kRP=J?w2++w#cGR8`VEt++QeW@A28 z>J?Lzq&{Xtl$9ND7k}WyxQfwrsxFK&*>9ZPgTH|=mp^9tMYnKG26Puf`cqz#KoagU zk8P;9kv}l3hcuT1=Gwl*z2tea~Kmv0qKAN_eK?hv$} z_E7?J;C6F0WN|f{+j_cdae4fPgOg+ITv*X5q)b+}R({X>!t3Xk0F0*k=qr}TqL^v> zibI(>*{m1*iTZcIvD64`nccVWJ4w|auiAcd(SO%s>9lt#PfhupX-#}8X6#%)Z+65$ z^Qh}ey3#c4vZYk8apP?$><}AzbsJxPbo9IL+yYueKm`B>usvsfla6s}o=QV?T>*dm zj;B;CPa_lL+q}BF>)aNPrS;1>bg68ECNd-nxJpERXp$>UT;X!Dd%bl7XpN6 z8Ya06nKy7mtTe!v+}c*;K2!=3o-PtBZ2rXgjOwhVZ2CbhF?r)8M?VYD1I1LX26?!K z#ie}hv^uuRMq7CtH*5q61E>=jRJUz)E_i{=gchj&T_E2L%&`m#KRGG1y!yT%E_KW+ zByTI@jM_l(tbzHzq-?0+pSOFK}i0%rEmB-wAZ^rj1m_Ml_l-BQo5j& zT#5nOzl70W6k)wXT{pYyM56CTup}W`w}~pbOyvN{b;=Rx17_e!SX+H~G16k;htqI> zC5hNc$OO=C%#17DdXnfCdRZxf3OFk+x=lg`kj>XgbbT7r^;d8j;gA_&vgW z#Kr037H6frAcCf(Xq4u8@fV|z-ktM{Rt&W|DWkbd-0JYnOB6%94G+PLX4PQw^-Mz| z0T2#&a06Ai^0%gEbn(a{P7cqARuUDNNg6t$pxo8%iw2WiDc`-BTGO0>tD=ME>m0_l z*Z|+$C+eNcE-N~W__IF4M9edG?8p+-_0KM@*my2#Zj16Q&HADs!jetwqW~Apijd!A zk#$FLrlaI+Lzo9j-vm7RC{Wgl+OBB zj}rKQ#@MnR22^K1WN$DmHv03}OPkr#Y80|cjLny_2=M7MK4GutSKcyvLZV~z9=1oJ6o&=qz#5KLB5vBQ zgW7IPQDR-ei8j=+`G+xFvG)TOXP0jR*M71#y}faNG|FoDTIbZdF9lBU{>U?(-BCQ@ z^3yY(XCmD>uXTh6J~`b0((@*E22SPmM9i+aoos-qelE^q)7&Pe9ksDKtE<+)&hwkk z#E*)XPTEbIoVUr$t3z+VxKoiL?d-=P7l*52$f0aH?+Hr)n4V_0hIp{DC|OlfFGDmBJG$Y{v=T+#r;cJe*2Ff*RSI~)>!fTdxy98VC23t)Jzg9}Ev@Z2IQJtNXn z9otfqsVfYvd8c4~PBmYwfcJbH7D?$ux9cyL``L&Z=8A&#cjshtKgs%q&M(Ux{T4*p zAVuC(AZV7LAh+Z8T&DaK&QzjlF!{4DVcDX_cQHym5oGuG|G^Z~h?DP$LnreoeW zc0}zA6>HlJ07BcPl4pJV?l(;01eyc=PdsM@0<=@v8u77C^!1o=E&PgeZ?GX?sz|Gg z#buY@LBso>^1!FVkkf428jqgyn_Wm!3OnCr`dqckuEotn*k$!D8N&=lcfM7Z=9}I{ zrX1FubEVT1>)E5fX@RCa8PCqXivDKJZ)`QZ3EV1ojQuKOPz_Q@$AxHUqRTJo(9d0b#lQ!*}ijUc!Li|Es?-7AG=-`=`W_d7u|X z;4mS!JasD9vLL@^cXt;r$_MWMbuyL&V?YpLfiEbLpd;~M&=M~v7;FUYBG|6)Y*=4` zc8RmCArWgCDs#juF6xIB0#7jS-YvDjdS~PEGby`9=)$hE?UwxyIzPUCP%KUigNC{! zE4V2U9M#9G9aU@%K``5)5TjgR-w3gkxR8i(Na#X6T!5M7dCj7Sm z360?%XYs+y;wyILO}h;HL%HDVTRmEp8g->f)H9k|aYz?UX=XSN14`D^!IMTcQ2Z_+ zXMw2ZqEs8b!xGqetXDAWeB1uQZ<$~2@F&@etDj^c!#3;h?%PnR8mhnYAF^+$S@D+- zBrH~W^rz|Jd|mGLcj?YvZo?caZxIU zki`J{%XF|ymz({^9OH3X-)Slla~-p#cH}N^=Q`F2>7r_pL%74_L&G$5Ft%_G9wWw8 zZs;riqYBJyVWdIpH~lbVT5oSLHMowvY~+g`OgWkJeHmxWhCr)9F2d%V#kIl5i4mwe zwzO5%_CBMtxZW9WJDky3zWwu-lAZI2?^ThPFGJh#9~t(%i%S|RmXfi_@n$aI>y&aH zRkMweQ{3v(O~j~4WkovfGlw(7B2pnWGPA{@eRaL_piZ#g*!{xGcDIN9yzM%I?2cml zI1YsYO}U$xiMrCtbGT#`H+{XLHKvsHFsgjeRs@;n7T0KtOn6xITWH`Wv=vpO^rh06 zh3U+NQ&C03GWuKC8>n|m!4Y!|WJ)(hvEWt4%-Tn}YgnIz$aJ@2z+;YQ1ik0e5=7H} zPmh1F5E|U2N_k+2V`*}V4`{Q@Q81!scO+idB`llN_-6BGApfx|cLlIk+$EP_|40_o zz)1|BzJ7aDV|?lWziUh?LfGbASGU)@Uwp8>MHtjPeX*o47{Sz%Z7-TBL0y^$jdeOs z45)-Mdt&7rPZG^q-DPg@yk}^K=Rc3-iIg%)y=7gi=~U^GQNAXnUphim%6mNjK{@ne zBlpD$Rx<*AaV|5=dy~VNz_@${7B*Ux>GDNZP-B@(%gaZ|+63P>*=GjtR%d%&ihL)h zx3TP49yPd>@yqb{DyT?mt7D;$S&ew5ZT&p~*+|XEnGeMeEJ>Q64ERW?&x^}b`8&O@ zP)UiC*f_(xaIM42_%0d;6(nEJ8p7*GTK@5S(HGRNrjA!odkw75F0HbaQZ&*{%yiJL zzRP4dAwIE1veh2Fa*==Jwf?TFrTVCPAq+hO{wT7(zK-AB)opGcUt1@h8DA8|G{cf+ z#!}eOA~qG6z|SwzHa{s{=ORDrh16+SIKL^nx*0OrZ4KFl#lmcV(WGc3u&ljc@Rr9A zwDXgu+~Wz)zP#xO)ZVgXe5a2Kf0{)|$X&BT5~H-S#0oS}0g|u!%OFaB^srlY`$PX+ zGGsqzwN4Pzi!22=^)T!7XMSLXOIo7eU9XF@9s(5bg-9&B{UGyhtsvTA$IFL$;ztUuvJJ-fgREcPSv+t3RK7T22=&Fkn!FV*J~W4hmq#&eb)%Zden@K2V(_pyY1Iq&ka?lUy; zz%k8~@xGVjQrX7A%@%E)zHI%s3Qu~q>}J-5m#L9FENe^ynL^C@b6(M}Qi*8rBjRYe z94ORALw9fSETRocFR#c#*C-9mJbT&0rsxvWmDNWVAIIi15iFIb23A7Wu+Eyc0#ePE zx}9C$;xiV$>85mi0xhKBzdp>Oz*TH}3M&afjy7A4&(C9`3#O&)z>;Iiwc{E8f zRC`79$0C@IfY5XB$y8Ua_VOJrt$MkSxrzTsZDDe$)2%+1D4Th8=Sjyo~<8X3leQ?_Aa<&csr0<|(GDpS^yv?uH zrd!z)n?w1g*Le`197VC6*!d!G2$(xGlsZ_i&Z?X)6viwMe=!kAh7X>WG6t>3Kg zE6Os>4dHlr-f91^WzJQ{EjK4~FZvZS(25uzZE$(f3<%k=t1;sFJ=AxM3wR3ntN2v% zhH>zgqSbak4^qbqvllcmOpQ9o+^IV7*QMJ2T=}Z1+TV;E6gox6zqQ{SM4*-v;k(Nx zt>-t3sDQ(tA5&q760e!%Cgmqmepet?>SFE^Py%nd0x@Rk*6=fKR z^gWG`9gdJv) z+D|f^_V59NRJKrTerDUayW>t2EH8-8)qZ@S&;n*p9~~AF<_HOCdX8}BcTc?t-7GWF z2M^3DwE;K$_o}~!|389rVoCmM;1Z43n^BH=zh2hUu@xbL;Dh-}5zM&aNKXR3Ce|Sr z0a^^&%Spb%9+5sjbRJ@^fV`g^0i%Z$dFpmF6rF1W7cY;~^{RhP=^K+pXjWZ)QxPnE zCK=D=Ip(9_e@9iOK5$9us_V$*pKVQxtE1!G8V{L_Q?Qlb-Ir2L{}3y5phz3`WOpLnnkONrDgudC(NRVw>6>z3HK5Wd#CJzaw0geAfrc_$Qi!M%H5FrR&f^QQ~so;^}mapn_{; z#OPH*O_8>jP3x3Pn0S@L3#T$4(JWm1`uTHI=xXOMXV|b3-0#R}Yz(FRH(%Ix1(yye z>>~iGTHVm+IY&g#U~n^D!^mZOqpMqeVe$nf=5JO~B-n+$#6U9-Ls2Fc`S>t9uz&@q zu6H|OF&%Lp?vDdZUb%%D1L1v1d@8mD!dL2V7Kc~eCDr2p17t))%84?4Sm#AMbxE)T zl?aE*=G0@=E&YqexkPyJ-}^uVcD8Ac1fABw&36OS2a4^mTYXp`JAKFf9J!6_pDvy4 z`UIMYYvAxT%u`us=IKe~lpxwN-Y4WLlGd@_o{+-@6`*0Q(pz6d&-*cOUqaZ-?>23ATy3L^`3 zZDG*bmW|2E$ual+^EV@RDPSq6+#Gy1ks7S~6i7$>Q1xt*Z|inN<-|9=cvV zT`Ej$g^Xh6Yq9@voDcq|3*li3)s_Y*juzu>S)~n7c_@4b;NUv6LdO7VY!X~+Vm0-W zS^W6FE+3AVF* z&eU%C$Cq(F*lNR!c^`!0UO!^pd!fEx_{N~%k{F<(j4@y-U$*gzbE`GsmA|@K4x8q$ zU%J|lG`;CNu^Xz`(X7`P`zvLcIryjJ+h%{8-{tXU{YhB=2SLop_IMFy{AUz?+oEfI z02SwOF{aB*I}+YFoDbXSvaMl{b)kRu%=js@09N=|%M^0p6+;fgv%THi#*ZwXyS+Rr znng@NdsCT&0!nUR|K;6jmOpy916rTH@9z(X603?4EvJ;3GfcQ-({f?8pDVCj&Gt`Q z7(4iG{{sd8cQ5Hq&d_2^!EZ5^rql~ z8a3pHN>%qRcG6+rW{{XzSg3%IdiXet7awB7Pj+~o3lb1PYbZp11Tb00V~ip*X{hQ# z{(cL&9p4LlA&C-TRz2`b$A4_<*II=Ij?Wr7c4}Y==I)KJlD6|2m&5kc?cvX~}PHKcwx{sV(qNsm1Ns{@dSSGY)R3 z@AK$Pvz}i3kf(B9tS=4jk^oa;7`hXV%1R@@XMwk7Hjuj&I@pML1S72jxe= z%VHxI#J2v{$Otuk*^!-cu8!QyVJ4Mec&%I9lp%1fPUkC|342lKgsyfrj}L&ydZ}$M>=v202%UUIa;A=uk4iFBlG{ z?UXCH#w1QlUsjL%7m#;^bj~^u!(y`@#CN5&qEPE9cjWJ@&OHG3gH9*QD5{srleBDf5gzZ_r|y9>E^SSwPL zQU?gqP{^U-J}#9c)Gjs4u59~x5Cd-$Ybo|&GwpLlprP@-vk7Z-53Q(Yy;?Fc7SMl1 z!?Qfj1340#Z%KpSc4pS@O3vJWhrbE)b*VzvhA2L&1(kXU5HLm5Vi+menQuQz@1@ zaA;Im2|iV2KJ_<1GdAVV@dngA@UJ9sa(wf_$`bF!%bMEM~u^EyRxM_0e^A$TWB?5^%1f zGk-ewIh+|%xK8|9NOcA?sp4eNquk!)IjiTjUh*}WJ;cXSP~k70LGx_k!Yn&Qq4o~t ziDUsJX_TM?R^#k()K^iX*^vWpisy}e$|t#)$~?Qe?OMC8Ol@N}TFddV za@`F@F4+0!cmKyp;r&BwA@+`zYeQAz#q`2O1)lN(EanBNeC(u>_UavO6fhgn7D zg{)~YZ^D>6_Tm1^@PrpT_>79j zc{@LX4u0b5mj7sEE_orLqT8|0gk$x+u8ssUS{>WHO95$d8u@)^eAnosOArh3?>U9X z+jN3su6_q>`F+z$PAPX9oEffK$U^-uyRzKoWVW0G#QU9UyJpND`L*fwEx%27N_r6O zQ>2}^E0&jKRg!sKO7x- zIKrCfsgG<6%sH>9T5RRm#t7us3efWF>zfy*B3!yn)~BvbYDQOH=5%9R2(d9i--eHV z!Qg1id*tTo(UK!+Fy~!bWslP^b=Zv|)Mcz^3~;y8a{~5jh$4%>+ z*(Q46!Jw@ZpDy-c$iVrHF+0`Ut+VkW?IN|nP)J$NW3=HbV*R@ML)_?mD322jx#T$P%WOZiE#Vz;Wa&OfJ)!Mjx>uOe_a9 zJIlIhi`U3?x#5;XEUoqa0P|rSr04jw2$AZPOzwMEafAzxIRe!-YI@j`!G#Y}Tcs%u z*h;bAmuay4qVS88aw!@|-8jirEeUCU3runeY4Z%=2bqVuAf51E6W!7R=_g!L44r31 zVHekxE?4XFP2*d^nscu87KiZHxzloOahAb3X^nrMdxcAE_?>@^Ooqk@>)$>UHX*aa zoyp>RR??axJhe_!aD7EjWA*wBOXyxXiOK{^exIWxivh>sBj{%e#TAR$gJ}9Kq}tJo zfX*w%razfZe`jVcGQs(Owx9N)%Uw?a_&p67(%Mmb&-X!JN9~7-vpHh($uu=Jt9rR> z*z83c((=D;M#5QG`V7`Is8R^vzkGMysEDxx)S316+LC9f4Y3t=@R(w_ZXcS(E1}gD z(6)bqgO{~JI0APNWsX+5x_IGmkK?;d{CIV~$#mqMMDBIOb>Zx7wa9XH#6#0*ei-~2M!aqaIdVBd>spAFLIz5Z8rk%yf zK)2r;z&*Fpx+4D#d_Ee|Xzr#W6FoxmCoP$t<|1P!jPLRz^q4BVP)S7z?v2Y7S&#Rs zYYPIA3P|!v&DCqotY^B|oFI`j@rJ*?0eFX(h)DdswHch1Z3KS@nQOre%0_4RDXU;KYFNGTLkSL~aN(Vp3_z`Xz7jTSBuH4hOS}FK#+% zq#FG*i0;sg4!1tB5ZN^-FCC@B`Y6k7aj+U3DfF)>}VTS6=Rz|>`A8;<$#bRR7aoTn@ zJ^8VK4K(g%DZ}=WYVP#^8d`$?`lgeve}F{)AQu@%IclD0?*UE#g-o_^+T-%_CEqq! zri%DsuXqGE#`x9Dq6tfhW4q0o?LQ%>y{Z_lp!ay~OpOgPgNTzjaStPt7LUfgtV=P_ z;)idY>18D6MLzDhAosC{HSTvknfriR6x58s7}HjN0n!>0Kd3Jzl=-nHVmcZgSo*ek0uF zyBM4(=}d=bA6K!Ps8jK3=2Q#e$sG5qiD@J=E=kEKM6^)Ptaq403UubJ*Q%FxF2Ru8 z8gu&`Q_5fX9W)0oHdS)!dw;kNqQ*WJkoMWpn+s$@G`l!DJ{Zc)UBL`x%gcMXTUs95 zJSa;m`fIGnY|ila^gJrho~>t@X!b+gJ#Yr+J3AHdQo}aaY>bfHE9Fis50IW=)Lt1- z!oih`uRhs^xdDZt{($j+btZWA9~o*TcZpX~aVVd!ZKqK%`A9!x5U8>ssOC6%_G6S_ z3>pZzaPU;%Nh6{$iT@*FHCPRslv*-~^_P$6Q48%S+=+B5DZ#*?q{oIPB^W#1mnAPD zFIYT zU}Qr6qDtzClM&Zl07%yl2Y@u!Llx`t1e^(NHyYa4TrPgq&jM|Uf@XlE1EMc zA+XB3RFikn?0OVmUmIxMui{{hz1xS&t!iV6PhOtm>bFGga8sl>;xC^i+q!#uE%*25 zd0XP*{&oC4dTx{5`QcpYT-=d(wVEWop3BfsDe@Q6Tc2ae2)LcYC@BEwEh$$ALUmn^ z`^3c(a5pW!2fWl|`m!v>WqGeX=~qwNc3iijE?ztTJ^VW~nC=vkJDKT1dCYlqL|g8X ze;)qtbN==3bN;!tyc(wd>VhI*i6(aENDm~qhbthSoIuw-KVXJ8`U#IpQ3Fewv&7Pa z`TSH9GB}EdffA5hZNJWb4*i4ujJZR+*=x~{b6@Y z9pL`y#pjfLsz4bvUgP$Mcc>cWf>na=kgG3Uhi#l%S%lnnwlMagmyqPuzM+@SE7k8n zO2!R0!a*F{?Ysinc0<>8#amxrR8(_&hg)Uh?(d;9p*>=@`A{O-n4r*mQwmj#ss(+- z$hTiDU2hJ(`s{E(_ljX1p~oen2{oVNjmev^fw@uwg$ zuXn`_TA|1euXYAp#RpaRKL0}FY&<%ZPDN_}B_iyW@AcHrszfDC2c=lk2DGqg z@YI(iZxQ>$s9X0la5BworBwKghh{RMVY-(5Vw!ag0Wj3f?^8?M^fH<*KQAw6+27vI z-rwe)(DlBaH@aHJdzr(7Y{%Lg>2hvS_{tOBoR_vz0`*xu`SR;$+p+)RQ=o3$C}`mA z){bHq7U@1to{!C%lG6_jCfetL^yIwVm{Vn@(BfGF0okzIg||X`GTCwhDxgx`jET5L z{W!nuQ{*hYMBV(8ap-av+1C>eDRPh5_nY$`9(e3GOdaFb=Yxts5jU*{k`Z)FUZyo>i;{j z(OWe>t6(h|A+jfPR)2@ZsqM@R>uc$QseQw3nW3MRIa>4W@YRl~?Mx?n$1)c3BV?i8 zKIijAD~8vvDzKedV_#GHLUa+rc7?TKw6A*NNTjZ+$BGmQk6e}w(dPpcmris0XDyVJ zNDJ|u>kH%X>@#MJ zN!4?wd$3}&px3EK1TzbE5Wtm6X`tr<>%ymjm^@drvfJ_j9FAsqeg9s&*EjLjHc258ZO2{BAV^%lu(FXZ-!NB<+pn?Uaj)aZ_aOA_2r6{ zSl4*CH$p8gXQ9pISD5{F!-a8+;F3jqQCB`W8m@bSE083dcMZpQKv57s*5XoF$KNL0 zuD21A?W!Qp?Eg0GCmTp45;e0CJ%u-Vu5A=+fpp|EcIwTT65+0afH5HPDKR=@dXDDg zYB>0~%^x|G^J01XyW#8Xvnf!&Dabzi`=CI~aJ9@`T-RJ^scxex|Z4o z*yQEOmjS=T8C%?#UMTlUgu^B8+L!w}Jv?>65$Y-|ki?IG^O)+#O-=C#(x#m9KmGbV z)kt3oSki#@;`2>=mvd|CABKdDp37aVo-g?g%ZA}BGD(PY+*9g!8mm^|F*s(UF-$_a zLZ(zS{#M?iym|^BJj+xlau=dx5WoNiyoB`;18Hwr@8Q-{nM=QirA-JaK@WNp>#fM} zZo_aJcpNN%@Ov^Y9APFeb0e~8?# z`fsYqV8i>IztXv{HD5C1J})i;CrYwSveMxGHq}=adaMKyX4&A}F)Y@*n!hQe$m{})GY*A`|u9RF>I z?>~){=6`3Ci4m-P^-CKW@QB0Ep_&=75iZZIuXWX$`v85}+6Vor1Lbyez>P1Ljp7s( zCKy=iPlXMO(qReyFbjqWruiDZ*pe?#q?@TT71KaERgiwLHW8^GE*XEc?s& zw29$yN6S5$ha4P5=3%df`xR2_=syt#`$!(%_;GW~gOVs^e0y6xrJ4iGM!f22ex+?> z*zn1h+ucg^@u)IBDe=zjjds4O$`tg(87thX*Uq8mX6I_E+;tta%mT4qhV$@ou(FDe zzH2T|m*Uh*v2>9S4A;>@#FuVuAGl&)A8QIVjqN2;M(AU?4Y`k}8wtqk5rsq2>!j{U zf*<`|6>;^Oo;Phs#us(I`@uB0A3(jc482lFTy9hysa{DMdFuA=>-RgGLB2LlZy9mf z#UfA===_q%r~q;M%`hAm{L?#)o9!oK*6-h!=)d1*W#RaF0~1bhKEx8H#rZm8__+&Z z#RaUf)#;NfspK{|FWw_NlkVyRDNeDyfQKN3@*l(4^G~Wa{&ERM6`WNqF44riYU5a_ zQDl7*#m2mGFwnzpaA)Aj!K`}wiRQ|6BM&)C9nnvD{FUlR1*ZEPMDXknJMz+)?rEmz zm4LCMO9W&)QoF>6BD4IKvwKl+R0DAnp6{Y;`*ybirZyK>4UIxad z)ntXRU!OfOWR96R;LRYp{k?phy&UR*%8@O8ux=UkC}gTYfk0PGyy8C4{wnf-$zEpO zUUZs>`QS)^O{MnA)8HL(fQ-{ikadCds3aZiE<#j&Pg;4tPo+iB>wlMp=pM)^tI($! za6fQPyDjDkgY4a@x@iYJxNl_#ZM_U~8wVN_E?Y6)5ZvXzAsEn!%nNw$Brnv}Y*!{0 z>Ru++8a&xI$!OZz97X{E&adNL3VgV?nIXLDJD(v=SSy>q#4PethoR+r%XgrNWZZVG zkyBu$I&8VG|JK8FRJr}6`Qie;HWsO_@Qs9%!u&frA&o&oA2Ryrw$k>Uj(O{CNq~cn zrzAZQ-GA+O!3Jg}#waN8v3NUWOY0R6X!V|%biK=T_}nfOq>yP9`pzYA6|H!6I{O%K zs^`t~3eno)7j}jJkEp8(i|YNlhi;gm1(i@5r9nCzYLM|zT~$b`iCDv;VXkhX9iXo@o$m&P)pWhB2f8~UY$WnSl~{9)xM zR_si*s@;9j{iPfaL9%DAd85-~*8Dn3YzGuFEv9hK_Jf;x{`BE0ol>{2ppvQ^fnE?1 z|M`L?*<-69x$R$zeybLpHp%9xoc!qHIXfcc%y}`XM)BC<7l?D<0Zs<1qQ#|mv>d~m zU|jk(+5&Gf=+(xl4^+eXhscGnY}abdH=1S%uAvZ^`mZ_5$TjhF&E`ZR#89ijjvvqV ziU^pi{^J6~{_FN0qi=q4B^Q_P;p~6GZU}v7Z7GLhSbpxG3J*Uh9jspWvtL-{&?b!f ziLsohfpip1kBppIqJw4+oL4?sCWaXqlvObC`oYY%+%f=2YM83y_jH}tkQl0F4y^Yh zxQB5;KRjXT38wAfY_joZ9^?GC6D)~EX(p!TW78?FM#yDYJ>3h)%F!qIfKd)=g3Hfl zu)ggoGM0wAP5G#9@`)xIb)Mt77>zsrOD#T@tQ(XIsWt3-_RMD=Y&kUO1h%btS>k@v z%7l1w>9r+T^mx{ceAYc=9b>4-<9%(0+;w(9z$d&MBDB%eVu!wDBr#wT@6!E{%bPNC zn>g_7d<{;6m0F$NYa2x&FW3t9k9|-+@tS0YxvX%)qX0MX{;is@O)Ob{5XK&X5E&C* zOu{@AYpc}$K%lU=apS#J6U_SDkw0w^;^fs-o-lK>BEZ_!uGuD;XrpMREmaYjpFAHa z32vq0mqs&|ObIFguABnI7pd$5tfdG62?Bq^Y7){^)K{?C70VP0rmn#MK`-`us){hz z!XiY!DE@b!s!7|lnB_*xnp6UQA8^N-{YMWeySs!Btj!TfX)o z&+VtR{d2JF*B}R^GJ~3bkD&$g*iw-)mbm>DGM|08IUMPZfr2Um}jQ&&Wclhc4cb(}Oy5KMGR&YKiWVen~ zCTdVx+)r^VTAjfYcrb^UkO2Laq2W|IerL4P4@S}0kc02d;cavaoPWEpfO#Uo18wLj z&j;)RN#42tz73-PGM3BwKT4tOc6-E+!?lIY=kBPH2M7y}Bao{~W&I(`Lkl-mXCXgf zrewh>$yV?-M{5hCBXb4u%*1;mW7NmgM;<>Go`AM=WiRvjVj9LfNdkxzlSs8)w+C_{ zQ~#JGqeor;@KRl`dP%v`ZY6JXDd)X|5yg0M`N)nNoss>vgaXBW z*|+hMw|B7ZW;6O+!@iVcIkyIedP#jxdZi@={uL#s&s&X)>H2Ayv)?LrH-u)jBI8!1 znk&cX!*V~*@_;zkE4lbkoSwHd?4S+|KK*BgKTt2{laHf4MkgIU7x&>im96W^*A5&( z(=0(>N^hrrJi!Mw2glc3?bq9OYHZraoL?31uI3Y`g7xN94{)R{(g}g%3+c4?FB$aI zV{RgV4pKm2_0FG_m@0e3$ST)FZTbwUC=I(;=`W$UR+0T;Hg?hkuYF$79*puCo^?Cn zE$;gJj`P+3FjD|3HT-v`yJ&Gke9V|&b_&g~T)(WzzIeY2&z4Dz%pNXO%` z+4D>GCWqNE`XjD3*HvTm2U}Jr~4s13f)Dj)!0)@+wg*lC_bQGct~(Y{t)3v zd{~mJ)0CvK4`lxNN4v?+|8pE4%VxuZsZja;JZw%WTmjY0jh@oGU=YqgH zRtj8}+>)#(g9`HgZz)cm^PI zy7O5(p^RjW!cb1eWvQDq2CqAin*bLUk4_xc+8P`|JXfQOr=&=T;Z*BX!08aqhZHYM;X-M*7?y`pSQ#4dGfJ10x|Rbxxukr(lVg_G)E}T8 zNje?>BMx0=mDPW@2mGB(i^-Cf{OZXWH+KD25C0bV?Irsi-RnmT9<|xMoYuK9eKRGNFei+g3V7=R5W=1k@Q?_K0swW!}CYVgZrcp6^h*%R(-UA zrCGbmKkqQ1D?tcq_pG{d0sXLpiQ2Db!~Fi2^Kk7C>8u6L?NqM4=#Oi(4#r)`wE*vS zcSKf{-Qv(a9K9W>uifos9^|(BmiMsH_ z^^z0!-Q#&t;)`5o-VXDPFG@_EZ*~I6Q+8yr$-6sl1q7FmP|vrOxyCkFSxBKjypnScmnqqwPxz{lR@g2h=^xsW{-9(cga{wA~5Yj z8HeG8DcT&m630t8izor0@6Ske#d+Y5CztsNBbdI2)f?YGcaW5ku|k|yLWriE7*8EL zxy$ek)N@#AwuZ&<)aDj)y-|}TX0(9rJJJ_7YP^)(;R(Fj#o*aCkH!J?Wjo4&cM@B7 zTy5^H=ICA~Mq#W!2~#nbM!e$yN3ztCe1=k0UuWdMR4vc+zftJ`YSyNHJUC&|`rYEK z^IV9=z*w#do1~#bdXh$=hTq!FQLd?i{&rv@TpSBnjF(JWhWpC9Gi64c-{sT-XM6;b zY_boH7#MZkmv=CN$U<49ynV?HvBCs!`Fi}aHd-+O&tU(!CwP4eVs0PiD*kXqd$*(? zls4;$l!Dffg!dzvqRl5(e#i0k){hzwf}f8*EJbxjDX#((>{dl#3oavhpI86p73!{i zleDtl+`@!u!6%uh%Y}ul%BerSo)(%hi>T11Cby++^e5snPwQMl-*oTv-y|(@wfsM##9y`|`6$Si)1x(if3PL!Y$+Yk}TEgW)PW zjCPQ7w>@i_r$6_BA*kV?q_kq4-DhnPZD1Sv2~b=7hDHyI{9c@J1+Dd#qvD8Z`uGb^c8e0JVObt>#0=;HWh00e#l~u+BGW8RQ#!zgLzm=ny9%;A!|(o(!%@ zZD!Dq2n$%1DqHtNua>HwtDn&C25JXwZ~kG!IE+gUZPu*g^qkL z`hI~gYoox~PfESTuWevzXE;`cdf#(DICGy8T;m=JA1e788{wJ+n!FCMQ@VZdjz+lf_YE9>MReJX5o*j9*my(LG$uJ&WmUdjrSr<_4e=HQ4iyaLE?l`I%s4LzpAHb#f4Oj)i8Vp zk$;Qj@GOgMMcwbTL}?27(?mgBaEud&Dbtr8_KX|^{As!hsU?FS@{Cq4J{MstEt0`n zB<>z8CFO#<)egl))v=8R7scJCvSzrH1E^mHQup3(()a#Teu?~dtquj#*{G^kzVgMT zAxg^9!D8YZQ6$N0)64B{+cMqR?j~mDiu0&7TJHFs`|fcL`p`HN6xXr|I$%xZ`u~Z4K8l z=ZmVUs_lpUba$${t|FQBwQ0BR80;lSf&R!Ht14A(iu8g$olbs6nt?yQzhiiIYt$!t z#cN6A$V2MTVn&;`1p-uxjBW6fAtCAxQu;4+iy2L)l2t?C&-V;=lyC%8pR(gr1D)lg zkR$6-XogJCMeyssiHi(q-ocHB#Az(a0g1PygdfW;XROTKlAfLSm7d-0H=P*GuLi&rYj+5-{t%G4oTsMYAZ%_h(`BQ}N7M2m2%E$bJ7H9N-&#k+Ur z+R+g8;S8@2gNs6p)lsjW=6;s!?MYdKX+3~!D=g|IzS~rswX>K~CnwrfQkytXg;AKG zJEhB22pQRRUPM?!PP){ex}-^qElQ|}Ks-t0V(-(J1vLgDNqkm2!5-tfuL^%w_6wmu z`>#+~i^MIS%V8W9E$rJtoON8Dj7t&UP4F-`Z#-6Uq}N=@*|hryrTcEplNS(MHy>HY zE*?SW8h4~)wH=Kt6eU(ke**7VTv-OSoZheB@fHLjbfHwy0-V0<^RR!RX8B*J@exC) z(bP1!^2x1bJk@(`g54V5r49DgdA?BOR<1k<77qa@`AQlDhbmgz7|ATnY;2V(=C9wuc{8(FjgshVdmuQ@r)i-ug;)sq zCe72M)qkE08CA;z9z2p26uND50E|8pb;g+Xg8Uh`xRZz4m7<fq$;&JZ%m9skXtvQ zNV^(#0zhHnT|YB$)bP@d14ruCr>o@^tp7s8xr|DT_4y;x4 z=>EHXL)P;oFJCG@3LznLi)?F9rGu8YqJXc1y0%3L$Dems;8%?UDcPwHa}vUsMq00i zZOon)EO)OAbVLu|$E{>5_vo{+jfKT(l$fg(CPZuq^R+&eF>-t9-+&*8bTnr{17tWK zU?Y3Q&gPp}x-F#>xitmSm@@Z9S{s&S@KAM=H-6i_D3_J_#u}ZMyq|QpQIBJ|?H&u$ zi|w?UJNH9If0kq&J?D1y7q^X=)SVF1B{aGw4PmHX)Vep3(?t!up59_HbhLbQe8a5* zD^PdoQ7ceIQ@;{^sbx#V+cSA!`Z(QS+=Pb}@tWGekaD`?^gFmgbaa4%L(rqL-`kNq z*sui}i2Et|nc?+X-cJXSF>g9mbT8s1j^0P;Zx$zs+eg1>sVWr1>8KgH z3k6iJ>39FpVffXHPE3EOum~`pG`FG(w%f_ygvT8-`@c}@KbOtcg%_?wHH<)^ zWPbjEGROv;Mcr+q$$5NP`?1rIgyV|ShZ@Y`9D+Ma0nj*&0-swvbRK~tGIX~%sU@9> zg(~M`1ZD(PF*>jIO28X!oA7By7s!$_rOTGKc&gw}SmrIHSensaVPIE@}65p16IV#D&7x;K| z%^FtiGspCU`{AX)xB=b6AD=oz@TBCM5~lbHIWN|I-wz@%{E{qNGzq3)3(5v_rm8Ap ztsD1Vbf;omf@%@l%G6dEk#z>%ey#iaUi()cYLL2sgd zlWCYZ6rXxzlf_AL$x`&d8DJ(@^lRn)XF$(5THHwuBfSp^n%NT|A0#3zt<>|`*%}fI zmQ(lwyP_^geIue(SmJ=wG zU`h34nFHDPQH1>FdGmya!hxhlSS>GC!K)r#PmMmU5RUxir4lxn{cge^p^7&IU3W7< z=;Z4PgKys@8Oi@PY;Zc0Ea(2bse;+}kVVA+H)0N;CgMgwrstR)L{o@jCoA`SEEY2t zK)6Sa#5qk*cA4KN3jGdK0;;vU zsw_CPs22~_$+ekDAx^_<$>nQaCF&YPJI3ltpiu{N_A8!A@yntG>}bK)k4$JQACgGbat4onNcQt8_30OWDo;1^xAvI^tCmYkb>C z_|e$55YjVzLAuu?nPx;&z0u7qC2pmD->Hc0R~}!1h96!dYde!ZO1M0y8w(c`6-QN*QI<7F zdkf-x;3h38c&gG{Jcj+|jRmjqDt{RNf{n-J>@ppP3XfW%A-kLL1gkQ`DiLM2|6n*7 zZcv1_jj=X*7{3ijORXbkTwl-x8rX`bsmMlVIx*-=TgIl4ee;SirUHY5871Tp6!9u^ z1tn=*<8D0aLBHOmn3V+%Bpckwh+D*$J{e6&?V8Hpe1hYY;o(KuUi#2A zfxQ^9=gw*h$jcL*jRaGxpVn!^lb?MR17@V`7p#W(%!gd^&+erOp*ZTWjZrMK}1j5uxr*Pg?PK}K*0(1mf z?o2lNu%$WEo2$~NxLD$^ZRP=2GSz};l}LI^E*+%I?{MUEGKI+=+>{jAh8Nrc9T%7O z=&xlRgY0Dppa=>8ct={WEs}IDhUq+xRYIRTTa_YClJ4i=^=9pOjp}Vu8K}?f{a>%g ztnFaMFB_vzi#Zxu1mvui{n?3KmDMzatADvKok!P)r$+sZgBKLKY82OAhqMMsS2|}u zCkMYys1KtK!P6KBFH33y@8d@)m~PA~_u1db=zAto$#>mYar-d!fo_RA?iEpP@{rB5 z4Ucy3n_%2~zxyJ;?TI}3C@sa|M-OsFc8><`=ock4a2Vezk*W&RmR#Q(mRGg5maJ?t z7%2A4zwDVG1I@c>JIJ6M0cCIZdQuEU_qIy(_Y#9%KP1;_qcV@E+YlADGVT^7EM+>v znyzb006+l6?1kKHu(;8X`H`aWb>tbQumBWF6u(p@GHexPv3Iax=Huhg$Bnwio`qQ}3f>C8a}SEczsq@z>e_(D15wDN;sK zk|jP;7OUf+kp$Slb4jfy0ylp7q7|S;^-c1N-P-VH)Dm8&5Yjisj)~GacQRZB5Vf2$4*`0mz%NyhQS`lOipx$%ugsNL z^K7`v>!7r^b`rE#wCw+DdYPKN;I?}B`C{nA^Eo9m)X7@khbxx<*ZfV^fCXgalMzMi zoEc5zdJV{D=K)TY9!EqpNqtZo3E0}&`b+dYR83yJKsY1HHS<``O=OR%lth_Rw6Z*f zg*qIXGugyD&5VG5%oHpnC#20&@`d(mB@$wswezXDXLA{c?0v7QnzR8fO$1ABz)j-a z(pSHYB5{P-%JR!zMWA=g-t4!d<^r>DZobe~gKEpuZitN0lc1sV9igwHM9lU2jzMLg zWGYliv4M_z+^vmRvUj1`($Rx)s~Es3ZTSbjH@B^V_#`B6Ro|Oq_Wq0X|Cp(P#|)1` zE-dIE8U_Vp(?mZN*;98yu{*$ddcnd-hh*=VPqCK4n!3g@Iwx^daEv0>KA|eP0w{N7 z4zCh=S9nc2sBy9p;dxxI`caQg|0V!{%zP24|7*9-oy_Jfvb--&6b@*f1(FSD| ziAo4jT0W@&&OawU>E43^uo51K^|xo#-5`U=juOGN1o(bMGa9EF_2oYEMayI@du2_{ zThL)5-=x()HJgBL&RE&tSoh!!^a}}dD7)A0IA*!V_V?!fhPBebtTAfM87q@lKPdHE z-XC3X={KFK;)p<{3Xa}Di+?LqPNB#PZVl1s9Xud131UV;2|}j{Z<2wI@%|NLL#-Kh z$_;II)(2dmq9g@7W{ny4Se)8#YA6vkf*S?Ogef8afqLwKh%1J2x98T+bcXq&`9uMF zU5c~2+cY(J>gkn=BHOqQTEXpZN`ajfGmiNhikb@_%2Pj0CbPa8qk%M@$$4(04*NLC(o zbKrX(ZQ`|-_-W(A5LQ=sYca)3G$4KkQNEr3g~TAg*_JDn3#gMXaPv6%8dHbN z%&eTqjr?gDd&kvj-frtg?(Y1UHn79evnR#ATkz9pVTF*l)1Mu3+1I9yf&0R)iYAX_ zp`a#Hk&d@;l@?;-qaO@4d#aLRmx9@_o*LFsUZ%)4=`9!Ty!)_-8$F^lHQjf1`y!s z!U&2`wppQn1n5{`+~f-9;B?Gojj;Z{cEVzOzTDLyB(zWm<`R(_DG=ZE{g=M;xWGo5 zwWhrK?$2x@!P4sl;lpG&MXy6EL%{$%TePimdFe6K!}3o&nW7})F}fu2sZRkVRmru} zj{hzb`k2q!(594}Vl1{1vX6AQYN)C?n&8x7g5zWA)h_o}>$usHF z-hEda?ZzkBmSOp+rg3^lcu$J4f!*7>#&Hq-m&lj%*g0CWf_#2ok7zoc`A?4^BTz}# zG<^@^4;<+dRGN)#;)?UWoQo55s;u=%8e%PALx<-vETtH$*>RD`((^_^05OE0UYmss z+rui5nxfXU3DGm7rwCi4=>gw~Ff@(z(c#ZIK@;euZ~vy6U5y~_EiH{SKl|Ba`Z9yzw`8sKCLD{ZR9Cqif1|1XAdC4>!Ug8Msv>sS){y2l zH1VHS7HNP93(xJ&{-><~LcS1RAm#(^sqZ=>3zouTi!mre#o$Od5zRVgX!6J7F!0YJ zk*Yv?c~#jE71Z$&Z8*_F2rqKktgfLdNA0>Xc6C=ckvqvICyv0c27&Y5LJf zpQ0D<0tQdS<~R@Xm)kY%e4a#q<)}*qYJDW9$800_?D*4mf*>BI$ct}N#D9s7n~+1u zVRodo4jw?9)lY2~@DZu=o?O-8%NqxBS#1+wuy(R;9Q{KXW3I-#MaAD>sgZu?2eroTK~EFmcLgxAg7+T#p2&w(fU7FdRj34 z)-MKmtnJ)YB8wts(;m%_@Ln8IL?p%?F~Z?j_P#-j5mof`Jp_`Y0v7N!lt$R)0@hM1 zHa8!8I1x~@5hHWFEZO=N7J=cjna0&U(U}!H9`=K$2dyPw@Vz6a)IRh}8MlG8qt`wb z@je8|{r65r1p8+wHzH4CWErWYyTQf5|Ya97dWBWOMS`(!~G*<(CNNLDn^M@_X9iTP4U5 zNliR9@HJ)Ha9-(>iQT{L88Mb1u!Ie(a!}C5VZlOukJ!0xo$fEY&3z2}FQ( z%4`|r{2L{B>~jFkzdn*`{+F9WyTA%V3^OMrHn5NbHoAasNs1?~r>wR;Q@%VLU)28I z_s#LaVLPa+c@FeN$`57YFE#1d*`q)cUwlSQJO2r5{%Hjs;!745mipTnI@D+{c57iU zF};NDg~aJg+^YQZOW>yD77c0b#dSEsl;pkWrw;EH@3Zsj$GU$-$HI7z64V_FWqm{D zg;0Q|GGD}#jlN+tkRhiEh@VWD(ZTd=pAa*A3{^#6R)p~cBgM|+fU41*_{Z^ZrzOD- zaH%qdk6Of}9dc84QyH60%p)(x32VyWmzg%!;3l+++}^Gn2YyRku1XMl@#1%n(U?+N zLY#j{1SEKHG*+kjT|`#w>jdNQ*v~aH#*u8rm}S84$_;kH8$>?2Jn4jXl3hj9a#W|h ziQgIMT3b882)YGbiEB;OuXWK+>H0Z`os=5<$z=YGg|M zG@~mEKJI4LlM`C1wfo*r3IMo>N~!X2=P+L*%0(6Fqz zhZ5?v01$nyw4Pu_8 zTbBcm?JYB8E2*WsU=Jb9ZR$+Lh4y^Z^0f{`o{x9x>h$5*ZgiS}hehfn=6DKNw5G$+vUVU1clZ+)?X zA^q)ES@J4UCv*stJDrAuC;0d2KP6n*=p|Hp>{rd*Duc}hpUKTr9`eVAnnt5FID#{8 zAv$qqYltbFEaC+$-Af0c2us1jzMySU;17F7`?$TJ@L#AYs=ob9`SF!d#4B%x8l2!1 zw?h(OgJ6M7n|v|4)xhp0teY~`gZp9U7)vg#|+~nan z$yNq&)WOX6D5hd7j0dgDg>*b2F!kS+s0@tjjBG{FQ?2}D0kn0R@+&7|!H2WsG7d1w zhvSLqxSuw+tvX+enQlSpgT9$UC@u%yw#mL%JpATvGyUt`u@92Lh>bXd1(MwFMr23gZ zf@fDUeXsFf*8I)}8tckG@{3+O{KoP@V+C9lYm~zobQ!kci9($76ptPG340feEj_N{ z_(6qi>|j`-dPfRWC#LWrQ{dH!5MiA4q04rknGQnexD*}QjQ7@K%;YNr?24P{@9%F#?RiLwCcAJxHKEd2 ze?|967Pmjdj7j(d(ZkaN{vN&3`DUeG$Rr>V zwepQ-!YeB9XLqZQL2H+Ov5^A?{p0W?<-#()o-)3&H=C{v`PcmTN49x08E%k-Ut6x+ zxC6mjd1u2}VTEG-A%`|8M|sNdgY>>IAbI4X_m*N0XXZ}UXLN^C`Mo<@mgUM2_j>-8W3(p&2J=;h<3~v^!M;w;ZZnK}NyZC; zw!P<@tOGuB(@zRdji)HUA-r$30|E4c22ov7b>`oY9?^&fyggv*3^|HW#1)Hfud)8M zx=&IGZW8d5{IL3~tdI}v@CX0TCsO2IdyUV%xUpYHI|yQ!&l!nv>TO}_M8Ke9#dLU! zVzt!iZJil7%B2C`f6rzH0DlhIVnRLKS0mxb-JXZ0RE*9ew(j6OJ1~@7PwKnHqoouk zG_`TpREm_ndR_15xp@?c zC!-*EM*B2Ia*CiM+Qrl*an(<%VR-J%|)Z)+-*N11gis%fR zt-cvjxOuGCI*|7VM`8z(HJFXRYKBp5Q`SBQt5+vv76WvQf8hOAD5mtU-O5$zmjtJY3TTipb6PBfSh>5t_1GXoypb znF2kr8F~^g(V%|ov6(n+^)2G=<3Mx=GZMyyU8Q`^MVF`6ID6XMU+n-R-hR z|D;xZroO%|LTEVxgPTf-Yi!x;dky1pYyhYvQ@=H4fb@p>sUaJ_&>tL_I3sI8kQ zR_3rdr|9&3i5_2UZ<3`~GK&Y1#{$RsF&~Aj>IN>}XI)%=-T2p|!1=Emq$6>-)XAy2 z9^6WSh;SgE`71-AV(?+CE`jf(uZ~7G=dRcB^@|3oH-!aK@bCMBPV`I=7v+8#WG%Q| zQRANfD;4_UD>4As;&g`%=@9AP_qW$bpN@@wJUW|Z0Zxe+O+EJ@IJO5Ta=o*bH58UN zZ`IoHbN` z9p`CN#xfiF@JNmem#Goo5I-ptIl;Fv^RVJD0hzmrRiITK`+4-*oCghJs!G1y!DUMF zfJ~ZUI=XgU=j4YQ*&@N!LL&9U1PP9wl)!H;R%n%u0XZ^gki`qzMG^$7j*ipMlO$Tf zdFNq@0@bljRmI%{r)(P*}BM8uz*cihSbtx_=Bo?F@n_4dZ^yHC!YSYCq zgXIgW#|w0puY5B8r>pt>R}9RnpD5VY+RMBatc|zBvHXo3Suft%mb-)~f|atrUR)h} z!I+5>>{aho=n(oV8N} z%u#XX8IOLo(i9fXiH<10Y8#{#XV)Lf5_hq@$iDr4(7faa`1c+${A9XZ3}qE0ZW4zY z|Ckt*E;wzSS(fa@t7!FdcbIOrnrfc|AIXa)OMZg(i`TzX_YAYI2md`5zd8DBx0x8C zp(GcTe7jFt4zfgjwznEHo`f-;n|%HGe#&5xJeYywW7$18&N0|1{q*{GeP*u?mZeDM zuk8)92)46*`Pgp*SB(NWW+gGrzU621dFR)sp)d26kJ{Qrp=%NM2E#qoYf4nv=VECo zN{5RWBiY%kQTkd3UI$*|2N;ZLb#IDTCO_02ud+Ia+B3lR`Otxkhit-T=((^}^?>4f znR#qA35hJu)03JoE4{a?NiSek6wvHt=ttxwKP~15lQI>K<3O;AD}CSoPss7_mirXU z<$D*}oczr6esra`1QDI}Kug7$0C#sX1A~VvkqTXvKFN}$2F=Vi1}i1%WMvdljPXI| zI^17au`Pl3j6DY31+D@hM|xM%s-Fz%eNMgd@Ro!jdv7d+ch*|5;}AL`H8o==pxJ`6 zly2IA1eG2>2WFN~2(mC6sb*R8AK507kx$o@5DpDtp z)mXd3Z=E||A=PK`rREKv&fvD=9DsB`xpzJ-^jz(^cdIWLpNV38>1yPPF|u&BbuZl{ zU$;jOoKNBcn>VR>GB;!=OE(L3x0P+@<-(pePpuu^rl+MXjM@v1nXfY?m-*&Q*tYTr z3)={oJ;Wwoj)>YdCO}>tK*`?}=uRh*;mWS4Alv;;nUI%{5JSzSvw)btp}0;hwEKW% zQ9gnv1C#pP_eW@$sFesV{Wr#?5hADq1Fwh0x3yKW^xgZJn12Sk1eitt?7x}Z#oO&> zju5@hyzgmYU2?i?=(0AS@%c^k z=E!%rc*f#)xmXlUCwiU~@yYAc5k9`UFk=OsMoH!gM#!o5Wt-b!rKvq#x!m+Zw>oooqJN)vHJALZFUx~hNQQ` z26jf9R>M?bABR6?A>kW5J*$&%%vr6xZ6hAY3QQTuZY-Qip9{b^rAM3(mXCN;Od^Ad zx6YM8dk53>9ugHMk7yrjq_IzGo<3o9Js*e})tgdjm^dU2L0CX_*5w!<0gM z#e-dSE_`)V{m~-GtMmTPfP}T`iokRUtDAn6{ayyCk*J6pOB_{D0z>@g58wXnRg;s0 zU|~_=+x^0pCyIuQ?;M2i;H~$52&w7bgA?B)8+?N*AJq%5 z#vNsC`1~X7y4Ym?a|+}6udC+PF~4I5a*JG+f`FglBu-DHsLGBeXGbr^}b#FK~3$_K(pdn(c0-^>JTz`gtS|fQfUU4j$veKUAz$iB`y(hVMg_ANqUGu1ZzWONI z@21{w1?K`hyQL3YT7xb=5F~&B{&0UZobH=%)pNxqHbUF5O)ER9J+7&lX!1~=vg;Gq3n>S|1d4!(ruTfRD23(tW zg|wQpS4*RSzykJ);{m8QRgco=lj@q!HN{PJJ0E%05$6=pjYS=nA*^|O!}wl!%c129 zj-J3P^rgrZmc?H^r$o#lXn;FG*JX;Ad;8^TX=RJi4(|RTA-)p;Sn_$K$Ajl})dID9 zEx!8th1rLQ%nmSsZa3K|u#5An`Jla0FIMFe!|~(E<+`$FwBy2Q`aI=d&xH%n>8e2b zeCNS$?fz-32k}a**5#!S54d=GeyfQ7>e2H$@*Km1?y*U{jd<>3>8j-$(RBAWlV)6$ zzbDJPFY9MIR^WSpdzRV`{qH2L5aISKNeIlfyU~Sggh|rWbB&_@sx4dPeJatN94jdM zd`>OzOe>}0>5tSU?}f_LhmBw&sc}w#EyR_b6ep7!V5YS~E&wf9@!%8V&0PV-_2Gp7 z;YryxznI7mW0z&pWL*9=;d5+YZ91O2lacXq^%}*aPhQpO%J~NqFaavq`dDgiOl>rA zPJ8frN-!}Ml(D^fkyI5xN8D0FZq)Q6@e~FYqG2=Rh6e}}aUq`9Zdlm_ZE;7->By+N zd4we2SF$@9EQkksN7(|-K8iwS$lUSg}sMWI%rJqE&iD}kneD@Beh$cj@_Y9;EX2= z=>4JfNq>aVH*vobSc`V*jVbp%oMPwd(?8Fx(h+d2S3|>ptbO%W9PAlf0-rb_X2(Oe zD;daPEt2$4HEXYbq${U^$9YPM*?K=P}3CO(sg*r;zMz2Kvyl)-Bo{RsQ!qWDK60Q ztuf_Xv6$KNuiD7XEx3?OcMr_6-$A^0H@YC+yslN}+STu04j$Pq-gS=&CUlWK!HZvp z@vP=wr~$n4JdL`n(A+)|4heBeZIr_&b?bD}j#0N!7a;V@>PsoujF&PS_iuwK->eUX zfiH2|F?vw(AIk*CTGo1q>h|ym8FwGk*|pYs&%`k)QARIL*b0CmIJdyKWBh_u?T?jj ztp#X3xJ>wcr;aU@o~y$PFP7~+m)rozkx2|ZD6=B|D&+Q9)HB4TX&N4`Gb1Euok*I z!usY(J2<=4$iW9HF{FMT!WH$)nz}VS*kIct!+8g`q(qJS!N68NVB*T$dZ&qng~s)3 zSqHPjRpMNN^$!_GLEa1=CXeGo$t!beS=sK+jHARbD&)pUHtO8e=kLi|9^FXnu1Bn0 zk7~sIA#og$1#n}c+fY#UAQvWuiXp%P_c{f77=(C0Kb= zQE7HS+xKQEZz#Y{Mrfx~*K5Q01m+1{Hd%wUPp`D;@O`c|266|? zv`6y*{GUTIVR>7ECb^i0a00hVp{TF74atVoG>AggED;x4=%N@Ys4z|c!WVN6uh8n2gcfxJdPNj}`K@Fik7vP~tnSmi)8F^rCxzqx5CQ0V>EZV}gC;2Rr;lcQ zJPf9a_J$2O;3MYVpwQ@|)?^DN>HNa)k%@f4J;H=tE9kA<=vBsZa#AAVbJ5#ApFH`^#mkQi(U}$Uu?&4>+yN) z&sw4i@Z9;rTkNV4c6`&M0|ogVtbqUS=F1{<5S=ha-#WZ2T~otmXaAI2b^r(PyxoBV2C_bq3}z-rRZ zq5Y+k8$>+~aoJ-km3WFNq3?Zrd(|I1Pa6zLp7$P)+(LFpgBFuzzool`@Oyj;rXB)O z>wZ~^yl7Ho^u=mVkEm2Ce9DS6(n&hi+6q@^|Lf?i{+AWMAEOLOYjUJ}WIjVY6rjaE2J}Ol#J}mc6sgji9Bp6%-!p7SZ z={(><9K0k{p>i$;k?Cu~MEA?O{|g>JUu!UaOe=!DbAjMzZ7T^@QGVxQ2VmpCnfDa5 zD_>a1dRy}&kKZw?ZXJ=bTaA zkL(R&4XN^2MXxd5I5C1Zp4{hxH&7tS*9!Q`^yE4UKa&V3{;<*tc4S<}5#Wa$_Rlzg zxYDXb;IO1*x}LQwVuy!u*1QB8DkSsynjv@y`&)v-(*j6%7)9da#_qZVcB}QoL}PR* zU1hZ|OXLsJRtAWAoKedMn~8)3d`OjMm&0Mu0wNjtHi9e5n)>3B^TvlMo7PTnQeo!N zMRG^n;>g`qp_i5Ce0U-x_{Bo{cX5{KwK+YbSugvw_lSRIkbCOn#dE@c@JM{QEa@t7 zcSVzotX?@Qds?%sHsrO|{`h{$TXwJY2YGJ&gHNStHJeZm5R-``>VoJ)@WD`Pi>+yc zWCOx#NcRe>yyDY$4ed1`oBdY^wFeZwZZKWP3?$g>dyV zi`HzVe%e~*$K&TUr>%0FEP%ZO%{Lp2JO=R!znwjgTh$X6u!VJ`()BL|;+$Z#JojAb z`~1jiB!m6g0%v|ddXfS@gGM|93_7!lGO{6+S&bt^rVQAi@eu6?lRr>gdv(Un)f*Iu zOff{h?h&F-#f~Yb{6D6?GAfGqk9X)4=`QK+kPesb?oLT5=~Cghv~-7bcL>s5f`EWD zBHgfb-qHU(_uM!8cF)W_&o@7DDT-3f&VqnFHrt$m6N2`VTqKCcgj^6lHxNUSW1S!i zA8JGz8vL$u;j6U5+ic3yZ(T4Wk$fiij%N~Vw@IfL&)5SVn&nlBw>2zVY6@lWs>%ie zkNlIc)ei5;YN<7~p`}mYdCUj`V`A`u?<#HO4+Tn4)O|iz!Xu@kW={-qFr0D0H~2GS zb&r&`n<>(%0MH|-IMu*UhIbsjF0Y{(jU%9=sbJn4huPY{Y5g#-_|z($*&7nQ<~0_R z1syQ~B~&LIK*fNQwgv$lON6jm2LDLFd;;T>9Ck{x6dS!KFujSZUEFqne zOB1l|EcuvsCJ}IUpf*0jIsi^aME_1k>bh@1@Vy6@*X?G1|0)x@tBCjZgM9x_zJcLvVz| zf>uqYflpaVB_y-A%LEx$U=2$v+n*F=;6Mm*R?x|bm)>43!fE@{Rx6Uhi3Cg|;al4R zEJY~k7I;>F3w)&5o*eesm3XF` z^j_fKSAMi$^5xIbAegc0KKwDs*>U5c9wg=s0$;dN1XM>srHb|-O}MHe5Pp-dr&%iD;3vWl{AL|YS~-ZBO0IqwP=H5J9A~ZA>yw{JJ~0C|B(7z@G#|GgZU0wo z9K1jj*6pkWicvK=#C-5SZuMuP1-{@j`Xeja1O01MXrY&0Ou=g3iD%*I(9D@)`;X{5 zoj1iX3c|k`<^;R!_;=l0GO{G5W;YxmeTQccQq^Nf*^*ON}{gpdG9HiWgk9b`1#?3Z1kIt(q%l)(Rj2Tdck)C=Zk0@9Vr=^pBK$AD$|HX^F#u82uuX6~C(d9>E zy-qGn5d!`9T@DQ0j>qu zbq(tA5P=XpjD>yw05L#!&qiYC`d!-!NqS+^a5KA6Y>tTcduy?VlXt85(v_6w_mS9V zHq5ga&|jQxr!wzHR>7*19cS|^Dp++g_<>ROc?{MboHBYmqGhL+>#O!_Pd`z7Fl{mD zZI#zn(r5XDX|Vy~KE*;~Nh%o)j&(+!*7YCQ$>lIZ$BJ|6hQO-OFJV4(<=H(^hZaMN zchoNJ$NRpHMXk?I{uSkWx`ih%H$S}$Y3)bR-@Hw`H63ltpsxvB)I<&$C>&1))HCJ) z0CpNE-MWX8t!ni6bP_lhlLYdI|6Xf0PgQdNZ2$5Z^BGsfGn!s`g7XhX+?-Qp~6D$6!%8MaGB zhcaz4Y^BEw1CLJ13TI0A^wm-AJC-6g1rr=|XWQI?f&G+qN%!qr&nak*o@u4`EPQg7 zm_*O?O#GN(y5Oph)&0+(+Evfp;L_BLiCARr>Q<>t_e%MR z14H2D3><-p3d~2d-YAx_G{yaF^LsDGhzcDxbdCduMn%1!N9g4vN@cX&7blbD6iOdG8>LT3$0KVq-n7HPW;R_XxIZ?Q zb9K7mB==_luEc<2v7u1ky-q8wAKycFSbtJvnNP-Kf+y;KED1t^6V@wncuC=DHBQ`2m{G|fO+cw7sU)E2xa_reGu5-Fnky-sGOk#zjN5r z^Utr?c}|-sfyND!Ik{Pa9-V7XF=kZ1eD7&?V&MF)tqQe8{FbnIc&0A0o`Ri@Q+ItB z&%x}vcC>P@dLyNt!H|&G)T}du*G&v_2*b}EicCpBkxeZ@Ax@O|kDEb{eSQ%CewheI z?*L+n+Va?f|lL4Q2r`y(O@*X5LNPg`k^Q#Qx=_&0N z3t(bYr`Am;z<1?EJFScZXbAECMB#8}tH$>fv!oF~80PcU*H<;Nhkn0n=lwf!w6aK4 z0!pcWB_e77-H$VKhyYD-sP6kYZcA|=xqduzAz4>)jItt{EBo_rafxH>el#iaF;pvHEriT`7HFn`KAea)OT^VQz=s zq)-#up&-;(?}6?-c06*_z+Rz85%5k$Ak@AD_b8*22Kal6qph*|yvdX4)2I@Z_J2M3yGDY)t|;{r|%m_&I(-qO1-F`I~Vr^KQu|BVzE?pqCtJWmnV<4(ui>` zd!MWz+}4V%-7F?fD_#0B0Jjt+A=2A~4;1El8jlf|_Xta9P!{H5z$EvK`h zCjkI?EK=;>?gAsz*fj{7Z+bKVyWTw>^o694s<0!$lN?8yShxyV{u3g!U^|%?_bhS! znx?qp<`>zL9R_AY0V*$Tme0Kp&S3aE13A{TJ!Z8*B*NgnWoQpuHrM9U^D^QGjXIB^ zs~LpRc~0A_IwL{qId*frMd(#|0g|bHuqSwFax?#23UTDqg=p^+Rj_PAW&@w1xr=!; zK-+Tz8AyMqH3v6#*p!af_Qyf}7+?}h1pSBXt2l?&Fo&&8u3Lt=lMz%bGMl(~xp0Ah; zZdD0U|HWP>_l^+7GQLv+Y26HSI7z(^FHI+C0YBBJy-E9%BDwK6bw%X_MO%g2oY7UU zh-pg`^XhZ=wy&J%Y#HqXQM{$^?*AK?FQKuUP{Cvqq)3>^eVU?L-eorj%%eV^D@u~@ zdSOeSvt2LSRl{SYi8q3^f6ezt778M~+{f{fzw7O;Ix)G;D$rTDE=F>GHx2#*l`_UNulBiGx>2*Zl*H)G^xf%=2de0epU*~bNy>~D&(*@+} zgFln@2DVkp)8?-;8cdC7qu5m44uI=8G%ROC??kwMen6+{^%UHC@@7+qgSk!aE=XlA z5;o^(Kf60vn#dA2;UBuU{BP*0BSdcYVQvQ&9i?>(-``mHo6V;FMHETR+5k1{V8-tgci~9xxVu_n>hv}1elG>eN3LT>AVNvv39G{9%|YP3_b<~55T1KU&EE$fa+yLHT8?`NHdk-JoR#{DY(ekCu(3t-f`H_yYxd>wJL{Y4Wdij8F3dNX zWu}qb#rvjc+Qj!mpPBV``{Z|UV;Np)C@t%4AQbZ!GuCIog0ck;<=o?*V9W zUA`u@2HpkvbE^IldgbHQ3L!jMVxpFaKgLWvZusxelYsjODZf=t*{c^ux0Cr^o~b+W zDo+O=f`_^Tu6T1d?iVFaMLCH+lUNC0>p1?7DCIFIS7{|$BJP7T<>f2J+Wd^i#;%6gn{#Q-oDDJlN>z2Ig4!^)N*QPnUSAFNU4Xtbk7>O473r^?v z0<|Q0>g8A8qTsseLJOSGKdts>EZ?ik=h#UI&ZP)9-gEsdQ+3GOa7^dtWD5#krUUa4 z++SbTA$aS)OF>xganGUE=ygNKPreYiJRIpwLaPCwvp2qteD~Uq?Mp4GVh6JAW^$s8 z-1f%drgj*Btt6^3t_;GjSt&_~KdvX2^8lu9)>@oaKxUPef`7W^lQ+mXt%;7~ z6y_2TcygVu>B@Rxh$79*Kl7v;irv~$!!qUe)fV4ew~7Hcm3-?8xO`(}*|6nDPl38e ziqLFWYt7dE9lieFGr?tXYgU~~8Ad$3KncA5g`S*bCfV&Yok!P`q-nVI^!lSyJ=R*SB)P zHz+NB7>NZWYY_%-AWHd68zIm{5sn-0@r=o!Z7qMX$$S3=(_^kfZQ%nvjjhHcuE@&A zW$V&H%pZe=vyN8EXPur%8shRl4fTXO@HEa$MMe4q^E>ZxKp{h5(kNhSE7dvf`NhYW zyYZu!?~ZP6Xl5K@*k68FH-QdEI34c|U3Xr0Alx_fM>vHnULpOp`2FueJLK?kQ&x%) z_vhOKgYWiQYdp#3%}3@b0tkx5==ep*^VJ65s(-5f%~;6)GM2J<(xa53S6;18Eyn}4 z)kiU`rxwsyMl7yAx!lrqhgESw4$an%?s}K>!DbK@9DLP;D$7(`7b0$*DMmmfOrdat zJm1+yT4`%XZhJa!rWe~~AuT?%+v`1VCcPGqaD=_PJb;kCH^)=e4r(A4$-e4&7(6TdBJdGm9Z*v)V;q+ylU+Q^SB5kp(qJPsls^VHlkF*XuIL2PNgLOSJ@?CSU<{sPE5p2 zwo~H`@lj{KWCNC6eT7@7odw9kp-&byG)pI|cqn_o=NuyLgTu9C$Q4~dSX73AIZ-(` zxXhQF;-%JLFHBf^_}#sj=;vaYpi;1pVmJALLZq4V*F6{Y6)*4Dls#W@UEc0+?F{iF z3DJXyY>%A;tZWS&C6^@TiezKOA+o8w;2ym27;PbeOJS+eC~TnJyh-z=l`M!#1XwCy zgZ%|a4M_|on8Vb83Lm3?kB36N!H!!W8?k`Wzbyb1suw|C(Py#Y-5v`iW}VV>O`nDh zOtqvpH|3W(g}tSg&~TDlr|a!54)?;wAuBRH@U^bETH}rUHy@(Jc>jCv9ostr>)_MJ z>BT`(MAo8J#7TeG0WrE4{Y6RsK*(erL~d%V2q8IjyaQ1Zx6!|?CHVN)05jamoA2^h zaO;Idi}iEO#Nh$CuG=95Xd$pf*i<1^;BQU=gYRDmfgM(&euBoOnNi~J$IGBMpWp}T zUwDWyYs=UBt4miMZPyFFt(rs9TM{77qogC4Gb1Z&v^=4{I4IfPO0hV=(KCv&m(tGR&-H&LcMJ; zP(CtQulRJj_pc98;S8neQ4mu zu4|&Vtx9TrxLk~>bl%tDXrdwDHYJQw2M-X==F0M@@r!S;n-C3tdbsuc^!o$6xqZpO zYP9E506E%+L6EDf1f2Q->kd_Y+?wL|>1t;xr@>%z?RslR(>;K*qB z;-bgbrjOdp!VjhyJL2IG;Dre&c)Kpu_vX16O1*#yWO#1X)6?b__qJb$q9C8wN5C~_ zhZV}LMq+P_u1at+Bf<=37Njjn>k9yn1+UUm3LwO?+e|3NR-T5kXxH~08GxS%z<8$T zz%JUn%%e66jzK$^lciX%3%#-{d2cMHetdzRq(RpC-3xE#U zX!0b;q9pNAWIOC{NX;^TfP2cSb3kHuW(Cs?vSWN~{qz$)4U3LXlfYh}nxj_IQ5?ye zh5K}_LH!fGj=85SGjtps6RQzD`abH%iv}KIZN=4yG{GNaNKF0TEA*-q5l(|pnOWsl zZ3BRfO*C_1!rI{j{=vpp$O~Z6aASiJJx)8;mmC>bPN#DpEjgV7!>5aN5CUkum;Lcy z*YlFnBY6V_?we^Um+e#YOBL{!xSGrrjS?6@ ze~k!@q1hXNDZ1~w5W@M{jJ4g|PVu|we20Q*V|QZewdwc#KtM@tgccmw@?rl4Ikku7 z0QTD2lB3~zMeOIWqK0ccV$W9yBzo8Vc{R26zjIl$i{aX%8{9cEvGH-?l?{>JFsT6{ zk&a>#LPAD(Rcu2bJo#JZ_rbO79G8>Kw6tZ=z;Plb!cZ~`)Kf)kcp>1Eq)E8Mr9XYQ zCg=YaOD_HIS@@4M#@ulhmi_*l3!7P)Oh`2I$_$A3Uqi&HlQKD8by8lvHFMN5=wRfe zI>noEVi~1HldjP3a9?OAf6l0=CiQWSlCFJgcH~8ExonFJ%$UIS**o8?R#xDm460Au zOoHrcWyNs!RaSy3edUn?dbm5{&CA$>?b@x*$vviy25`mGkY3` z(WrVNgv{0wV0(;^1H-p%)^c#?Usup+C7)u+_Bt>DCq*c$=*xO>!heN<Ml7P5JYLPMql$ZHqpVydN5(25al1a zO89*3(Grrb&*Q`0)g

    ^^3|cJio!L>x6m9fDMwX6%33ITeeY1+F?4+2T{DFL%V1y5pNy`(@K!nx+fRMaMN&DkLtz19hQ?RV_~BuSZa! zO-C-!ZgD^vkGi^?Xfj=G+cOz{r@Rv(F$I3iEjEUxEGQ@FQOdYTBfe2Na6dA6)Ge;; zL_;(+*Dn@e0<=9s>8qgMe5&x#`wfnc&uNmcuzYz>cDg@VFcp`S7#>|+h-u)j$UwRT zBvN?z=8KvPyCej~&W zhWniv#yC9|p#F&kHb7sI66dr`@$uKCTkCBx8H(u|`YR`Ker6zzg%i8ZnhOeTwpP6p zhm)*c!32)Nqtm&YX$^Ci2rzEn3bTUnx)$uNC@}B+v$)2Hin9ww1qV%?vpsoE?{Ycv zq3#MuO0(it@cOEVNs3gw9jSpjXaiyIL1;L3i$sVGqF(cP%B!rb42~A`ad>8#MWVa& z)sEzC6C&msU}HwQo|D#CFcZPP$~Qg(5fc3EWVS;@);|JkNHQQ>Vp2zKpJ`DZ(z+T@ z)x>{u1y$6NY~+3`>7wkLl{-O)`fH$LUl>zE!=e!ibt(=jC_SH7!7a5J$v+#V8+7V6 zJ$aZeQmRSR#A=R9YZY7?CcTEsSK;nq{2rJ}h-vQ;c>SJt>4w@MH(YTo6HZ9S`G>wH z@>c=ya)!xobWLz!jF=_Hj-MeFQD>0Ykw2Yn1c64_dcl+K z&$ew8woeqkC7qUTTVapapGC)Nj){(z573Xq37zTu>zXrM|`SQ2TStBZDgeu77t~-@0PK8DfoB9G`e(Rv08jwTTc&!;<2B_dOCh3a>#$ zrnYP1i0VAzQ`$(`UP)B=rv~%31^dElLmJ_yY*z`l#1^g}@Z5G#e)!k=H)A+dGrx($ zCl_V!6_{I?ikcOem2C4N+B}bqm%e0Tv#8#EKcdPLp9Y=#nqDVL7 zFb>$sNBvgIJr9`Mx{<)D=;z)S*hG3hv(_zdgMg!$unax|5Aki%fFxgR%O8_d-)L5x{lX4)M^XwT;K?hk>{ZsE(iQ(&O4_58tjy*vNyQrrSoUw+02am1C#>jU0wO%pG?PMl&u5Is?6$r&LkC#f!8ZL zw-?@sAqoFsQg1)l<&llsi4mbEI{(;4@OW#H(UV0THPk%x-kY`kabF!wAa)xcg~{fE|%YbJE6W+1BTkD$&zyJ zka{!afsSK!6{V1)fS_|j_-+-CK$D1ZikuxCxaU)%uBZOqvtqZ`g#X-z z*~ocRyUc4XW#6@h(fd#&(7~A-SwyyR`x<5*TC%>_aO`__3JWeiPe{HinS8TA(P|y* z1xi6)+~^A~wDZ09VAiE?$L7J>GE%_*wSFdTaXH@Pp&pR}rQ4imu9K1Jvd(6M6** zRL{73Hxui0#&2B%zwak6^sj2KSLhkVtTUJ?sKWPmal#*B!yAm~e)xWy5jyz>a9=YL zT=M}zXIMa8a}_EubHXOs7*oCld+(r)bP#z&L(nC6?z?{NQoV{AIb3Vle?__}9%pv5 zY<5~0slnO|PE41QELa2n*5+f*BNEtd64Y}S&%9jo+>oPJME||LlyVF#(_C4?yBHL{ z#L`J^97nzxoYv)n;o;)}ZZeF5<&JF>?%2U7H0K94Vy{?9^5whAn{x0q*)%lW2Z|CJ z>?VV3+}+RbJEC$6xcokjFoGwfh0ki`w-3hcn@Jeu*j1RL^UDkWL|~OEBNBHC4H!l; z9V8a8S9$7a(?ip39u>#Y$ryNR1qOEyFkY3bTByGs{2gR{NKOS-%qM4TmSr`(LBUtmU|zLSLD?CSjrM%+4hA{x-HE z*&6!Mm$)Q#G+5=hr$C8l{#ZhxELE7S8FW{8vcL{lr;Nf`&&-jl8~yX62SM<8Civow zT`XnYi^#uJ8Zye5?qGr9;^N%p`p4GRa+Xyb zz_RKKA#KreI8%7pyVm`#Kh6UsRQHA76D^bH?g*By3=aZ}P$CpH-&rYZyh=WBWz2W7 z3C6)ODB9@Ac{Z+fz})iNh#2hzS{((pG{R(tl};`jkO4~6BtNIh1^q~q&YTOUv$cm1%F07@x zgaNzva74^zZgDP#do*z_AbvsV!F5>q4V1Z21QNfh#b5rmx!rA}AI9_!bVJO20|~0S z2ja0e2$^RECY4GAw0me9p8~XrcHc#Rel{e3MHKc$M}SH;o;*)2x8k_9u#CGdS|qI0 zsOh_?+1o4Gm9Ff=&er=j?&4+wwwV~6AtqTgjC)2t6R^?m62r)#BEa=6-N;FNb@^TWRkiukvQBLt{?PJbVy z)EGbh-rQ0B7TD+lQIA_hngX@oEi=9!?lDDfJi<|TV1do{+tQXBx(p3;KvE9X&CWtA z+Or>bSs~#7#WFKQG$Ri2HQm=JP;jXmo209$F+xAcmk|o0r<(KHa)_glqhW51)1FO$s(6@4R z>ehYL1D5~IwEp+)5um+X$w4%cN+7K=-DpP6CpLeatMURj?*YD1j(fK=0osZD*$CW` zdhF{e`@tHNI2HyxAi^8ILko!gPaDzO@|nhA&iDcMMr#?!X|S)AE&M=jgI}FN;o%O5 zz-2AEf!%J6@9cQoo31R)YjywjsrXj}TIPfEY|&V_#)~Eapj14p3q#mYUVlZOS@~xmS2Ykb&@AeRaq#iG zQ;7<5DJ_rCWh!^uRcGOg*=A542+lC*uCLe|N?d`1neGw3+ZR7Yd#2KA`M9NPH3;8S z{(3TVZvh3$IP{AFX)_QI9cECw`NnZ*#bB>Rw3#5AtT)g9f{l)wI$P2F%kHy!OVwYW z_Phssn+E%gnbEzxuCxETk~va&**?rsF?i zg#EuDLn66<8w#x9VCMU@IpJ*S1aaGoML0RQ?GK(bqe#CYNh)9GSX`l{uVuMP=B5pI z29J|#TKQ6H-&OI|r<8#j3i^AXHA6sAY#(&4%yGVYucEX5YI7%74Z%aQu^DvtI{wDt zXt_jtALw{=!kK{p-`!nh1*pqs%ruMpTTeE*fLxE{h`$t?v%g@)p+-g5G3RN!I{zmN30w{SAe?&%vbg}_%F;b=pW3GOTJvydF|RGVYGJU_j)D~ z3esql=KdwoM0CQ33<^uyidBgyciov?Jt2!|Zao|g7YoItTx!YH=vy;ew}xKgzQ^eI z2y|%*bbwDQ-_i6)jJrfOX22La#$BH#T2q{%38!-%ms3IlOEa-Pw~i{yL9C#;d2>`ENU&9rZ66?z);NHjU9J1gPPMU&~tDSYJtj zF0zRzi31<2Gr6DcCnf^IVA5|mlcIcJE*KOBMyp?Q+eKuzS0-B`62;FlPz+N6`fh)XL zt!i@STTbXK0GdXS_6F7KvZ+(Q{#-2Q+ZDG{t~<)}RMEhnUCI0;P%O~RXr;(|WQPD4 zM?eSAZde3C44{)gJfBNY-CKk-?F2L$Mq` zrxd?7X&}MdZ#X)?(CRqgB$E>LZEJ2t)A?Sh(}^?CY_d#2`n7Om(?Kom0hH^G48(RK z6AS=2q`3NK-TglF&tFKSjv7U53wv(RVd7!h^F6ryOybo=fR>oyA1Bv+5+{PbwQ_&_ zJxC1hJP9C@khhm0{c54jI@-V#l|>2dD;K8Y)>ZuNbHg>GdV=wMAS3y82Xwfy=o)Dk zNlDPJXEkPUni?)*9X_(q+=WKUfhpc99iLv~++DPoJ%&w-G&n)R?=U_!Uap=kz4hJup8{&f7UP`YIR(&()Z%DfMSqWa+7r@3uZLR#qoMs2MBt$0V@2 z^Av|!Uf?G)#B6)8>+xdmSy5vYpgO~MTN)t#LJS$GM>UV8pdcYxG1sTJCiME0hCE&v zlRn)%kj##3Zs@e_uS>S21=Rkym)~Sc576-Xkv&;?lAb76T#k4tdPgIiz%<4pe6|7Q z9@cK^iDec_~+ZM^fWbcz+nkl}DX_`}Vbd4fphBCb-t{5KJAP|9qgV`8uzm5ri6 zoM^RXQ8%%cLh7_YRhHkx%?dnV;4xE46l+=3^Rnn2OY2gDuX786qyl`h=cV+M$XlpJ zHDT12!vF)omLk(VJiJ>_9RDVdO!uwWlbAAwc#{g(ATB~nyH?Xx!yIk8k<-<%(rt}g ze=mGe-C?^=|3hz+naWrhmUL1Y;%Zo5`7`hvRq>4Y%L5ip2PH(qCT^DvYPJUIcssH1 zbGJvrg%JIBq-GPHP15}QEdPAjpkM9t^quIrOjGkwDu8xp_t-Z_Ls1Q~gB*iG$G(2D zlEVT+9sbzL3?F__n-FfYXtz?jltvjM2Y{ttqGI%Mdv&5RSx;j7_}6bz#+pyDJ>Pc>5b9 zc>}HHZ5%1DM2cxa|njl!7d~y0V}wLk^Y}<&qkHlrs6+Pb!dP zIB^Zpg(ALCF3ir8@BRdafpKg`%}#lsQlY<*yKAx6i|!v?YdR-U=t5nKNvcjvB$$po z#B7&7rRxHKdSpcuaHuf&_0Hf+XB@7V$hdj2=fJM(ympLNHAXOZZEGb2_yy^zLEjmD**ST1_QP^ZfWg^LPk3`r>L#S^|gSrT=CzpC+5E%*jA^4 z!UXgX*xV&Sy@#)7om_Rc*7B1K)Iu#;lNaTfo)dY>o>6IZ6k$r$O>YWJX|3Lg zp%|xjP2C@tUszZ~Czp4hC;I|SrA&T>Al-%w36^m_VUOvkh)Yn6^b;@zv5O(56DenDu7nPQ;fioK|3E8Iozok#%DcVPQ+%zDx70mxe^w zU2)^4uhRno{T^+?`Z(T^N0sX5qBSc7{TySD2>XvcSv=48i-iC0^TIPm_U1zKKO;%0 zV^&kx$+#pMS(Xy@2~Bb;yWd;Wm35SGeFffE=o!*?87WAy#P-1t9=nkWwB1aB~Nb0H#%sSZ2$|%JzcAD-3G4^^vf3MH{ z0*|;K)hD- z>h;F!#=79dpF2lczgu}CXrcz{x$4lsNB<2g*jEx?lOTPQMPm+R$C*as#LZcF!I4PhOJhahBb;M2jY#*hP9DZApV(=O8wAI*~ z_Ul(0!ljpg`r=Hz=f!p*q}YF(7~iT#!JKD-));Uzo^9fjW#>f2T+@$^)a zYU}aCG*L2O-M(PKr+xPLhIeMhDU=!D0Ia;R7STc|PDO)rcW!%O55uqr!Pnlo$mW7C zdEvS(TMchFh=Np2KJp|xLD;IC$c&$7y|lV0%N^@YdnV`r>^dHK2!wlGxLg~th+P#9q)* zMT1$3>}MFND~pR3TJ{Iu&Gs0NMtwFt4gomxIyTA-=}`jc4gZkaDpQ#-ztWu&g%$Nn z10nCJyc$P7Yhhg%Cmqsm+IWThRs@{u%h;`#@|K>#6L%z=tXyF!h!eL#UB92X{~S*G zb)q#Ok$oS;1lnUhS7+zsxc|r3{Vg9ZWFF=6jCat~!$j|v+3DzUV*jx#g8O~TpVuD= zuZF<8o%mJ9h)qvq=#or2^1~~K-01%ly)mXn;1oXmB#%X9o%ht-xXH7obBHiNP}1-h z#|w8ns>If;W>yVJr)a}@28X11s_-ovoqQUYHfSqZFbS^rN~*mlFDt(yD1ZOsXF~s^ zN3zOl#q)mUE+(0lik)z5Htt{0%7tu{+&#`yPlf>-I^ziItg`|pmgKZd>)YFq zOePU5RW;PjgmNTo?y7aIy2mklzBD-+-Hcrv+fFsx7dsDzgZgDuJzN(~RvRZ_Q}I)w z4BqOu?S@`d-8Y6LcXuQ}yWzQ*`Gac6legUm=2vD>=w|=bJ2pBa)anzy{`a8+5|Cs& z=Q+_zFGoL#w@qpzsk1USrM;Gog%Pm{mNTDR%KbcI+x4SxWo(Gnp;^_RhUKO+ zeNH1v&~=vU?}=g@)wcNwf3Ypw;Fh`LKN?I;k;{iVsNZHzByB9hD^|qFR=v+10^}u- z6%|LKPqgwlWkm&CXL|Tl4!9S^Yc!yeT#t|;@bu=lq0!rlB0}$Yo^FEJTMhWo#wnsU zG(KjRySYO3-+o}E)79O=*>WoRXuTe7!dg_Ru7s(Q#q>Mtr8dB&+sTIvJgQn1E%O}{ zgoM2reS)Edj2^fk$$x6Wx+Ts8{@)YlAcklHsBdaSlLF3&2ot5Ds>Cw*vQyzqk*gGl zzfJBQZ#y-e6C}UvPs7Ndn5s`U3~pr5U1^1P3nQ1`%c-XGsBGp`mR=R$uMuZ?Otc8f zWmFK`IYe)$2d2eiJC>A`Tn?V2Xf`4EWAXA(!DnCT=!5B>0iE-(JA zt-JphtP>HN%j*mDM!!ilw9c>TyY1>+B>pKCA32ooG&Zk_Idn`xoHTic+vj9K`+ocr zeIfgevnEg&Rn$)#(ioBh<*7Gvk3`nr?4PaUF zlgj+cc%5XCTDm_URd9uwokLfx!%?oSxwgzKkFL>zc?>L?>Ksyl5KRS!E;{ zz(RO`@)Lx|Bp9}%kpZZO+CSYn`aHa{qg-#7j*>vEKIlwAURke199FFv0af1N-i<(z zhMB0le@wsugVsC%-AG=%LG(?g3WlU4q$r0S_SzY_R=(y z`g337N)kS?&#KUsc2hQ7tw$_Eaa~d~68Qbs|Fs_>t!}V6N7mw(Q$pD1CoSDEs8KO1{;KFFVXt~?X{WT%1TopqYpOmW&I*RT z(#a5XeTKrM;(?BAz}!GR;0!~eq`Imc-lRfNHJrN?QkdW z*Zp3bft4Oho=0BDap>;Wws66R5NLMT{!pP?W61xmoq7|~rRj*oS2T&KM_D$G!J~Us z%y~w(ulWluE5wA~5J^eVaIxC7hBRtG6XRd#tAUqHO(?F{pm9j|J0OUzD}r2DFmLt6 zW52|xYG3J_H`0u_^C(fN*XUQ?>eP!EMuaVdsZUyeM&-p|=nr}hnuLD#n->&IpZbdb z=jQ8}s}mm?I8ZyIS@XJWwXvezNr~o@%V$y~%2*irp@$O9O%VN4$OGQ|Y_|_Cnsy@y z@=*QfHJQhC+2o2=gQ!l_mZB^b9MMPpjpAIN25SL=!Lhp>7=eOaRLw8u|&R^%BbTrm&<2 zJ77x{W|1(Q2=N>X3DiXhDRUnC+jAqu{>|-C&}f64)tyvu9ggub|4=%PJ0(#If~c%*~XFcfmzdtBmPnQHkp$)3MgP*~E< zp8Pyu*&6vT@LMDre8MIq5B<}fd+`WuM3kH$>0+|jL@+KMQVtJ6gQkJcZ2cx^szidr zR8qs`Oxb|{qa}}-%?Lf9JZ{iD`r1epxHiptdoQP&MVj93^QBVaA`*pI#MIkt@K?Yt z+2M`ESiS}zpRS5ABB_nJu3;(8oS}khE&(SwU~La~*hI3qR5*QK=l6e@`U<}&yQtfT zmI0JOK)P!P>6B)qbC{u|TR;#Hkq$vdY3W9qp#(&_6b3;;N<>QOMjD2?qwjaWd;fy@ z&3X1Yd#|(dC81q4W1W0 zfBuTe?3kJE{CMf4Bv zlAw9auTxsaeu2~q>?+19Gs=gZHOBtniyZ^J3GFy&#>NA+K@@(1$PPXp*@N<$d=bI} zIri@;mqW!QsZYu?pEy+ru7^~Y%4b60H_F1hAH z&Ra1W_|j<{4Rj3yGzz!6az)zHfD8$W2Yy&$#eO;93ASeav}8WUooSr*c1iox{P@|S z{9tV08-T^~1(N4YabEV}f{R#|!m3o9nOk|UeM`PFKmHu*r&wkl4f&qd6-pM2vRAPg zbrvDu7nX$8ec$p|;3mn9ku^Lg1-csgn^XYx;>usZsBHDiz=a!8$cj^gj`0X(=q?4XpAR^07qj^!pG-#ktL*t0vs04H1}yAeLa|>)NfAo_kTOUeI{LVCRBAwa zA)IF@#lJuq5OjD>Y3*TdeIwyW(K-Unn2K4p2 zk3VXuNUE8JcTK2vttw@P6#C!6dGSl?h!R}IT0rkr@?n$X&;@7fFVK1VFFP_21IGjk zIKVWh>FrzGvfg>Zp;$rgnm%?QupUDT_TXYebnApS9J5ixx8??Pe#B~O-l^&w7ezh`p#PsuGTA`^8j6w3a^ z&W;-MsGK;hevOi;j8|pcK;$e9JODfT|1mIpdVFF$g@JJbwk6_Q3_ztwgBL<$7~%G) zSUrtG5<6{&I*>gL0unTW2Z_c-MH_Ij%B$jV$IlksT|OVqdq-<3%5BN=e`q>s((rxm zz|n{lp^L*iEjzv2B|V`NQMwk?<(YkUVe#4jFR8;YgNr>k>yPf8PhPK`C*`gst({Nd zVNIl9H);*=nVFf?L?%s$s9ia>r>wGft_n%H2nhKhXKR_8$Ag=BK0i5sm1&TdE%5>j-@bIPo6|Ll#f27OL7oHexdsWGw(R&%7W(!{Zeg8ZcJ}5P zOH3?2QOk~1KVXOcC;)s*nnl~=(p-8n%)OB0YrQ8vwH65-;%~wMu%rx+0gHsA ziT-6yiN@oiM8~OB_ZlZs&2n7P#Hm@QY)tDPA<{Hh2=y@tvK)P-g0?I9Q2Heugx(!* zzA&6t&@4w8o#TfyrE|X~oP;IF>9GlTCdQBqa)EALS( zjNKsF^6Rg}+=vs7ckedCzS9tAALLG({$czqeu8>xMi}~G zObS>bvk?Q?$3Vn2ejisZ>ATnRD>`lxV%m2I#wC&?g;AJez4D5qEoYzOjx5>OibKqj z$Vik|mx&&o$sG4!`rX^H-5;J?u9piEev*>(8(N+_i|vPr(|&(n1?^Or@YO@5XFWJN zk}U^ei(JI3f7m@8TWe>>75sTY8EJln7kc?ggpc!K;5|F-p=VR38WFTn&)NJ{Xm>Rr zdF%7TP0CKFU1aio_k=gmsu@*c`}4KOPNL7>ve~M(@YXI=Xe4jg3<{>dwLDy>pk=mb z^VwRJj_>lX{}v0b_?2BT^4fC(ZcCTJ&QXAJN%AT9$p1nlmm>nLn8P!pTAaXBj}D>C zs&Hw99Dmbi;t|*7?6{wLoUHY_WZw7coM^Zxje;nX;P#6+X}OLVo;NN8voW>do>kpv zHEwL-5I-TKF;#v2D5d75kl=w~H|c0(16TWBW;N=6NQzg%WMGHY2X`F;G!T=i&Lv+)to`Ey4^0SP@YBsbX zzBX?Jw(fc_i8r&+$OYGwj^aLntsC&Acf1AA2e0&1X_gQoW=X=oI&h-0Ya*+#HGH>) zai@Fo{ZyNc-V6Y5XtYF+}?KP|sIzEa_UuGwX~m7X#_flK}Uga5yz)ZLysyyKF(0N;w5A&;W9!dpLDaIB;ow5ttoer=GmH>ctrGJ%k;7h^QF6u zm6{FKUr=GR5J0AD$z~PyHOvJ}+ayH@q`;?*yc$8;+SQAAe6Og#Do1#Cu(#tRST=GL z7$~Wjh)F-}2|SP}WcoIV@3Wf0HO~*d+By{S@UoeDid+4^V zjRB4Oa&~9+P9edS)MFGn%fAb3SN^!A?02>kbrG^D5xKaA^F^Ef4~h%qELWZJN(Z`q zfAApM{%MTYh^fA94AG%Mb8`_T8k*WAEhv793oHdeiyVC(@kieVOzga()Sz~MbRtUd zGfOM%F@A&dS3kt%cXl59$wrR3K4zWHXDppy?QqQMHjf1aH6D>`YIokHwZl3mi*$%e z58p=ZzFeY=p~T65?!(xXpe@{JfH=D~u`10r5aTFreN^(7BK_}W6q0nGm-)7nen3SB zBvA%Xu{mm=GW40&G*Ysh=$s#I2I^{>8TqIW5!2d5qD;smrYJ_erHOWwBMBhv(XmN5 z>8{?2J!GqA%xD}%xxPS=U<3kzA`EbPZujWx9$wP#=?yx!P_Tj^$fLv0LFsX=^b)=EIGC z)fHxqpl)%163u~2iMmK*Ykow%KB9qmh1^;@c=4Cc{#QrZEZs4OFPrBRM-#$9(8nSl zy>%!&3Y2~1P4OjS*sIBpd9_$Ui0aN>EeU z6K<$}!sCF5#wypj{75aN6#%!jY=yjqdjP2=QNno+kk8+5P=Ccb1^ZS!m{c;z@cwoH zL)6&FYi#Y<_Ad!E@$ftH7#pyt0M!XF>gs#>2xlb5{rcP>v?YcDELwOgU}kJtiSps5 zQxeFAgH)xR%I2Zvt4!}|-C*Me{UP<4LLPtD((!2+#jp8|=6O~0kNWKWpzM7c#;Y15 zyJB)cBnZt#v-A=bO{*8x7LSKrkflwlBY|U5r#Rp0v6tKSsmIooTpePZWd``uy!0rr z{gaL`qN2$EN?{t3^9viT`ANv(J6ntK)BS?Q`8~~aIKvNYC`%SR^E1wbKd;MkZ+*8) zUFJ6wOyR}ut#D6zY&RVsr9WwmCO4#dLh`@Nmrc?Zg5O9K#1+69t;WWG^wf|G=i4bA zOMy0LhS+0yHfr8Yii>^%sF}FjxPO0nn7hOex!Wigg;j^fmS;vYMzq^r=snw*xdEEi z9O05x&Z*+uxa)zXu6#zonhtQU`SFnMr)&apEEQ+U$4UcDlQ^|0S zfops89Nd>>pB#?{MwSck+L(H!KTfJ$BCo>1oJMRsXdJ}LH(KoNddP-)aI!bxVO(#* z@BQCXqw}!<2R%LHx|M#X9Av1As#(st>ezLwY0qLLP~T8SzHfR@1*@J=yUVtSm&5X6 zj5aj+pz?R-^CsWy;DB(u%l4^BpOUqhg&~>%M^?d@uI;OYFyU)WL^vLx?LzGEE4|}h z^;Yqu2--xXW!tr0$^qM+S#y%VIpjNfO`AaSQ&_T?qZ{6v_HevQ+d8)0UYV?u%!k^a zB-CK?C6Yiq9_@m9Jf^1Jmpv_f?4conR9Ei{5}~SnfNY76*$hY;Fj?1dgtQK^%UT>P=M1 zMA|$H80)hlEa2yVPcCdpdH0yl9KQH57D>PyDk8PiYQBp)A)vw+lnSj4Yj26EMU5J` zbU%7JIP52%07E$Ukp$$mD`fRTu!J36t7xOw?SogICBj9qdIA++)`~BX$@qhauz=HA zGZqafy208bpq#;+?K@~2Tx^qUDR94kIaz2hkSy-DI*@z@39SYayu~EMIaAxu8SqSu zYe$zf8Rnd8O;*AGs!K528&%{t%GoU#CaX{gE_azCS5^WJ!2IBWK4vg=Fhd^M7qo1o z`0pmN+~TXCE-?tLGoE8Dcvc(3$-Z8cta|>07I;7E-TugYm&vB9V@)bfq{pyN-SXb? zgXEmU6t`RIz*ED?+cCo8!>$P$`8E;uos2y`a^miMDcqvyNus5hi<4d2&7k)t)ojn< z*p&h&?S{{gBEek!9T~3N2H*3OZzXNjMj=x|45cHL9@li12k|Ot^3zbIZcA$aDeu&+ zN8Fyk9kdjk4x-^pTs*ycmTyk$2>QMhgk$|}OFk_Ouw@Y@ql97b zay!2j@^Ydz@q1!sYC$r3l&1o`w>AM_%5&H^pxU=$&7V(h>QHvdTXyQvR`dK2r&9oD z7G8(^7mG|`c_DS8(6;lXQbq{r1BHkbML@ej|~HjhnbwB|J5 zX3@0EPxC#W`o@i8&%4!fCpy_Hq2+Pgrw<5)coZ-c04r# zYG)i0I{1E+nFawclUH^3aq2@9S!-|WccMHp3k;VGF1+XifgfaD1M{6W+zZ%Zr-Jmq zlYo}tx>$ksSqeTX7QtmQ`SnNCS?86Zf_J2>C2;cRRC}J;L?i7m{(T(nX>|&MGN#Mc zQxi3d8|5q-X-Jn^h(Af=GgcL7$p#+YP#ra%IOgUv&T0rTCYi7|_=?a@wvgr5Y>Zag?7#rIjxGZ)(yx3AWgfSN)2MDlVJfU>}}UH~+cVE=EoIXig#I-}k=(K>!u_yz*l z3YC?DBvJMa5MuYg@(0|$e|3eS|icGIPl1!JBxURRY7L86d? z>vUe|1Q{;E2lWdiQ2b4&{4HukGsp!nIGq(YhphBpJ_Z|5yeK(9u%U`snj%Oa;k3E| zcIRDkcx&dI;k=VHa+9hZoy|84KviJ=yUPZeCC#AxrjRqyMw4pu;MGHgnrp`~Vj8*p zj!`BmRlB$2H2^zIUP=eg3*u0GM{(DG9h_KeWifET0g)a)e&t%1*ppR!A6az5>}xUg zqeGlUQ35d`_;mP2B<53x0i=sTo3LRsIKzMim^2T`n)wV+B*AmuT~PwoQA?DhW{8Vd zL|xiMu=HA5ttxK+g2hWn)ce(nql~S4;Bt;I zVRBC1fnH(=f}DKx;PUDxN2t!{m{InDv#z7~sJcH4GPwJ(GJR@~Ph@!Hswq7w(uGUj z(!DfmD50^_^Y3UZl^$~w%ZxqjVxgV$f7^Pwzp7rpaX$Z9iM(jxb%LQCsmlFT$!m9q z0YK%Ohjv}40gf%x_=8YFJ2$a=Kl<{pfPB)A_+K~jKQ_jmWwEhoE0`p-7)KIZZm+1o zvv*%J=}HHIr1=s{3TMBpYix}#uEsyIPvPrKhV`E>^$Np6V4>t9JJa^0?$DmWFH#VP zcWPKT^L8(Br-5YIqL?1(Oseffg10u;Khik+{Nm`B<(T9>>&m)DW+3@Z!5GW?Myu-v zM2%}plYI>Ry_AjxefF`pF(beB9k88YmC>nBLjK8hgk`#>@twGkr7D=Vi|qnZ{7nJW z!tmAnbBDHJt=B2&yu{>&y_M_==~Gg` zNRlqL6~UG-J=XU9u343C>D*J$PR(L{FKU{#dK)FFvQ@Vy2pz2|g_F85= z{*2!8p!s2k;Tm_0L1gZE4vQ8te+5FdqXDpk_C0CIkU1eV+-I|)wzihN^JFh%3$J1L zr){&0x|*dC!LdWPq(QAq+>gDBJ&OgAZhDFm4K>yRr8jg{?V#AnKl5c%W1zMkFTCzq zKki`W1|(ZXFwt2@NHpjK$J&G8C}2JsRj@#UnRIpA?Iz;kpd87`QnykN%Dw|kAPD}@ z^;;M=Y=Zp{q|jEcmA`Qf8`R!# zZ;-WQ0578J>@=Wh$Rih=kvQC*54`-v6Asl&T#|OvNtK)I?~m-mGPx9?rz~R?i2jJ& zmnX!70=oVBK}j%d0-b;K`nnP`vMKI*ya6(1XcyK`A%p{N*2kS{9kCqsXN1gR;s4NiBmH#QJ4#u{vyO;R2rT7n~(N_9=CK-AmuW9MASd+;5chBbd;H z0g86|xGZ^;L+=_R#9yhiOlUSGFy>CCyGTykMd!2 z^LPn33=*q)DAPHbkfZCgsMmS2Q+Gavy;7>b&9dlU)4hy9|C;%+WaXSUzy%`~o$@rk zmB^(BDpi}w#Ar4EW+^1c9FoG^=IMsWN3r+OmwBP0~pkEEp*k_wH zGXwT!oBo66m|MW9)a}{H&Kv{%e<Bo^By2ys7?>&6K{#BR+t!M4vVE@RtnW@gCtV~D zGZ8XVCKL(k;Q#4uWYim(+)#a&$DyjWLatXSC2YP@I^=hFaJwYr-a(CV|FJs#9p~L+ zZ3TXm>W!tR#|e zJi}#$Dy{PRuOgtyo{e06{q%O_4_iiY0wkO(zTauvW4u#I`jREb_GvHhheGJNQ>>ip zaX4<*<8eyjo$L1nlh$LdV)G&j2S!*BVWZZ6qD+CXT{xP^r^c>hnR9(F;ZAiZ&t0+A za<&#hR7@;`)qLrwTemNl^mJ5qdMQkw3a5MAH*eDSi|uz}MAmgkZUmd2UW(l99DReY zxGGKn7`}Z-OUKmzBx?;HBBuszF^=S=z*b%VH3Lb~w>+9`CV%`ep^IT%1hZl0>aNPU zFZSlwA7ESyE51`RFDg>Ly2=e4JPNL`y!kM|#+l25U|5a?$~)JgRY5=ig)wAbb>~z> z!yzTUTf2iOmHeVOdqas!+m6bYYGv_jz}+vjVypOQ1JP*Fkz#g zDuWijf&d3j&$_~m@y+gN=E&n(^ZsqIC)=FLqUqIEbQw%HOpgnwYxSG0GWJFV9|$=* z+}L6LoWQjr&ei^LgTZs&j6A~kyyl~4=hnDgd}Nf&Qiy;g+-XpL7&7`}f}TvF^)@}teKoFnb~%%&03q>d7Zu42%>>wH z`y14oyzor!P;%v(U;)maPqr#-&(};`#{wsCHJ{YBsj@LKBxt{2Ul5IcH4kI$X@kqb zd-7cQu6`G5rNvojU{~IpH?yj0(Bg&5HeX*KCMVq&MStb^bWe6+q1Z#QCw@v+GI|B2 z1uWyL&9N@158I1ROBn2%eBqP}5;J#N>Z5Rsk$KI-?1ol{XvJD%UC@!|nhjv=2;w_V zXn|!#*ZcK_hs8MluZ2Tx8vPizK)`BO#|!yl0mjcNCE8!x%70^nJ|+4;W_T~;t6TuL zpykBNM^x&0)CNb_Jfw)p2Y1uK1(y8=DJL%s)PC|PvdN@)++``inl{qNo>8swNS=Z!dAxMg6&pEJ)iDf+ke88rr)X3NW4kz2NRF`Rx6IhG@3TCNZg_%7ox_vQ`5`S`+P>x-mP4k{Tue#Qr zsy3fE_R{m)C~L>FIxHw^O6ydh0&nC^6RcI0XY(!c;#Om?{oN-$>u_rK4g@23_{}4d zD_+}{uXLk$lfOfQ^RC0d-Rqbc`2xR*$Aa&tYDTK2V{qX}9C@6L<}cm-Mx)2!8NOy!AFo@oae#3+ zu0)Uc`xcAP7L6?mv(3C05s)@Xx2s~)YObchwthU`NYjcJ-eva0R9qM$z@qSrG zZOP1gDNP~Y%RwJPu$EI_Vd@K^a$ky~9;L9gy1>PE%d>O{5%2b1w~mbLY;7ywkyETH zmscrU&utlR|BYoxnftvjwBLp$rZYuxlMgF_FIw7_|L^Vmqrr!9P~u@NiB{x*O&Sl< z<8TEXLX#7nTv9^F4URNDnB}@G3%{B~Cb*2I+|Q0keypYFuMJtc0Jj!i`YV+7LAP&i zQwR%Bw!9*}szZul?H8h{LUs;H1;XG$HCpG0{Jmq|OWq$IO>yJTS{o-jUh)@a#+K9{ zR=YnC;>>vUl~l+mo!b)cn9i7s46v?Ql4>!ve;4(`XYLapeoXrh8b%AWMWZ$?_N%2v z{84vHDvN!{%0-OMYCmAL5J+Gg2eE8s;^IZb&u z=elgAZ`zpB_;KuNO{y9GyFA$%XL?tMSL>^pK3WBgz)%LgQS~M&u&{KvUEl5)D z7;g}@Y{6jDHv0(`5e)gshlhggIi|GQpQW6)N;mFxx&f;j=jH%gBsl?|4EmQlTU2Wa z;S~kEEAI*iYkmk$){p4A{!ed&Y4 zax*<(%=cQ@G5HXWhOCUjoq5$&^}t$UMN!qdPwj_{ff+y5|5&O_o_F_9(@7P zEG1>Jku_@QYjC*Gplx(SuyK5+Gl()d3f^EYyzFSMa~k=|{M6zUo6rmkRhNox2^mcr z-kIC$GR*+E1fFp&CrP>T4gaR7o)jG?`pF%~EFQ;>?JSf0r^%Af_%$?fugE%7hKQd)9UNX*2!w+J>TEwR3TbC?5gCI0o-i=$Y*>E z*9~SU+-kYdmirL#BI?%XdjoM>=hv;*UyZMS<(g)H>^&$s5Y4;sqtf3i`x%7?doh<(thQ>a3O)Zd_7G}k9i@(G2#NV(-k{nuwyf9^FWqdeIB<=el2x|EF1RtE z)B!<6v1QMasSo8c=RV**X~UN{;dWy3%AYx=|IUDW-jq*(ZZG!J*z?{0wjOj75<2SR83mBxszZ5<7uc|#4C}~! z&_^h(o2|&w^Gu1iD0>1s7_?E4Y%#6`DVC4#@U32M%6?#zZc(8DExxUuJJJk~iId0) zIjrd1#13>pZX(8bM>y@jmGQF2DA|~2VBO%^Rp-9(<=`g%^0VBSzym*QwC;aV$3vQ? zt*sq+{TIRbsdt<3r^REl=2aEe73A8F9N%gRp^s;NIeA?6)M9sUPn#ZYo&&<`4p#=i zdQdWM`8T`&ND_*Fr}c|rwo^~wwhz&jkM8J(l!B@zBA|st zsRvufAcJ*J@|2(kk_Mr3e%~-i#rBX+-$#g0Od)RMms3_$(Wmk@o4jO^a&+0v-Vk#h z@?-kIeN?QWdIsSo=K0l48t#Zs&OYbTaH_zgWMZmAS&ww-ac?4P3A@6grLOOrpFhUn-Th z0{1cW7hj8afSN4KPC(6XA(TbCRGM^sT5*Ir;GnbM3xYv;E zd(|UjEv^g4Pc(*1WV@lgE~+wFX*b@(i12(btOW(lS`y!IoUqxtqI#VH~- z8_OVjo{M&ODl7%d*8P_(>h1n*j#glAr&gZLkj(rPToG#4lg$n-W>8OrQ7+H0y$ReD zr0BZ^A^R0UPMZ;e6)UH>7zPhN-21NUnqe?PY6P~_7iiE|j`Qfc; zhz@H#!k;L>?0W=NiP2!+0S>0C38&<={xyF|PdB$`Nn0%h#mV7yI5}|!B_4Dmr9_(p z0g*_NTsmlS^KFV_Ds#f&NvXy`lka0eA9|oG!4wGVpa}9#ZnpiZ{5d~XXJ2>E`{1?V z96lXgAv9)3SDN`H&gT1Nae)h5$cG|C;yvc|(z2WpeT_&Q9*6vSf7`!Y_5U1{Qi++> zIxXiSY+%akf`|BpBsqu7SgU0b2^>;9f0HA-iUX)8ksB)Fo3uW! zs<+qJVVlk(1ZZ+Du)|q?Bd-S6w7Q$KXzx7^Z*@nl3w>+5xtRA{=`^9%N(;#-a|C{^ zyvf(Mf#cBnp9lC-UVH-!Ck>H?>vPhNb*c<SZT!{QzF81Lhsy;ivPM)HV{28oUdS%sZsg~?iwk$SmR~UO8yp}euTHX8(tHG+q74b zSC6l5j!dB{j*PKL`>)^x9P3~gD3>!A{ zXeZXmzRu4v=Gy<`SX(qL_5N9raPzaG{mYum!<((H(B)4^ykRW|u4clKY}rWr`2M>N z=wsfps9bRj8wJ_ zPl$N}fY2`-n%%2kRM`|cqZLbU%*$yCn-NO*nGL*n5Or^zufxi`D_ERTZl7c6ix|CgZf1J~J^hv31;FFfp& zY_O%vF#-mPxml7w5?R?OuyBXf0%3wM-0T&y{81p~!;DBcC9!z0(De5NWqS(pcSxAG zBIM!lv)gH`V<5#vv8h_Yn=5>8?NE==g0 zhu_v)M{f=tTyh7pE6hxJ7|-c4H4}@zCd1~0vNg{2{++X6Uot5+V0-NcW@LX$EVmyKR+P7BmVJ6Itn8P3OaXA*u+~W4jp{aNCUzC zdlVyIy&#x&=vKgKN*wX_oI)vtJ6maGf9sb>s?q-I_3e7Wwxf?q@i^$`>q(DAPH~cT zoYX1udOhN1DPQ?hmZ}_m;f{Hwd!I(XPhCO9cl(DaCil_*)wx9j!{=7+(;pEYc=}-t zwPS1r>WJfUf;$vGIX_!P^TUuQjwkmF97mPo>f7gB!pnhJ+f7p@9+uWoE-Y%b3*KwoPqsDUz!5j*G@>K5 zw1ju{p&EML>F*;#7zRz&;PT70a!NfSwyuoJm@K*I++$2B#1}}FOca!gOVaK9bM@+R z+=U}l*1V6Qx(MYVRxIJAmmztShAGkt)wgTSaabI_2flw%**sM4OPgg# zg5#u3Q1`fCsi)s?gw04-QQbrk{PpeI)&0OAZBVH4mfB=QTMhZpb{^2YZAFvx_Um_>M(MfZOVcG-R z@US!Z`#t?C5^zznZt0vC*3vE8XlqP6m!6*9+r6Wi{(-Lyqtn%^PwTr{4|m=$0C1xf zY!9cJPFw|=;i9k>Xx%j|rH5b@e=iTD^2Mns9Mi76+&Aoh0;D^}>oji@o z(9}P~4l(D~T%YF!`BwM+op`_0e-M)-0c*Y8aqB6Z?iI4O(8~#k*lQkdE z-U|-I4tV>56G2Bnv3AAvKru7;xR*$MCzv$?MppziD9ZKV^>pScNYgq%@f<(4LCfvndKK}U%c%1a0w2}jDCnt*KC6m z?n#FbJ#=JXv2&vU2B=3Nvp!L@4n7Oy7iRov(IMsBQ?er=4gAxukafC<=AN()F+4@+ z8t?L{9n{nikz`wO+LR)WH##N}E@Ox9TG#E{43Vmd{A!wMeO=)ZbXp$d!Ek0eJa@-) zcwtyNBvkmC#co>({o+bnFqFY;$6Eal4Fz%YX}C5q%Xrx8J5zxz71oFsUc3L!iR9lo zF&)&;XgS0}o5GPWL4ZwW@mcY_p(d*$v?WuK_NbT&q3>)FJRi7nuU4${2O&U=~pJmEYhB{b&HMw`46x6A9{{(7nWp(S=kxzNMg!goce zmW8tlG5usyhHhw7O!v_L-KPaHHfr3n`8>}|9*%+!Rjl#JP0zc;9fsR=bVjh=ES$p^ zlR}|KKfM;0HR=lr7?ucVH7S6N7pkA>vw2p%KA?&&OFqVOoaa2qlMeCZ7?8)>a5>eQ zQ2*DhW;&UwI^c;wj)8C}IK!-DTXaB)?H^0Tx)z?COBz~Zj{^7A zc^btEUcM?WSGJt*@N~;D1wHQf%U<9I%aZ(Y=2rD6!3g2-To{Qv@Pi2WOcS|7XKNL` zQWtk+D1_EUG>oK&D=G7PdkG%?=D~l5M4KLtI}ql`NlZ9%f8oH87ES5neI}gas;2e8 zl+q}&o>hHX(QXLgoEN(5v8~YbB)u;n_u@srg#*>;vaNdy8uPijS&NdTB>1K|*tEPS zA=gbRc=2pB=HRbR%k5v*mo3XZ`v6x;X52_4Du%0u^)+}Z5fKaDUIZIt>}-^T2eU1y zL64j4ZCcDh`^wuVf-7G!ZJXxwp`iKkUKIJFj|#nFU8fonWoD2bn^SY3W&lqQ5Qz9T zGDG~SYzFj{mID}atk1_q_HZ)DeIsikI$6f+8J^i9+`h{l;-#d>yW$k1^U^4Y@1>{w zM8UjgHvR5Rhwq@8zD?~QQJy!08f|gO*|p-*SLI$Kw$zO3hD~?1!yjGG6pD6_Wul^A zt#Pr*vHmuWtySsyl#U>iXO>6(lFCA7b+|Rj7D`kU{5}x-9q{K5_&5lTvKRX8*P+P- zRaw?w+G3{dkV88EFhYtPswBZYewlp6Syrf7$XeR}UwL|T#LJ7*^4?!z+4%2a?!3j? zd~#*HMrJi-PkznVfMMF}w_G^d?uQc)C7yJ7=c%bS1Utp~|J&88R?h?5XtVa~3w(}LJ7;7p1n z)MWlmTUo^W^1xw1eAT>(W-TS6Cl znkAp23))Dmh#}_Ee5%TDzokoRBtSO#Q}YFPEc(lyWLDwLpLbEr=kKDJg6(xh(E_Q` z2U@&5lafz&QJuBQFi-tfga^DFlCV2LhOdPtEa~IWUYl5BHZI$>8}4TkF1+=H#o^dQ zuE2Hy!_bWOJ-5)xl#h|TN~60Uk}KR)20A2V(eDo%eO3BabmQ1&Z_9(!PAv2N$g}o{ z0}bBbUNirVr%U+#vOh<%$x+!oLg|$og-cQk88d%_X!75TLv-}oF+CJcqnFYeVqUZQ zwK~h^<|Da3OFO;+ni!`iH~DR(6_@QA}A7g4`?(~Kp%KY-XzJuEp#n9*1xg^zDAo9^&UbI|FeWCwz5N;~`Ai@voER`% zEZlBzF1tx+W)$cUj5dILYmdUrlV$9@S|bdd=8&Yo2XD*^Y@U4wzF|k_{s{w+XSE}j zFB}t<;4q(Wipd-D&<{D};{-LyBErkjVCC%Zfq;zJd!_*5{A3K<-3X)z2)~$GvBxQ( zZ@@Sa0FPT+f)Y1APsSyhegPSn>!~SI&!&FXm#WhJ_2F}wefaq0erh%-f6o0umZa0= z(W+*YXEjGL-n}=~TSfzZR6xQV_{qisbM;oc+1f=!bG40u`KwXzqamHk6m0Aj4SpH4 zZRWST@rTBErqGmOf4=)MuI4m~-i?B)q7S*xGZE+-$4|dEwO}ch*q2>UI>12<=DSix zZt96NQD#dAxHBgv31?Qlq_o8YWR08fx|mA{@(W@M4_G*T(;04brqC^I)s50_Eswvx zTfhifb?`4a|LvB({D)MKPb3!(CLO+}@qKQjDX_ism_zY@vb)Vs zJgMYK*-P&t8eE2R8rvS`_@`3wX{v_a88M)`G;V&&EksT4Mkcn47n;xOx!lqqTb|JB z{=|6K@{g^EvFobE4}nyz|8T!d+~MxB#M)&U2H8@5s;x5>U>P72O5L@#3)xuPqib+! zJa)~gh3P>bj?3sYOwN?rR@wy4Q^}n;@V@%``D?%_*^!uVgBkglcueis_b5;u2q>tV zDmn6D^cO9eDT}&uaN6@#5OXfSl<2+?m6p!D86^=hMwgx=!bHZeS;W|9l!d@>?-- zLl(a504d!@DS7sx+3rhh4BZ|B$pYkd+pBbaKS+S$)mSd_Xh#P*rl9rTYD~1NCfHu- zizCCl{R84s)k5i=i|fPOwV_F=BJv}H*Cdcc>0j)h4yn53L}?E)%qR{(p-P5I$n}X7 z6!5}lfnMWn^NQcRC}w?1zBW%M_jpi9{Gr8?X6`_C@+jQ1`N6?JsN-C18zJw^>A?E= zSyA9=t%uz4yszw8Nrx3yo_1jOmrh$`ucA4|G>N7>#VS|O@6wTDxk||}f{=|x_y7;n zJ#O$+<{+wQkj7X%A|aC3gGSZ!S3FY9Yh;F{KrHOr#xresfcKX%RZB7th~({{5Cs9P zU)_;W;W@dW1v8cd@cYwEBr+4nsPH=`mNw;60}$#&W9K_Hm*=ZZXXL zdfjYCN^?W_>HdI4_LX)`&;$Wao9QS zmVb#b(er}Qck^%-A#R;7oR!Sh>HH15G5)rJnNAuEO%c4=vZJ>W15A=}_Ukzyu{=nx zDdj_y#x>wFj!*H4M>D|2$j%HK*egK!0=KF9pa|Fhu% z&zqBs?6S{16O3ET*_pY`abNs+8}&LqtzZjIeUe+OV+(S7*US-V--)cJEFR==YSp=7 zQus&+{8p-Kf+d4$K@l%^MAY+G>e(y*fKf-)tVk^D{i) z(v`x_;P&5MsnXI2&z#Z@g&(D6+?9n3qf>-SCP0xAO;{U?>wCHk3Yi9{Smj6Wf0R_r zF}*~vQ(&M*3%Qb*mewK5;_o9Tht;U7#9*F_)sQ*Qkh$Cd-eAN|7)8frUK${6%c6leoOM#fqU++a;%wX(l-N zF^5cnEHi}PoR1LsTB-b==rsNe+w29bn+b8!GXo9i%-deSq#4Mtp}Yy@L-oG`^|)b4UBFUiF76fSPcOZM7XHh4okUMlw_ zz7Y-`&Qct|f-bMrox9=oDiOd|Zn%la&Sa;VDRycrBBgz zy!VcRq#q&PkGF@(E7zDs=zr(?5;7`Vvmk6xw4c2nbFYXe4>))-0{9_wLA0B)ocMu&`iVGU;hP4C7RM`nnHiKIrtm(RPWavx`m;;q`SKvx?5UWLFsNmbZCL0yBkEMQ^Y}9%Ar9JhVIVy`une! zwPvmPz=v7)KF^7L_TI{V-aSAM60{L!!PNzb1t40rzf!UMLw zO7g|hTNg!ML?8p24YrKf0CPbwGKeY#!48Z+$aFU6Ql@OUs ztQDQIs|HMEi!GPu_wMR$9rZObAR+Y^pyyITlObYqs@@#==w~IOXg60~>;s%%bEz)b zy!&2&LY}9Y;84(hID5srLw2=mmYW11hoJxJUx|s)sMdA8`BWPW{cs<8=H*SI?avP* z#j4Pks-)3Ll8LECV-hZMAP(W7s3sxtSA`!|UbPgA^B0!Eb{dZxi5z!ue!2NiD{)xQ zgD13=evb4#hgLG0szQu^ER?XLKv;6$H*^y4zv0wmrCz>2lAc=N?>tH&!O^dl(c^oR z)dl_Vg&0+!7RbL3BFvbP>52cE2AwQL17U;oPNulZyHxB~p$c>eUjBfDgrtFQ_yS^+ zFU8LP_V3H4;m5uB%+aotU`Fu27hYjq<6{-&)VjL!iN_H2Tvk{BN;a zz!Oiv${1}OL~9>^)6le#sP!j6Gx;Vh_Wd?9AwE&C&qp%0EJAoPOl887GXMbVn&Us7 z?Js{G;q8ecG$kr|)d>(&-4vKh=69ILMJ3Sc?w%+YJsFFQfm7T1R^f)-6Iip(( zS`GtoJUV)LjLkea?xR+;?UozQB~MIrfEcgu7JtzooEk@Bfz|^O`nzXWVk|Gdk*++n zSU|{WvlK>EHe#8a?H~K3Nb(b@lGC&f1cvi|qL5aBCo%7PZn%Pbk3kO+r=YM~liSKo zNR*m$e&C<7K5QfStQdUO=C4@Ca5}FsLdY=1j$@EQL9DH?VDjUFwn_qyFG)@s;{5I% z7WZSzb8_+juDp)*;1Fb(AkXL1?nA@MZ#3r&C~g-N+N$j?PNWYrSt$F(hNf0@nSI$@ zgnI=LkZr-F5ZieJh56@wjQCR#hS-6@VLE=4m>8$rOl3O+yhc;fP19Z8>+fmm{hQr) zZ)fS`J^NmXsph_!ZH z|BMK+?*foNV3zh--_)(F45wFYtL!rd7hdmn6{dz7bt=Jrl1R`b730vo^=i1ck1Biz&|-~B1K zO<}u3*?(2x^op30(8*yZZ^(Q z42P&D;GZ$|)1bxc#cRU#yBk}bvC}(^ryApz2{WcIY9)ol{2nJahF6+GHim3&R|n)I zVaN!_;}am&$m~drF>HS$@n6!2(kj*>6Q6@aw-kQZpLCt4VRIU5YG&D5E+6q@Hth;A zI}ty5=b)i;1&pikfypFx%*!`(fn2&okdV7c<2o$wtJ&j>NXA;&p!b-3z{6d%Jg~5~ z?^{gFsf3{C13COT69^M)NXsUkEC?jPh4Gv(uv-7OkY2VU=9_jMj69S#6xAC5Z7Te* z|G4B?OVU5y@&8~3SkL*oyr&X_zZL`|rU@rT=u7Lf{unLRSdRVO!#4?+s{PU_6K@Tm z(p8rdoDS4iOlzap7|k$d>ye?{5o7TCKVGAf(z4;4`VEz}Tj;j%XNr+~4B8XE0%G?OK#7 z{XZDV2Xe?0*+ut?l}^#pBhy@2-#OBVbz1p>JGaPzuX(`OvR* zRClnlSQ8>rN;LSKt%n4?v5nMrF)oWoU`YU92nU^M%_Vb6g5@@;V!L5= zCY|>}xjUN|U~qpb;V|Heh(~YrrXmH!UOpx;@N~Ifd#$5?W{MEAe;r&WivnvjEteOw zS^B%k>-i%w>qV}!+|#Hd8C}jN8cEyjZpI#Is+@!m_X6YYW|sdhc=&>6?#j=Gw=yg8 za;rto3gg)>YMfk-hX%2ckyX_QOEp_D)IC;xg4-lyxo_z=UaFD%cH}#X-H{SN`g&h> z)Ttz=2B9jE&G@3&u-+-)`KQmDf~^9RO%(X4_XpwG3n8*dHz~2^xa+R6SXV=gA2_@) z_4uuo)QwOly=skLRW26#hp((r{zvxtPnfDaq`LCBi~yRWdidE7qAY^?6QUw>t#Uk7 zrNw%Fg%g#x5D}esjeqIE{zUr3pAJ7NRYp9R!!nznVl&kXpN+%G5;9y`w;BS01%K8$32zQynF)D)+yTx+!#fPcLh>8~jUv;gbY=a_s`c2KZZf zX1DrkyQcZP5oS#)JPl5~`>(bvFw)Q+uND-J<;MqA+y${W?fR^8PN7=xSrkxZ6XPN8 z`?N-TOwq2QaG83RsxlNwWJsk86|!FFu%&mqO9-r7c-F-HoLu?nk-Pl1 zb(bqm)9lbMyOyhi5InO2c~z)Isw*-mUoH|sW>DGF*2f@6Twf>fa>hun6swTHut%Pm zygt=If*n#Ta>r6EJ-Xz35;4dNc{rhKE^AsvR2WXbQ*2h<@zhvk?mnTS?peU5}_c)Z=Mj9+_BOcvzCBn{5 ze$E3(EZKj$l{gy5Cq~q>8E-j+Qow!AjW%p{?UyJqzpcOX$*AYT z{w`p6Pprf;a2ZWRh1SCn3)>BkYX>$zp+46zd(Ofgj>6=y*%?`As0Jd^f2Nl8mCN$C zScHG~`hHee`1omVDm&I!f0L-(4qv2N#(56?r1qpGf;SJ(x*|4vz;|hgiyl;o4u8$k zs-b=o_az|LF&X0#cl;7-=yjn3v#L@PxKOaoBX7{?lRu9RhJ4!9O;z4(p(+Tq;28-k#alQs$)R}t!!Gnqq4cxIz+x44&> zTR12Js7;MKSu6i?fX?ubCwH~r`UM&zw??nJF71nW(I|xjm4R!$?a!efb5a-?OUqM`ojm7s%P z!7uqUPz&c?OC`yibe~<^obTqwQ8>H*-fLg>c3khq*UE~&f^v{hw(&LG#OI>HU8o4S zDA!eKu}&s8@avJrI#`sw;~_`(1+_EtfGNwjo=8vYfu|)xdZ`8`RQICZQ)(##nVl$h z%uGY181M)^fSy|o^{g?$WhRrsfc~7NE=&sAFJL!uWY)F$;+1tHU6c1Z7Y|_9%^@xr zLgbNmZ-7lVuf=lU7v-I8`G>b~1PS2o&KfbD%0#1=VLGdc`1OLG70McVJp(AUs#Wfc z1+^i8kEH)P8J_>Hv6IYr0bohT^{SIn5muco_vw$7@tJR%YlCjjiq0?JqA~PD1Kg(G z#HcsS^Xd@w)g^qXyeR`{yo@mZch;NZR53KxCHA487BiJS5**6?MjG_!z)pd5*vS)s znDQ>F(0h`lf=sDA6|GOLawyYV^6Kb=T%p6+;I&lCN?3>Yk}u+iH7F1!Vnk)uR)6cz z?J_{QU}1W*vS7oikBhgIUzB-~TRZJbLs?VCsP19aa5RrR4h^payGR;|o)nDzIZjt5 zy6ecV;MzwEWy7v%Krt8^N+&5^>-2|x_Q4EcDHdw$XsXk|A|eAcfGO}LFyyj4Af=KhB`!*GwOJ?LY`CB;h-YDb(TdcEJVMkjDnEi9lB zU-hYU!iy+Ac@8S<{!)MyF@Ulv4LUN7Z|rf156uy527?~jGem;!fg&gx+zN*sor!#T-`s#1r+5*o+o) z#lHHaPky7>J}j#fB?Gx#!8YDHz{D76c%>{_+s|3&Ic3 zUR(;nC(-dimH^c8X?7G9RDSHt1TJgfL{{6`EH}tIJjx5f-Dp1P{ta5zBf-Fzx%rk9 zYQU++6BiG3l7B0(fDmyIn8xPsxLN$28YMfW2Ku}@6RcF((-m1AQ7M1Ie|y);8Te#o z2zHGA3m&kU-y`ra^Os^(VoZb6(dBpcYTH4}fC@FCWJb&v5@dmdw_EWlP9G(W1pK#e zn+7x+&f(W!!D`B%>h<*YWu+@|WlhDIgX;!TLo+=?Ms{(OasdT&iPmd@vYMB;F0&^w z77SVik1ZYgTe)}b260gVI`RKb`t#fj31kvTftK>=8YB-(ol|I-6_7;>#T$@2HR6Gn zl6hXHdBT=6xQe&v42F6pFA2X3q&2>`tyG!%F(U-bGWA?toPuP*RSI%eJWca-X}^Bf zE*GmU#zM2IO)I9v67_NWwz?VP^PND>(tkEyq3MO}O(c;vb3W~j!XlJxI0)s{!L@Al z@N^8DS2`)#4br%ftVB&i1#xBB@93N0WS)ikSshM?oIiRWR6kgzYKcV)Hiyq%goB8l z+S`wdsi@GOhCB+w+p5E=Fd7}fpS%%nvu&=I9rPhvOOG9Z=|}mPeV?C2RVt?S<*yfi zE1tbupLseL`<4a#MkxN(t~~pi>-#tG9vWu5_9Q&;b{#4rCupt=7EMmWlcmZ3?(Agp zT9i9|dEZjbJp3B5B1j!61jl_!Ko9`ZI}&1~-m>VeAyz7EiX&jW2c5~drXU+=zbzQf zj*_KKUw;Xd0LC2ugPrWI?ODS&788PHz@vOqfqFyxZ5RpWvjGLx2a34xUoSG#Daq!8ba{OfacQ)t4li z;8lXa%@9gM9TnzpHZDbOo$i?0w#!Gy>N{YseBbCLNKM~7#GRsZgFyC2sp1^#xu)v5 z74Nqn{jK~9OZ(0{4FY|r@(&MfNb5bMb=H590zY0Rih5@x0Jg;1oX5fbdXSD(hDUDX)`}ftP9zQxC-t_j{PC zKH@MnH!aXL^~&)S+x6DN0WtCZNO8-|L1m*~)~akga~bN-0CXQI#Tg~P(c>u+%?c;X z=BzOqhTB=y4|B2)_Yz2cj+R~90z6PWaUf*m>>O2LTZt3|JYCg@wHKmt8G#fSRa^0SuY!Ee^z z-hDjw^`E=i@()3Dy~fPpYCNeMDCpF^-)qm;IB^WYrL;FLff!mMM99jd#mF@l&#D$3 zdo(2VLI^m8trQ;XYjy*rjHe^T|`W4<{J=ek7G6QQ#) z8bwZFa3fHfF&dEtOl<)kHcA!{eRE|dW<#QG5&S6GdBK*kk+0cG*!DB8%SFF~kLB5g z3xIl`=>4^WqJ8$p zKF?k;szSO6ipJd2bz?kzc;GjmM*OiQQx}Q%nUcC|yl1RVcb%ly>9vy-SaPe$D zOaTHfqyuX%__Ao6i@)$%6=z#~M?}LN55hC>hFBUp=lHGcmyE(2l9CcFe>Z1mTpZkv zD-B8fyp*-k#@zp#8seL{-oEHlw>x-j%TZxk=li12)9tu1%fUa8+bG=Oz)}x!Y+GW*h~{m)JRsja1H80i`8sc+|v!%P`dTu zRa}ql7NX#~H!aeRb-0(Rwx6VMqr4%cSl0m8C9hzDPI*lSGD7(}+O{ZlR_Y-sWZN}@9DeGy8s@&gC z@B3=Kzbidn${%l!6F7c+*|vrn&U$W&$XeOMco6Kp_MflYmSv88_zH2ei4posQ;PbL zIp>Ur{#m(7NT62YZP$KUi9j@Iv@1tiK+{h*JVg8^Udjc$BoMH3RdGhO@uF=iI6hoD zUFe?AUG zgf#=r#M#q~3BC~|xLP03$P)aRVn9xw0`)49Q௺>K|6Ei>Peis&vEKC*szBB%s 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

    ab{^D?X@?wUV6 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
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Bookmarklets' %} +
    +{% endblock %} + +{% block content %} +

    {% translate "Documentation bookmarklets" %}

    + +

    {% blocktranslate trimmed %} + To install bookmarklets, drag the link to your bookmarks toolbar, or right-click + the link and add it to your bookmarks. Now you can select the bookmarklet + from any page in the site. + {% endblocktranslate %}

    + +
    +
    + +

    {% translate "Jumps you from any page to the documentation for the view that generates that page." %}

    +
    +
    +{% endblock %} diff --git a/engine/core/templates/admin_doc/index.html b/engine/core/templates/admin_doc/index.html new file mode 100644 index 00000000..aa6c06f6 --- /dev/null +++ b/engine/core/templates/admin_doc/index.html @@ -0,0 +1,58 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Documentation' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} +
    +{% endblock %} + +{% block content %} +

    {% translate 'Documentation' %}

    + + +{% endblock %} diff --git a/engine/core/templates/admin_doc/missing_docutils.html b/engine/core/templates/admin_doc/missing_docutils.html new file mode 100644 index 00000000..d977142c --- /dev/null +++ b/engine/core/templates/admin_doc/missing_docutils.html @@ -0,0 +1,25 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Please install docutils' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} +
    +{% endblock %} + +{% block content %} +
    +
    + warning +
    +

    {% translate 'Documentation' %}

    +

    {% blocktranslate with "https://docutils.sourceforge.io/" as link %}The admin documentation system requires Python's docutils library.{% endblocktranslate %}

    +

    {% blocktranslate with "https://pypi.org/project/docutils/" as link %}Please ask your administrators to install docutils.{% endblocktranslate %}

    +
    +
    +
    +{% endblock %} diff --git a/engine/core/templates/admin_doc/model_detail.html b/engine/core/templates/admin_doc/model_detail.html new file mode 100644 index 00000000..47830833 --- /dev/null +++ b/engine/core/templates/admin_doc/model_detail.html @@ -0,0 +1,91 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% blocktranslate %}Model: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Models' %} + chevron_right + {{ name }} +
    +{% endblock %} + +{% block content %} +
    +

    {{ name }}

    + {% if summary %}

    {{ summary }}

    {% endif %} + {% if description %}
    {{ description }}
    {% endif %} +
    + +
    +
    +

    + list + {% translate 'Fields' %} +

    +
    +
    + + + + + + + + + + {% for field in fields|dictsort:"name" %} + + + + + + {% endfor %} + +
    {% translate 'Field' %}{% translate 'Type' %}{% translate 'Description' %}
    {{ field.name }} + {{ field.data_type }} + {{ field.verbose }}{% if field.help_text %} — {{ field.help_text|safe }}{% endif %}
    +
    +
    + + {% if methods %} +
    +
    +

    + function + {% translate 'Methods with arguments' %} +

    +
    +
    + + + + + + + + + + {% for method in methods|dictsort:"name" %} + + + + + + {% endfor %} + +
    {% translate 'Method' %}{% translate 'Arguments' %}{% translate 'Description' %}
    {{ method.name }}{{ method.arguments }}{{ method.verbose }}
    +
    +
    + {% endif %} + + + arrow_back + {% translate 'Back to Model documentation' %} + +{% endblock %} diff --git a/engine/core/templates/admin_doc/model_index.html b/engine/core/templates/admin_doc/model_index.html new file mode 100644 index 00000000..ece20469 --- /dev/null +++ b/engine/core/templates/admin_doc/model_index.html @@ -0,0 +1,55 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Models' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Models' %} +
    +{% endblock %} + +{% block content %} +

    {% translate 'Model documentation' %}

    + + {% regroup models by app_config as grouped_models %} + +
    +
    + {% for group in grouped_models %} +
    +
    +

    {{ group.grouper.verbose_name }}

    + {{ group.grouper.name }} +
    +
    + {% for model in group.list %} + + table_chart + {{ model.object_name }} + + {% endfor %} +
    +
    + {% endfor %} +
    + +
    +
    +
    +

    {% translate 'Model groups' %}

    +
    + +
    +
    +
    +{% endblock %} diff --git a/engine/core/templates/admin_doc/template_detail.html b/engine/core/templates/admin_doc/template_detail.html new file mode 100644 index 00000000..28eb7740 --- /dev/null +++ b/engine/core/templates/admin_doc/template_detail.html @@ -0,0 +1,42 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% blocktranslate %}Template: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Templates' %} +
    +{% endblock %} + +{% block content %} +

    {% blocktranslate %}Template: {{ name }}{% endblocktranslate %}

    + +
    +
    +

    {% blocktranslate %}Search path for template {{ name }}:{% endblocktranslate %}

    +
    +
    + {% for template in templates|dictsort:"order" %} +
    + {{ template.order }} + {{ template.file }} + {% if not template.exists %} + {% translate '(does not exist)' %} + {% else %} + check_circle + {% endif %} +
    + {% endfor %} +
    +
    + + + arrow_back + {% translate 'Back to Documentation' %} + +{% endblock %} diff --git a/engine/core/templates/admin_doc/template_filter_index.html b/engine/core/templates/admin_doc/template_filter_index.html new file mode 100644 index 00000000..f67f7f42 --- /dev/null +++ b/engine/core/templates/admin_doc/template_filter_index.html @@ -0,0 +1,63 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Template filters' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Filters' %} +
    +{% endblock %} + +{% block content %} +

    {% translate 'Template filter documentation' %}

    + + {% regroup filters|dictsort:"library" by library as filter_libraries %} + +
    +
    + {% for library in filter_libraries %} +
    +
    +

    {% firstof library.grouper _("Built-in filters") %}

    + {% if library.grouper %} +

    + {% blocktranslate with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these filters, put {{ code }} in your template before using the filter.{% endblocktranslate %} +

    + {% endif %} +
    +
    + {% for filter in library.list|dictsort:"name" %} +
    +

    {{ filter.name }}

    +
    + {{ filter.title }} + {{ filter.body }} +
    +
    + {% endfor %} +
    +
    + {% endfor %} +
    + +
    + {% for library in filter_libraries %} +
    +
    +

    {% firstof library.grouper _("Built-in filters") %}

    +
    + +
    + {% endfor %} +
    +
    +{% endblock %} diff --git a/engine/core/templates/admin_doc/template_tag_index.html b/engine/core/templates/admin_doc/template_tag_index.html new file mode 100644 index 00000000..0342efeb --- /dev/null +++ b/engine/core/templates/admin_doc/template_tag_index.html @@ -0,0 +1,63 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Template tags' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Tags' %} +
    +{% endblock %} + +{% block content %} +

    {% translate 'Template tag documentation' %}

    + + {% regroup tags|dictsort:"library" by library as tag_libraries %} + +
    +
    + {% for library in tag_libraries %} +
    +
    +

    {% firstof library.grouper _("Built-in tags") %}

    + {% if library.grouper %} +

    + {% blocktranslate with code="{"|add:"% load "|add:library.grouper|add:" %"|add:"}" %}To use these tags, put {{ code }} in your template before using the tag.{% endblocktranslate %} +

    + {% endif %} +
    +
    + {% for tag in library.list|dictsort:"name" %} +
    +

    {{ tag.name }}

    +
    +

    {{ tag.title|striptags }}

    + {{ tag.body }} +
    +
    + {% endfor %} +
    +
    + {% endfor %} +
    + +
    + {% for library in tag_libraries %} +
    +
    +

    {% firstof library.grouper _("Built-in tags") %}

    +
    + +
    + {% endfor %} +
    +
    +{% endblock %} diff --git a/engine/core/templates/admin_doc/view_detail.html b/engine/core/templates/admin_doc/view_detail.html new file mode 100644 index 00000000..1758959d --- /dev/null +++ b/engine/core/templates/admin_doc/view_detail.html @@ -0,0 +1,43 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% blocktranslate %}View: {{ name }}{% endblocktranslate %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Views' %} + chevron_right + {{ name }} +
    +{% endblock %} + +{% block content %} +
    +
    +

    {{ name }}

    + {% if summary %}

    {{ summary }}

    {% endif %} +
    +
    + {{ body }} + + {% if meta.Context %} +

    {% translate 'Context:' %}

    +

    {{ meta.Context }}

    + {% endif %} + + {% if meta.Templates %} +

    {% translate 'Templates:' %}

    +

    {{ meta.Templates }}

    + {% endif %} +
    +
    + + + arrow_back + {% translate 'Back to View documentation' %} + +{% endblock %} diff --git a/engine/core/templates/admin_doc/view_index.html b/engine/core/templates/admin_doc/view_index.html new file mode 100644 index 00000000..22b3408b --- /dev/null +++ b/engine/core/templates/admin_doc/view_index.html @@ -0,0 +1,66 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate 'Views' %}{% endblock %} + +{% block breadcrumbs %} +
    + {% translate 'Home' %} + chevron_right + {% translate 'Documentation' %} + chevron_right + {% translate 'Views' %} +
    +{% endblock %} + +{% block content %} +

    {% translate 'View documentation' %}

    + + {% regroup views|dictsort:'namespace' by namespace as views_by_ns %} + +
    +
    + {% for ns_views in views_by_ns %} +
    +
    +

    + {% if ns_views.grouper %} + {% blocktranslate with ns_views.grouper as name %}Views by namespace {{ name }}{% endblocktranslate %} + {% else %} + {% blocktranslate %}Views by empty namespace{% endblocktranslate %} + {% endif %} +

    +
    +
    + {% for view in ns_views.list|dictsort:"url" %} + {% ifchanged %} +
    + {{ view.url }} +

    + {% blocktranslate with view.full_name as full_name and view.url_name as url_name %}View function: {{ full_name }}. Name: {{ url_name }}.{% endblocktranslate %} +

    + {% if view.title %}

    {{ view.title }}

    {% endif %} +
    + {% endifchanged %} + {% endfor %} +
    +
    + {% endfor %} +
    + +
    +
    +
    +

    {% translate 'Jump to namespace' %}

    +
    + +
    +
    +
    +{% endblock %} diff --git a/engine/core/templates/unfold/helpers/fieldsets_tabs.html b/engine/core/templates/unfold/helpers/fieldsets_tabs.html new file mode 100644 index 00000000..668bc031 --- /dev/null +++ b/engine/core/templates/unfold/helpers/fieldsets_tabs.html @@ -0,0 +1,35 @@ +{% load unfold %} +{% load filters %} + +{% with tabs=adminform|tabs %} + {% if tabs %} + {% with active_tab=tabs|tabs_active_unicode %} +
    + + + {% for fieldset in tabs %} +
    + {% include 'admin/includes/fieldset.html' with stacked=1 %} +
    + {% endfor %} +
    + {% endwith %} + {% endif %} +{% endwith %} From 0962376252ec2196f19592e7cb78672f549638b8 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 20:01:28 +0300 Subject: [PATCH 18/30] refactor(engine): downgrade `ty` version and clean up unused code - Downgrade `ty` dependency from 0.0.18 to 0.0.16 in `pyproject.toml` and related files to address compatibility issues. - Refactor `filters.py` to use safer attribute handling for field errors. - Remove unused `TestModelDocument` and `TestModel` references from `documents.py`, reducing unnecessary overhead. - Minor cleanup in `serializers.py` for improved readability. --- engine/core/elasticsearch/documents.py | 18 ------------ engine/core/templatetags/filters.py | 2 +- engine/vibes_auth/serializers.py | 2 +- pyproject.toml | 2 +- uv.lock | 38 +++++++++++++------------- 5 files changed, 22 insertions(+), 40 deletions(-) diff --git a/engine/core/elasticsearch/documents.py b/engine/core/elasticsearch/documents.py index cf7f05b5..1c80e753 100644 --- a/engine/core/elasticsearch/documents.py +++ b/engine/core/elasticsearch/documents.py @@ -1,9 +1,6 @@ -from typing import Any - from django.db.models import Model, QuerySet from django_elasticsearch_dsl import Document, fields from django_elasticsearch_dsl.registries import registry -from health_check.db.models import TestModel from engine.core.elasticsearch import ( COMMON_ANALYSIS, @@ -195,18 +192,3 @@ class BrandDocument(ActiveOnlyMixin, BaseDocument): add_multilang_fields(BrandDocument) registry.register_document(BrandDocument) - - -class TestModelDocument(Document): - class Index: - name = "testmodels" - - class Django: - model = TestModel - fields = ["title"] - ignore_signals = True - related_models: list[Any] = [] - auto_refresh = False - - -registry.register_document(TestModelDocument) diff --git a/engine/core/templatetags/filters.py b/engine/core/templatetags/filters.py index d89b19ae..c132eac4 100644 --- a/engine/core/templatetags/filters.py +++ b/engine/core/templatetags/filters.py @@ -30,7 +30,7 @@ def tabs_active_unicode(fieldsets: list[Fieldset]) -> str: for field in field_line: if ( not field.is_readonly - and field.errors() + and getattr(field, "errors", []) and hasattr(fieldset, "name") ): active = slugify(str(fieldset.name), allow_unicode=True) diff --git a/engine/vibes_auth/serializers.py b/engine/vibes_auth/serializers.py index e8b4d3e2..294578b6 100644 --- a/engine/vibes_auth/serializers.py +++ b/engine/vibes_auth/serializers.py @@ -180,7 +180,7 @@ class TokenObtainSerializer(Serializer): @classmethod def get_token(cls, user: AuthUser) -> Token: if cls.token_class is not None: - return cls.token_class.for_user(user) # ty: ignore[invalid-argument-type] + return cls.token_class.for_user(user) else: raise RuntimeError(_("must set token_class attribute on class.")) diff --git a/pyproject.toml b/pyproject.toml index d682e1ef..9d14ed1a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -79,7 +79,7 @@ worker = [ "django-celery-results==2.6.0", ] linting = [ - "ty==0.0.18", + "ty==0.0.16", "ruff==0.15.2", "celery-types==0.24.0", "django-stubs==5.2.9", diff --git a/uv.lock b/uv.lock index 9ab11f8d..fa40991d 100644 --- a/uv.lock +++ b/uv.lock @@ -3447,7 +3447,7 @@ requires-dist = [ { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.53.0" }, { name = "six", specifier = "==1.17.0" }, { name = "swapper", specifier = "==1.4.0" }, - { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.18" }, + { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.16" }, { name = "types-docutils", marker = "extra == 'linting'", specifier = "==0.22.3.20251115" }, { name = "types-paramiko", marker = "extra == 'linting'", specifier = "==4.0.0.20250822" }, { name = "types-pillow", marker = "extra == 'linting'", specifier = "==10.2.0.20240822" }, @@ -3669,26 +3669,26 @@ wheels = [ [[package]] name = "ty" -version = "0.0.18" +version = "0.0.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/74/15/9682700d8d60fdca7afa4febc83a2354b29cdcd56e66e19c92b521db3b39/ty-0.0.18.tar.gz", hash = "sha256:04ab7c3db5dcbcdac6ce62e48940d3a0124f377c05499d3f3e004e264ae94b83", size = 5214774, upload-time = "2026-02-20T21:51:31.173Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/18/77f84d89db54ea0d1d1b09fa2f630ac4c240c8e270761cb908c06b6e735c/ty-0.0.16.tar.gz", hash = "sha256:a999b0db6aed7d6294d036ebe43301105681e0c821a19989be7c145805d7351c", size = 5129637, upload-time = "2026-02-10T20:24:16.48Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/d8/920460d4c22ea68fcdeb0b2fb53ea2aeb9c6d7875bde9278d84f2ac767b6/ty-0.0.18-py3-none-linux_armv6l.whl", hash = "sha256:4e5e91b0a79857316ef893c5068afc4b9872f9d257627d9bc8ac4d2715750d88", size = 10280825, upload-time = "2026-02-20T21:51:25.03Z" }, - { url = "https://files.pythonhosted.org/packages/83/56/62587de582d3d20d78fcdddd0594a73822ac5a399a12ef512085eb7a4de6/ty-0.0.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ee0e578b3f8416e2d5416da9553b78fd33857868aa1384cb7fefeceee5ff102d", size = 10118324, upload-time = "2026-02-20T21:51:22.27Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2d/dbdace8d432a0755a7417f659bfd5b8a4261938ecbdfd7b42f4c454f5aa9/ty-0.0.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3f7a0487d36b939546a91d141f7fc3dbea32fab4982f618d5b04dc9d5b6da21e", size = 9605861, upload-time = "2026-02-20T21:51:16.066Z" }, - { url = "https://files.pythonhosted.org/packages/6b/d9/de11c0280f778d5fc571393aada7fe9b8bc1dd6a738f2e2c45702b8b3150/ty-0.0.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5e2fa8d45f57ca487a470e4bf66319c09b561150e98ae2a6b1a97ef04c1a4eb", size = 10092701, upload-time = "2026-02-20T21:51:26.862Z" }, - { url = "https://files.pythonhosted.org/packages/0f/94/068d4d591d791041732171e7b63c37a54494b2e7d28e88d2167eaa9ad875/ty-0.0.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d75652e9e937f7044b1aca16091193e7ef11dac1c7ec952b7fb8292b7ba1f5f2", size = 10109203, upload-time = "2026-02-20T21:51:11.59Z" }, - { url = "https://files.pythonhosted.org/packages/34/e4/526a4aa56dc0ca2569aaa16880a1ab105c3b416dd70e87e25a05688999f3/ty-0.0.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:563c868edceb8f6ddd5e91113c17d3676b028f0ed380bdb3829b06d9beb90e58", size = 10614200, upload-time = "2026-02-20T21:51:20.298Z" }, - { url = "https://files.pythonhosted.org/packages/fd/3d/b68ab20a34122a395880922587fbfc3adf090d22e0fb546d4d20fe8c2621/ty-0.0.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502e2a1f948bec563a0454fc25b074bf5cf041744adba8794d024277e151d3b0", size = 11153232, upload-time = "2026-02-20T21:51:14.121Z" }, - { url = "https://files.pythonhosted.org/packages/68/ea/678243c042343fcda7e6af36036c18676c355878dcdcd517639586d2cf9e/ty-0.0.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc881dea97021a3aa29134a476937fd8054775c4177d01b94db27fcfb7aab65b", size = 10832934, upload-time = "2026-02-20T21:51:32.92Z" }, - { url = "https://files.pythonhosted.org/packages/d8/bd/7f8d647cef8b7b346c0163230a37e903c7461c7248574840b977045c77df/ty-0.0.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:421fcc3bc64cab56f48edb863c7c1c43649ec4d78ff71a1acb5366ad723b6021", size = 10700888, upload-time = "2026-02-20T21:51:09.673Z" }, - { url = "https://files.pythonhosted.org/packages/6e/06/cb3620dc48c5d335ba7876edfef636b2f4498eff4a262ff90033b9e88408/ty-0.0.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0fe5038a7136a0e638a2fb1ad06e3d3c4045314c6ba165c9c303b9aeb4623d6c", size = 10078965, upload-time = "2026-02-20T21:51:07.678Z" }, - { url = "https://files.pythonhosted.org/packages/60/27/c77a5a84533fa3b685d592de7b4b108eb1f38851c40fac4e79cc56ec7350/ty-0.0.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d123600a52372677613a719bbb780adeb9b68f47fb5f25acb09171de390e0035", size = 10134659, upload-time = "2026-02-20T21:51:18.311Z" }, - { url = "https://files.pythonhosted.org/packages/43/6e/60af6b88c73469e628ba5253a296da6984e0aa746206f3034c31f1a04ed1/ty-0.0.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb4bc11d32a1bf96a829bf6b9696545a30a196ac77bbc07cc8d3dfee35e03723", size = 10297494, upload-time = "2026-02-20T21:51:39.631Z" }, - { url = "https://files.pythonhosted.org/packages/33/90/612dc0b68224c723faed6adac2bd3f930a750685db76dfe17e6b9e534a83/ty-0.0.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:dda2efbf374ba4cd704053d04e32f2f784e85c2ddc2400006b0f96f5f7e4b667", size = 10791944, upload-time = "2026-02-20T21:51:37.13Z" }, - { url = "https://files.pythonhosted.org/packages/0d/da/f4ada0fd08a9e4138fe3fd2bcd3797753593f423f19b1634a814b9b2a401/ty-0.0.18-py3-none-win32.whl", hash = "sha256:c5768607c94977dacddc2f459ace6a11a408a0f57888dd59abb62d28d4fee4f7", size = 9677964, upload-time = "2026-02-20T21:51:42.039Z" }, - { url = "https://files.pythonhosted.org/packages/5e/fa/090ed9746e5c59fc26d8f5f96dc8441825171f1f47752f1778dad690b08b/ty-0.0.18-py3-none-win_amd64.whl", hash = "sha256:b78d0fa1103d36fc2fce92f2092adace52a74654ab7884d54cdaec8eb5016a4d", size = 10636576, upload-time = "2026-02-20T21:51:29.159Z" }, - { url = "https://files.pythonhosted.org/packages/92/4f/5dd60904c8105cda4d0be34d3a446c180933c76b84ae0742e58f02133713/ty-0.0.18-py3-none-win_arm64.whl", hash = "sha256:01770c3c82137c6b216aa3251478f0b197e181054ee92243772de553d3586398", size = 10095449, upload-time = "2026-02-20T21:51:34.914Z" }, + { url = "https://files.pythonhosted.org/packages/67/b9/909ebcc7f59eaf8a2c18fb54bfcf1c106f99afb3e5460058d4b46dec7b20/ty-0.0.16-py3-none-linux_armv6l.whl", hash = "sha256:6d8833b86396ed742f2b34028f51c0e98dbf010b13ae4b79d1126749dc9dab15", size = 10113870, upload-time = "2026-02-10T20:24:11.864Z" }, + { url = "https://files.pythonhosted.org/packages/c3/2c/b963204f3df2fdbf46a4a1ea4a060af9bb676e065d59c70ad0f5ae0dbae8/ty-0.0.16-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:934c0055d3b7f1cf3c8eab78c6c127ef7f347ff00443cef69614bda6f1502377", size = 9936286, upload-time = "2026-02-10T20:24:08.695Z" }, + { url = "https://files.pythonhosted.org/packages/ef/4d/3d78294f2ddfdded231e94453dea0e0adef212b2bd6536296039164c2a3e/ty-0.0.16-py3-none-macosx_11_0_arm64.whl", hash = "sha256:b55e8e8733b416d914003cd22e831e139f034681b05afed7e951cc1a5ea1b8d4", size = 9442660, upload-time = "2026-02-10T20:24:02.704Z" }, + { url = "https://files.pythonhosted.org/packages/15/40/ce48c0541e3b5749b0890725870769904e6b043e077d4710e5325d5cf807/ty-0.0.16-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feccae8f4abd6657de111353bd604f36e164844466346eb81ffee2c2b06ea0f0", size = 9934506, upload-time = "2026-02-10T20:24:35.818Z" }, + { url = "https://files.pythonhosted.org/packages/84/16/3b29de57e1ec6e56f50a4bb625ee0923edb058c5f53e29014873573a00cd/ty-0.0.16-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1cad5e29d8765b92db5fa284940ac57149561f3f89470b363b9aab8a6ce553b0", size = 9933099, upload-time = "2026-02-10T20:24:43.003Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a1/e546995c25563d318c502b2f42af0fdbed91e1fc343708241e2076373644/ty-0.0.16-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86f28797c7dc06f081238270b533bf4fc8e93852f34df49fb660e0b58a5cda9a", size = 10438370, upload-time = "2026-02-10T20:24:33.44Z" }, + { url = "https://files.pythonhosted.org/packages/11/c1/22d301a4b2cce0f75ae84d07a495f87da193bcb68e096d43695a815c4708/ty-0.0.16-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be971a3b42bcae44d0e5787f88156ed2102ad07558c05a5ae4bfd32a99118e66", size = 10992160, upload-time = "2026-02-10T20:24:25.574Z" }, + { url = "https://files.pythonhosted.org/packages/6f/40/f1892b8c890db3f39a1bab8ec459b572de2df49e76d3cad2a9a239adcde9/ty-0.0.16-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c9f982b7c4250eb91af66933f436b3a2363c24b6353e94992eab6551166c8b7", size = 10717892, upload-time = "2026-02-10T20:24:05.914Z" }, + { url = "https://files.pythonhosted.org/packages/2f/1b/caf9be8d0c738983845f503f2e92ea64b8d5fae1dd5ca98c3fca4aa7dadc/ty-0.0.16-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d122edf85ce7bdf6f85d19158c991d858fc835677bd31ca46319c4913043dc84", size = 10510916, upload-time = "2026-02-10T20:24:00.252Z" }, + { url = "https://files.pythonhosted.org/packages/60/ea/28980f5c7e1f4c9c44995811ea6a36f2fcb205232a6ae0f5b60b11504621/ty-0.0.16-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:497ebdddbb0e35c7758ded5aa4c6245e8696a69d531d5c9b0c1a28a075374241", size = 9908506, upload-time = "2026-02-10T20:24:28.133Z" }, + { url = "https://files.pythonhosted.org/packages/f7/80/8672306596349463c21644554f935ff8720679a14fd658fef658f66da944/ty-0.0.16-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e1e0ac0837bde634b030243aeba8499383c0487e08f22e80f5abdacb5b0bd8ce", size = 9949486, upload-time = "2026-02-10T20:24:18.62Z" }, + { url = "https://files.pythonhosted.org/packages/8b/8a/d8747d36f30bd82ea157835f5b70d084c9bb5d52dd9491dba8a149792d6a/ty-0.0.16-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1216c9bcca551d9f89f47a817ebc80e88ac37683d71504e5509a6445f24fd024", size = 10145269, upload-time = "2026-02-10T20:24:38.249Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4c/753535acc7243570c259158b7df67e9c9dd7dab9a21ee110baa4cdcec45d/ty-0.0.16-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:221bbdd2c6ee558452c96916ab67fcc465b86967cf0482e19571d18f9c831828", size = 10608644, upload-time = "2026-02-10T20:24:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/3e/05/8e8db64cf45a8b16757e907f7a3bfde8d6203e4769b11b64e28d5bdcd79a/ty-0.0.16-py3-none-win32.whl", hash = "sha256:d52c4eb786be878e7514cab637200af607216fcc5539a06d26573ea496b26512", size = 9582579, upload-time = "2026-02-10T20:24:30.406Z" }, + { url = "https://files.pythonhosted.org/packages/25/bc/45759faea132cd1b2a9ff8374e42ba03d39d076594fbb94f3e0e2c226c62/ty-0.0.16-py3-none-win_amd64.whl", hash = "sha256:f572c216aa8ecf79e86589c6e6d4bebc01f1f3cb3be765c0febd942013e1e73a", size = 10436043, upload-time = "2026-02-10T20:23:57.51Z" }, + { url = "https://files.pythonhosted.org/packages/7f/02/70a491802e7593e444137ed4e41a04c34d186eb2856f452dd76b60f2e325/ty-0.0.16-py3-none-win_arm64.whl", hash = "sha256:430eadeb1c0de0c31ef7bef9d002bdbb5f25a31e3aad546f1714d76cd8da0a87", size = 9915122, upload-time = "2026-02-10T20:24:14.285Z" }, ] [[package]] From 72834f01f6351c04ab2e287b376f7182d58f567b Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 20:06:41 +0300 Subject: [PATCH 19/30] feat(configuration): add support for configurable language code allow setting `SCHON_LANGUAGE_CODE` via environment files for both Windows and Unix. Default remains `en-gb`. Updated `LANGUAGE_CODE` in settings to use the new environment variable for increased flexibility. --- schon/settings/base.py | 2 +- scripts/Unix/generate-environment-file.sh | 3 +++ scripts/Windows/generate-environment-file.ps1 | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/schon/settings/base.py b/schon/settings/base.py index 9bd561bf..0ea95c1a 100644 --- a/schon/settings/base.py +++ b/schon/settings/base.py @@ -251,7 +251,7 @@ LANGUAGES: tuple[tuple[str, str], ...] = ( ("zh-hans", "简体中文"), ) -LANGUAGE_CODE: str = "en-gb" +LANGUAGE_CODE: str = getenv("SCHON_LANGUAGE_CODE", "en-gb") LANGUAGES_FLAGS: dict[str, str] = { "ar-ar": "🇸🇦", diff --git a/scripts/Unix/generate-environment-file.sh b/scripts/Unix/generate-environment-file.sh index 32598577..9a1a740c 100755 --- a/scripts/Unix/generate-environment-file.sh +++ b/scripts/Unix/generate-environment-file.sh @@ -49,6 +49,7 @@ SCHON_BASE_DOMAIN=$(prompt_default SCHON_BASE_DOMAIN schon.wiseless.xyz) SENTRY_DSN=$(prompt_default SENTRY_DSN "") DEBUG=$(prompt_default DEBUG 1) TIME_ZONE=$(prompt_default TIME_ZONE "Europe/London") +SCHON_LANGUAGE_CODE=$(prompt_default SCHON_LANGUAGE_CODE "en-gb") SECRET_KEY=$(prompt_autogen SECRET_KEY 32) JWT_SIGNING_KEY=$(prompt_autogen JWT_SIGNING_KEY 64) @@ -95,6 +96,8 @@ SCHON_STOREFRONT_DOMAIN="${SCHON_STOREFRONT_DOMAIN}" SCHON_BASE_DOMAIN="${SCHON_BASE_DOMAIN}" SENTRY_DSN="${SENTRY_DSN}" DEBUG=${DEBUG} +TIME_ZONE="${TIME_ZONE}" +SCHON_LANGUAGE_CODE="${SCHON_LANGUAGE_CODE}" SECRET_KEY="${SECRET_KEY}" JWT_SIGNING_KEY="${JWT_SIGNING_KEY}" diff --git a/scripts/Windows/generate-environment-file.ps1 b/scripts/Windows/generate-environment-file.ps1 index 3c3d0449..fa158e71 100644 --- a/scripts/Windows/generate-environment-file.ps1 +++ b/scripts/Windows/generate-environment-file.ps1 @@ -55,6 +55,7 @@ $SCHON_BASE_DOMAIN = Prompt-Default 'SCHON_BASE_DOMAIN' 'schon.wisel $SENTRY_DSN = Prompt-Default 'SENTRY_DSN' '' $DEBUG = Prompt-Default 'DEBUG' '1' $TIME_ZONE = Prompt-Default 'TIME_ZONE' 'Europe/London' +$SCHON_LANGUAGE_CODE = Prompt-Default 'SCHON_LANGUAGE_CODE' 'en-gb' $SECRET_KEY = Prompt-AutoGen 'SECRET_KEY' 32 $JWT_SIGNING_KEY = Prompt-AutoGen 'JWT_SIGNING_KEY' 64 @@ -102,6 +103,8 @@ $lines = @( "SCHON_BASE_DOMAIN=""$SCHON_BASE_DOMAIN""" "SENTRY_DSN=""$SENTRY_DSN""" "DEBUG=$DEBUG" + "TIME_ZONE=""$TIME_ZONE""" + "SCHON_LANGUAGE_CODE=""$SCHON_LANGUAGE_CODE""" "" "SECRET_KEY=""$SECRET_KEY""" "JWT_SIGNING_KEY=""$JWT_SIGNING_KEY""" From ec167d4e9cb04765ab1c065e997bf17b0289d0be Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 20:24:33 +0300 Subject: [PATCH 20/30] refactor(health-check): replace default views with custom configuration migrated health check configuration to custom settings for more precise control. Removed unused `health_check` submodules to streamline dependencies. Updated URLs to use `HealthCheckView` with tailored checks. Streamlines health monitoring and reduces unnecessary bloat. --- schon/settings/base.py | 9 --------- schon/urls.py | 25 ++++++++++++++++++++++--- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/schon/settings/base.py b/schon/settings/base.py index 0ea95c1a..eda7898f 100644 --- a/schon/settings/base.py +++ b/schon/settings/base.py @@ -128,15 +128,6 @@ INSTALLED_APPS: list[str] = [ "django.contrib.gis", "django.contrib.humanize", "health_check", - "health_check.db", - "health_check.cache", - "health_check.storage", - "health_check.contrib.migrations", - "health_check.contrib.celery_ping", - "health_check.contrib.psutil", - "health_check.contrib.redis", - "health_check.contrib.db_heartbeat", - "health_check.contrib.mail", "cacheops", "django_celery_beat", "django_celery_results", diff --git a/schon/urls.py b/schon/urls.py index 380d3613..6b7f6c49 100644 --- a/schon/urls.py +++ b/schon/urls.py @@ -3,6 +3,8 @@ from django.conf.urls.static import static from django.contrib import admin from django.urls import include, path from django.views.decorators.csrf import csrf_exempt +from health_check.views import HealthCheckView +from redis.asyncio import Redis as RedisClient from engine.core.graphene.schema import schema from engine.core.views import ( @@ -21,9 +23,26 @@ urlpatterns = [ index, ), path( - r"health/", - include( - "health_check.urls", + "health/", + HealthCheckView.as_view( + checks=[ + "health_check.Cache", + "health_check.DNS", + "health_check.Database", + "health_check.Mail", + "health_check.Storage", + "health_check.contrib.psutil.Disk", + "health_check.contrib.psutil.Memory", + "health_check.contrib.celery.Ping", + ( + "health_check.contrib.redis.Redis", + { + "client_factory": lambda: RedisClient.from_url( + settings.CELERY_BROKER_URL + ) + }, + ), + ], ), ), path( From 8883b9f43de6734888d38ba2505791be12e7c4c5 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 22:13:36 +0300 Subject: [PATCH 21/30] feat(core): replace AutoSlugField with TweakedAutoSlugField for product slugs Updated `product.slug` to use `TweakedAutoSlugField` for improved functionality, allowing unicode, overwrite capabilities, and enhanced population logic. Adjusted the corresponding migration script to ensure seamless database schema updates. Also marked `brand.categories` as deprecated. --- ...ter_brand_categories_alter_product_slug.py | 39 +++++++++++++++++++ engine/core/models.py | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 engine/core/migrations/0055_alter_brand_categories_alter_product_slug.py diff --git a/engine/core/migrations/0055_alter_brand_categories_alter_product_slug.py b/engine/core/migrations/0055_alter_brand_categories_alter_product_slug.py new file mode 100644 index 00000000..25cfb69b --- /dev/null +++ b/engine/core/migrations/0055_alter_brand_categories_alter_product_slug.py @@ -0,0 +1,39 @@ +# Generated by Django 5.2.11 on 2026-02-21 19:12 + +from django.db import migrations, models + +import engine.core.utils.db + + +class Migration(migrations.Migration): + dependencies = [ + ("core", "0054_product_export_to_marketplaces"), + ] + + operations = [ + migrations.AlterField( + model_name="brand", + name="categories", + field=models.ManyToManyField( + blank=True, + help_text="DEPRECATED", + to="core.category", + verbose_name="DEPRECATED", + ), + ), + migrations.AlterField( + model_name="product", + name="slug", + field=engine.core.utils.db.TweakedAutoSlugField( + allow_unicode=True, + blank=True, + editable=False, + max_length=88, + null=True, + overwrite=True, + populate_from=("name", "brand__slug", "category__slug", "uuid"), + unique=True, + verbose_name="Slug", + ), + ), + ] diff --git a/engine/core/models.py b/engine/core/models.py index 5e0b9e3d..eaeaeb5b 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -664,7 +664,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): help_text=_("part number for this product"), verbose_name=_("part number"), ) - slug = AutoSlugField( + slug = TweakedAutoSlugField( populate_from=( "name", "brand__slug", From 236323b93b4133a52334d4cb73552979078a5698 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 22:26:04 +0300 Subject: [PATCH 22/30] feat(urls): add name to health_check route Add a name to the health_check URL pattern to improve readability and enable reverse lookups. --- schon/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/schon/urls.py b/schon/urls.py index 6b7f6c49..d86d4f4f 100644 --- a/schon/urls.py +++ b/schon/urls.py @@ -44,6 +44,7 @@ urlpatterns = [ ), ], ), + name="health_check", ), path( r"prometheus/", From b6d5409fa0cb617775c95505fbd96ecbc3741da1 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 22:33:08 +0300 Subject: [PATCH 23/30] fix(settings): update health check link to correct URL path Updated the `health_check` menu link to use the correct URL path, ensuring navigation works as expected. --- schon/settings/unfold.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schon/settings/unfold.py b/schon/settings/unfold.py index b7e20926..1f9eac98 100644 --- a/schon/settings/unfold.py +++ b/schon/settings/unfold.py @@ -49,7 +49,7 @@ UNFOLD: dict[str, Any] = { { "icon": "health_metrics", "title": _("Health"), - "link": reverse_lazy("health_check:health_check_home"), + "link": reverse_lazy("health_check"), }, { "title": _("Support"), From 1756c3f2b236c736d75c3db9d25fa184cb135fbf Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 22:45:04 +0300 Subject: [PATCH 24/30] feat(debug): integrate `django-debug-toolbar` for enhanced debugging Add `django-debug-toolbar` to assist with in-depth debugging during development. Updates were made to `settings`, `urls`, and dependency files to enable this feature. --- pyproject.toml | 2 ++ schon/settings/base.py | 17 +++++++++++++ schon/urls.py | 3 +++ uv.lock | 57 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 9d14ed1a..6fdf69eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ dependencies = [ "django-ratelimit==4.1.0", "django-storages==1.14.6", "django-unfold==0.80.2", + "django-debug-toolbar==6.2.0", "django-widget-tweaks==1.5.1", "djangorestframework==3.16.1", "djangorestframework-recursive==0.1.2", @@ -51,6 +52,7 @@ dependencies = [ "graphene-django==3.2.3", "graphene-file-upload==1.3.0", "httpx==0.28.1", + "opentelemetry-instrumentation-django==0.60b1", "paramiko==4.0.0", "pillow==12.1.1", "pip==26.0.1", diff --git a/schon/settings/base.py b/schon/settings/base.py index eda7898f..eb9e1901 100644 --- a/schon/settings/base.py +++ b/schon/settings/base.py @@ -159,6 +159,7 @@ INSTALLED_APPS: list[str] = [ if DEBUG: wn_app_index = INSTALLED_APPS.index("django.contrib.staticfiles") - 1 INSTALLED_APPS.insert(wn_app_index, "whitenoise.runserver_nostatic") + INSTALLED_APPS.append("debug_toolbar") MIDDLEWARE: list[str] = [ "schon.middleware.BlockInvalidHostMiddleware", @@ -179,6 +180,12 @@ MIDDLEWARE: list[str] = [ "django_prometheus.middleware.PrometheusAfterMiddleware", ] +if DEBUG: + MIDDLEWARE.insert( + MIDDLEWARE.index("django.contrib.sessions.middleware.SessionMiddleware"), + "debug_toolbar.middleware.DebugToolbarMiddleware", + ) + TEMPLATES: list[ dict[str, str | list[str | Path] | dict[str, str | list[str]] | Path | bool] ] = [ @@ -393,6 +400,16 @@ INTERNAL_IPS: list[str] = [ "127.0.0.1", ] +if DEBUG: + import socket + + # Docker: resolve container's gateway IP so debug toolbar works + try: + _, _, ips = socket.gethostbyname_ex(socket.gethostname()) + INTERNAL_IPS += [".".join(ip.split(".")[:-1] + ["1"]) for ip in ips] + except socket.gaierror: + pass + if getenv("SENTRY_DSN"): import sentry_sdk from sentry_sdk.integrations.celery import CeleryIntegration diff --git a/schon/urls.py b/schon/urls.py index d86d4f4f..f53214f0 100644 --- a/schon/urls.py +++ b/schon/urls.py @@ -115,4 +115,7 @@ urlpatterns = [ ] if settings.DEBUG: + from debug_toolbar.toolbar import debug_toolbar_urls + + urlpatterns += debug_toolbar_urls() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/uv.lock b/uv.lock index fa40991d..c56c6247 100644 --- a/uv.lock +++ b/uv.lock @@ -828,6 +828,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/6f/ff400d50fd71226e9d16a210c5d097bb797ec21879019ba260365d42e490/django_dbbackup-5.2.0-py3-none-any.whl", hash = "sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370", size = 35981, upload-time = "2026-02-11T04:47:38.081Z" }, ] +[[package]] +name = "django-debug-toolbar" +version = "6.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "sqlparse" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/4d/6acf660500d3d581bfc19460d9605cdf14c275640f35825da1329eaafafa/django_debug_toolbar-6.2.0.tar.gz", hash = "sha256:dc1c174d8fb0ea01435e02d9ceef735cf62daf37c1a6a5692d33b4127327679b", size = 313779, upload-time = "2026-01-20T12:38:25.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/04/e24611299a5ee0d4edfacf935b09cfb7d5d9cb653bd7b7883c3b43a6f90d/django_debug_toolbar-6.2.0-py3-none-any.whl", hash = "sha256:1575461954e6befa720e999dec13fe4f1cc8baf40b6c3ac2aec5f340c0f9c85f", size = 271354, upload-time = "2026-01-20T12:38:23.608Z" }, +] + [[package]] name = "django-elasticsearch-dsl" version = "8.2" @@ -2429,6 +2442,37 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/d2/6788e83c5c86a2690101681aeef27eeb2a6bf22df52d3f263a22cee20915/opentelemetry_instrumentation-0.60b1-py3-none-any.whl", hash = "sha256:04480db952b48fb1ed0073f822f0ee26012b7be7c3eac1a3793122737c78632d", size = 33096, upload-time = "2025-12-11T13:35:33.067Z" }, ] +[[package]] +name = "opentelemetry-instrumentation-django" +version = "0.60b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-instrumentation-wsgi" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-util-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/dc/a42fb5ff5c4ea8128d7c61a322e0cfbeae0fd204fc63a679f73caeec266e/opentelemetry_instrumentation_django-0.60b1.tar.gz", hash = "sha256:765b69c7ccdea7e9ebfd0b9e68387956b8f74816f3e39775d5b06a20f16b0522", size = 26599, upload-time = "2025-12-11T13:36:56.293Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/05/6b348ea989f7a9e1e6311fa653e113bd39f4506771323e27a639c2a1ea54/opentelemetry_instrumentation_django-0.60b1-py3-none-any.whl", hash = "sha256:3f6b4ba201eee35406dab965b254eed0c64fa1ef42e4a7b0296ad1b30e8e3f81", size = 21172, upload-time = "2025-12-11T13:35:57.365Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-wsgi" +version = "0.60b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-util-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/24/5632d31506a27650567fdff8f9be37fc4d98396b6331617be69bd332bf77/opentelemetry_instrumentation_wsgi-0.60b1.tar.gz", hash = "sha256:eb553eec7ebfcf2945cc10d787a265e7abadb9ed1d1ebce8b13988d44fa0cf45", size = 19167, upload-time = "2025-12-11T13:37:20.3Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/98/c637d9e5cab1355d6765de2304199a1d79a43aa94c33d8eddb475327d81a/opentelemetry_instrumentation_wsgi-0.60b1-py3-none-any.whl", hash = "sha256:5e7b432778ebf5a39af136227884a6ab2efc3c4e73e2dbb1d05ecf03ea196705", size = 14583, upload-time = "2025-12-11T13:36:33.164Z" }, +] + [[package]] name = "opentelemetry-sdk" version = "1.39.1" @@ -2456,6 +2500,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7a/5e/5958555e09635d09b75de3c4f8b9cae7335ca545d77392ffe7331534c402/opentelemetry_semantic_conventions-0.60b1-py3-none-any.whl", hash = "sha256:9fa8c8b0c110da289809292b0591220d3a7b53c1526a23021e977d68597893fb", size = 219982, upload-time = "2025-12-11T13:32:36.955Z" }, ] +[[package]] +name = "opentelemetry-util-http" +version = "0.60b1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/fc/c47bb04a1d8a941a4061307e1eddfa331ed4d0ab13d8a9781e6db256940a/opentelemetry_util_http-0.60b1.tar.gz", hash = "sha256:0d97152ca8c8a41ced7172d29d3622a219317f74ae6bb3027cfbdcf22c3cc0d6", size = 11053, upload-time = "2025-12-11T13:37:25.115Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/5c/d3f1733665f7cd582ef0842fb1d2ed0bc1fba10875160593342d22bba375/opentelemetry_util_http-0.60b1-py3-none-any.whl", hash = "sha256:66381ba28550c91bee14dcba8979ace443444af1ed609226634596b4b0faf199", size = 8947, upload-time = "2025-12-11T13:36:37.151Z" }, +] + [[package]] name = "orjson" version = "3.11.7" @@ -3296,6 +3349,7 @@ dependencies = [ { name = "django-constance" }, { name = "django-cors-headers" }, { name = "django-dbbackup" }, + { name = "django-debug-toolbar" }, { name = "django-elasticsearch-dsl" }, { name = "django-extensions" }, { name = "django-filter" }, @@ -3328,6 +3382,7 @@ dependencies = [ { name = "graphene-django" }, { name = "graphene-file-upload" }, { name = "httpx" }, + { name = "opentelemetry-instrumentation-django" }, { name = "paramiko" }, { name = "pillow" }, { name = "pip" }, @@ -3395,6 +3450,7 @@ requires-dist = [ { name = "django-constance", specifier = "==4.3.4" }, { name = "django-cors-headers", specifier = "==4.9.0" }, { name = "django-dbbackup", specifier = "==5.2.0" }, + { name = "django-debug-toolbar", specifier = "==6.2.0" }, { name = "django-elasticsearch-dsl", specifier = "==8.2" }, { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, @@ -3431,6 +3487,7 @@ requires-dist = [ { name = "httpx", specifier = "==0.28.1" }, { name = "jupyter", marker = "extra == 'jupyter'", specifier = "==1.1.1" }, { name = "openai", marker = "extra == 'openai'", specifier = "==2.21.0" }, + { name = "opentelemetry-instrumentation-django", specifier = "==0.60b1" }, { name = "paramiko", specifier = "==4.0.0" }, { name = "pillow", specifier = "==12.1.1" }, { name = "pip", specifier = "==26.0.1" }, From 069d416585a080507edc0d2fb01fe66b9b459514 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 23:44:15 +0300 Subject: [PATCH 25/30] refactor(monitoring): remove django-prometheus integration Replaced `django-prometheus` with the default Django components, including model mixins, database backends, and cache configuration. This change simplifies monitoring setup by removing unnecessary dependencies, reducing overhead, and improving compatibility. **Details:** - Removed Prometheus metrics endpoints and middleware. - Updated database, cache, and model configurations to remove `django-prometheus`. - Adjusted WSGI settings to integrate OpenTelemetry instrumentation instead of Prometheus. - Updated dependency files and migration schemas accordingly. --- .../0024_categorytag_category_tags.py | 6 +-- ...tionshipmanagementprovider_ordercrmlink.py | 11 +---- engine/core/models.py | 47 +++++++++---------- monitoring/prometheus.yml | 10 ---- pyproject.toml | 1 - schon/settings/base.py | 3 -- schon/settings/caches.py | 2 +- schon/settings/database.py | 2 +- schon/settings/drf.py | 1 - schon/urls.py | 6 --- schon/wsgi.py | 3 ++ uv.lock | 15 ------ 12 files changed, 30 insertions(+), 77 deletions(-) diff --git a/engine/core/migrations/0024_categorytag_category_tags.py b/engine/core/migrations/0024_categorytag_category_tags.py index 3de05258..7b696f40 100644 --- a/engine/core/migrations/0024_categorytag_category_tags.py +++ b/engine/core/migrations/0024_categorytag_category_tags.py @@ -1,7 +1,6 @@ import uuid import django_extensions.db.fields -import django_prometheus.models from django.db import migrations, models @@ -251,10 +250,7 @@ class Migration(migrations.Migration): "verbose_name": "category tag", "verbose_name_plural": "category tags", }, - bases=( - django_prometheus.models.ExportModelOperationsMixin("category_tag"), - models.Model, - ), + bases=(models.Model,), ), migrations.AddField( model_name="category", diff --git a/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py b/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py index a69e8f2d..45e2630e 100644 --- a/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py +++ b/engine/core/migrations/0040_customerrelationshipmanagementprovider_ordercrmlink.py @@ -2,7 +2,6 @@ import uuid import django.db.models.deletion import django_extensions.db.fields -import django_prometheus.models from django.db import migrations, models @@ -80,10 +79,7 @@ class Migration(migrations.Migration): "verbose_name": "order CRM link", "verbose_name_plural": "orders CRM links", }, - bases=( - django_prometheus.models.ExportModelOperationsMixin("crm_provider"), - models.Model, - ), + bases=(models.Model,), ), migrations.CreateModel( name="OrderCrmLink", @@ -148,9 +144,6 @@ class Migration(migrations.Migration): "verbose_name": "order CRM link", "verbose_name_plural": "orders CRM links", }, - bases=( - django_prometheus.models.ExportModelOperationsMixin("order_crm_link"), - models.Model, - ), + bases=(models.Model,), ), ] diff --git a/engine/core/models.py b/engine/core/models.py index eaeaeb5b..0bea4ec4 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -46,7 +46,6 @@ from django.utils.functional import cached_property from django.utils.http import urlsafe_base64_encode from django.utils.translation import gettext_lazy as _ from django_extensions.db.fields import AutoSlugField -from django_prometheus.models import ExportModelOperationsMixin from mptt.fields import TreeForeignKey from mptt.models import MPTTModel @@ -76,7 +75,7 @@ from schon.utils.misc import create_object logger = logging.getLogger(__name__) -class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): +class AttributeGroup(NiceModel): __doc__ = _( "Represents a group of attributes, which can be hierarchical." " This class is used to manage and organize attribute groups." @@ -109,7 +108,7 @@ class AttributeGroup(ExportModelOperationsMixin("attribute_group"), NiceModel): verbose_name_plural = _("attribute groups") -class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): +class Vendor(NiceModel): __doc__ = _( "Represents a vendor entity capable of storing information about external vendors and their interaction requirements." " The Vendor class is used to define and manage information related to an external vendor." @@ -193,7 +192,7 @@ class Vendor(ExportModelOperationsMixin("vendor"), NiceModel): ] -class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): +class ProductTag(NiceModel): __doc__ = _( "Represents a product tag used for classifying or identifying products." " The ProductTag class is designed to uniquely identify and classify products through a combination" @@ -225,7 +224,7 @@ class ProductTag(ExportModelOperationsMixin("product_tag"), NiceModel): verbose_name_plural = _("product tags") -class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): +class CategoryTag(NiceModel): __doc__ = _( "Represents a category tag used for products." " This class models a category tag that can be used to associate and classify products." @@ -256,7 +255,7 @@ class CategoryTag(ExportModelOperationsMixin("category_tag"), NiceModel): verbose_name_plural = _("category tags") -class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): +class Category(NiceModel, MPTTModel): __doc__ = _( "Represents a category entity to organize and group related items in a hierarchical structure." " Categories may have hierarchical relationships with other categories, supporting parent-child relationships." @@ -457,7 +456,7 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): ordering = ["tree_id", "lft"] -class Brand(ExportModelOperationsMixin("brand"), NiceModel): +class Brand(NiceModel): __doc__ = _( "Represents a Brand object in the system. " "This class handles information and attributes related to a brand, including its name, logos, " @@ -527,7 +526,7 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): verbose_name_plural = _("brands") -class Stock(ExportModelOperationsMixin("stock"), NiceModel): +class Stock(NiceModel): __doc__ = _( "Represents the stock of a product managed in the system." " This class provides details about the relationship between vendors, products, and their stock information, " @@ -595,7 +594,7 @@ class Stock(ExportModelOperationsMixin("stock"), NiceModel): verbose_name_plural = _("stock entries") -class Product(ExportModelOperationsMixin("product"), NiceModel): +class Product(NiceModel): __doc__ = _( "Represents a product with attributes such as category, brand, tags, digital status, name, description, part number, and slug." " Provides related utility properties to retrieve ratings, feedback counts, price, quantity, and total orders." @@ -767,7 +766,7 @@ class Product(ExportModelOperationsMixin("product"), NiceModel): return self.images.exists() -class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): +class Attribute(NiceModel): __doc__ = _( "Represents an attribute in the system." " This class is used to define and manage attributes," @@ -826,7 +825,7 @@ class Attribute(ExportModelOperationsMixin("attribute"), NiceModel): verbose_name_plural = _("attributes") -class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): +class AttributeValue(NiceModel): __doc__ = _( "Represents a specific value for an attribute that is linked to a product. " "It links the 'attribute' to a unique 'value', allowing " @@ -866,7 +865,7 @@ class AttributeValue(ExportModelOperationsMixin("attribute_value"), NiceModel): verbose_name_plural = _("attribute values") -class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): +class ProductImage(NiceModel): __doc__ = _( "Represents a product image associated with a product in the system. " "This class is designed to manage images for products, including functionality " @@ -920,7 +919,7 @@ class ProductImage(ExportModelOperationsMixin("product_image"), NiceModel): verbose_name_plural = _("product images") -class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): +class Promotion(NiceModel): __doc__ = _( "Represents a promotional campaign for products with a discount. " "This class is used to define and manage promotional campaigns that offer a " @@ -966,7 +965,7 @@ class Promotion(ExportModelOperationsMixin("promotion"), NiceModel): return str(self.id) -class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): +class Wishlist(NiceModel): __doc__ = _( "Represents a user's wishlist for storing and managing desired products. " "The class provides functionality to manage a collection of products, " @@ -1037,7 +1036,7 @@ class Wishlist(ExportModelOperationsMixin("wishlist"), NiceModel): return self -class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): +class Documentary(NiceModel): __doc__ = _( "Represents a documentary record tied to a product. " "This class is used to store information about documentaries related to specific " @@ -1068,7 +1067,7 @@ class Documentary(ExportModelOperationsMixin("attribute_group"), NiceModel): return self.document.name.split(".")[-1] or _("unresolved") -class Address(ExportModelOperationsMixin("address"), NiceModel): +class Address(NiceModel): __doc__ = _( "Represents an address entity that includes location details and associations with a user. " "Provides functionality for geographic and address data storage, as well " @@ -1133,7 +1132,7 @@ class Address(ExportModelOperationsMixin("address"), NiceModel): return f"{base} for {self.user.email}" if self.user else base -class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): +class PromoCode(NiceModel): __doc__ = _( "Represents a promotional code that can be used for discounts, managing its validity, " "type of discount, and application. " @@ -1264,7 +1263,7 @@ class PromoCode(ExportModelOperationsMixin("promocode"), NiceModel): return promo_amount -class Order(ExportModelOperationsMixin("order"), NiceModel): +class Order(NiceModel): __doc__ = _( "Represents an order placed by a user." " This class models an order within the application," @@ -1834,7 +1833,7 @@ class Order(ExportModelOperationsMixin("order"), NiceModel): return None -class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): +class Feedback(NiceModel): __doc__ = _( "Manages user feedback for products. " "This class is designed to capture and store user feedback for specific products " @@ -1883,7 +1882,7 @@ class Feedback(ExportModelOperationsMixin("feedback"), NiceModel): verbose_name_plural = _("feedbacks") -class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): +class OrderProduct(NiceModel): __doc__ = _( "Represents products associated with orders and their attributes. " "The OrderProduct model maintains information about a product that is part of an order, " @@ -2046,9 +2045,7 @@ class OrderProduct(ExportModelOperationsMixin("order_product"), NiceModel): return None -class CustomerRelationshipManagementProvider( - ExportModelOperationsMixin("crm_provider"), NiceModel -): +class CustomerRelationshipManagementProvider(NiceModel): name = CharField(max_length=128, unique=True, verbose_name=_("name")) integration_url = URLField( blank=True, null=True, help_text=_("URL of the integration") @@ -2091,7 +2088,7 @@ class CustomerRelationshipManagementProvider( verbose_name_plural = _("CRMs") -class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): +class OrderCrmLink(NiceModel): order = ForeignKey(to=Order, on_delete=PROTECT, related_name="crm_links") crm = ForeignKey( to=CustomerRelationshipManagementProvider, @@ -2108,7 +2105,7 @@ class OrderCrmLink(ExportModelOperationsMixin("order_crm_link"), NiceModel): verbose_name_plural = _("orders CRM links") -class DigitalAssetDownload(ExportModelOperationsMixin("attribute_group"), NiceModel): +class DigitalAssetDownload(NiceModel): __doc__ = _( "Represents the downloading functionality for digital assets associated with orders. " "The DigitalAssetDownload class provides the ability to manage and access " diff --git a/monitoring/prometheus.yml b/monitoring/prometheus.yml index d584994e..3bc38742 100644 --- a/monitoring/prometheus.yml +++ b/monitoring/prometheus.yml @@ -3,16 +3,6 @@ global: evaluation_interval: 15s scrape_configs: - - job_name: 'app' - metrics_path: /prometheus/metrics - scheme: http - static_configs: - - targets: [ 'app:8000' ] - - - job_name: 'worker' - static_configs: - - targets: [ 'worker:8888' ] - - job_name: 'database' static_configs: - targets: [ 'database_exporter:9187' ] diff --git a/pyproject.toml b/pyproject.toml index 6fdf69eb..f9e7b415 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,7 +29,6 @@ dependencies = [ "django-md-field==0.1.0", "django-modeltranslation==0.19.19", "django-mptt==0.18.0", - "django-prometheus==2.4.1", "django-redis==6.0.0", "django-ratelimit==4.1.0", "django-storages==1.14.6", diff --git a/schon/settings/base.py b/schon/settings/base.py index eb9e1901..56fb8fcb 100644 --- a/schon/settings/base.py +++ b/schon/settings/base.py @@ -108,7 +108,6 @@ UNSAFE_CACHE_KEYS: list[str] = [] SITE_ID: int = 1 INSTALLED_APPS: list[str] = [ - "django_prometheus", "unfold", "unfold.contrib.filters", "unfold.contrib.forms", @@ -164,7 +163,6 @@ if DEBUG: MIDDLEWARE: list[str] = [ "schon.middleware.BlockInvalidHostMiddleware", "schon.middleware.RateLimitMiddleware", - "django_prometheus.middleware.PrometheusBeforeMiddleware", "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", @@ -177,7 +175,6 @@ MIDDLEWARE: list[str] = [ "django.middleware.clickjacking.XFrameOptionsMiddleware", "schon.middleware.CustomLocaleMiddleware", "schon.middleware.CamelCaseMiddleWare", - "django_prometheus.middleware.PrometheusAfterMiddleware", ] if DEBUG: diff --git a/schon/settings/caches.py b/schon/settings/caches.py index 024c2e7a..fe6f6334 100644 --- a/schon/settings/caches.py +++ b/schon/settings/caches.py @@ -5,7 +5,7 @@ from schon.settings.base import REDIS_PASSWORD CACHES = { "default": { - "BACKEND": "django_prometheus.cache.backends.redis.RedisCache", + "BACKEND": "django_redis.cache.RedisCache", "LOCATION": getenv( "CELERY_BROKER_URL", f"redis://:{REDIS_PASSWORD}@redis:6379/0" ), diff --git a/schon/settings/database.py b/schon/settings/database.py index 80a8858f..21e7bdbb 100644 --- a/schon/settings/database.py +++ b/schon/settings/database.py @@ -2,7 +2,7 @@ from os import getenv DATABASES = { "default": { - "ENGINE": "django_prometheus.db.backends.postgis", + "ENGINE": "django.contrib.gis.db.backends.postgis", "NAME": getenv("POSTGRES_DB"), "USER": getenv("POSTGRES_USER"), "PASSWORD": getenv("POSTGRES_PASSWORD"), diff --git a/schon/settings/drf.py b/schon/settings/drf.py index 02bcc0ec..2a52c554 100644 --- a/schon/settings/drf.py +++ b/schon/settings/drf.py @@ -88,7 +88,6 @@ The API supports multiple response formats: ## Health & Monitoring - Health checks: `/health/` -- Prometheus metrics: `/prometheus/metrics/` ## Version Current API version: {version} diff --git a/schon/urls.py b/schon/urls.py index f53214f0..5be556fe 100644 --- a/schon/urls.py +++ b/schon/urls.py @@ -46,12 +46,6 @@ urlpatterns = [ ), name="health_check", ), - path( - r"prometheus/", - include( - "django_prometheus.urls", - ), - ), path( r"i18n/setlang/", set_language, diff --git a/schon/wsgi.py b/schon/wsgi.py index ed51a3e0..80d47000 100644 --- a/schon/wsgi.py +++ b/schon/wsgi.py @@ -10,7 +10,10 @@ https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/ import os from django.core.wsgi import get_wsgi_application +from opentelemetry.instrumentation.django import DjangoInstrumentor os.environ.setdefault("DJANGO_SETTINGS_MODULE", "schon.settings") +DjangoInstrumentor().instrument() + application = get_wsgi_application() diff --git a/uv.lock b/uv.lock index c56c6247..c6464e18 100644 --- a/uv.lock +++ b/uv.lock @@ -980,19 +980,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/51/9e/78aad58a90f2e4d0c898eeadd2f2b720bcae29b43676dd37c2b627c4c6c6/django_mptt-0.18.0-py3-none-any.whl", hash = "sha256:bfa3f01627e3966a1df901aeca74570a3e933e66809ebf58d9df673e63627afb", size = 120157, upload-time = "2025-08-26T09:27:02.168Z" }, ] -[[package]] -name = "django-prometheus" -version = "2.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, - { name = "prometheus-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/f4/cb39ddd2a41e07a274c4e162c076e906ae232d63b66bbabdea0300878877/django_prometheus-2.4.1.tar.gz", hash = "sha256:073628243d2a6de6a8a8c20e5b512872dfb85d66e1b60b28bcf1eca0155dad95", size = 24464, upload-time = "2025-06-25T15:45:37.149Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/50/9c5e022fa92574e5d20606687f15a2aa255e10512a17d11a8216fa117f72/django_prometheus-2.4.1-py2.py3-none-any.whl", hash = "sha256:7fe5af7f7c9ad9cd8a429fe0f3f1bf651f0e244f77162147869eab7ec09cc5e7", size = 29541, upload-time = "2025-06-25T15:45:35.433Z" }, -] - [[package]] name = "django-ratelimit" version = "4.1.0" @@ -3360,7 +3347,6 @@ dependencies = [ { name = "django-model-utils" }, { name = "django-modeltranslation" }, { name = "django-mptt" }, - { name = "django-prometheus" }, { name = "django-ratelimit" }, { name = "django-redis" }, { name = "django-storages" }, @@ -3461,7 +3447,6 @@ requires-dist = [ { name = "django-model-utils", specifier = "==5.0.0" }, { name = "django-modeltranslation", specifier = "==0.19.19" }, { name = "django-mptt", specifier = "==0.18.0" }, - { name = "django-prometheus", specifier = "==2.4.1" }, { name = "django-ratelimit", specifier = "==4.1.0" }, { name = "django-redis", specifier = "==6.0.0" }, { name = "django-storages", specifier = "==1.14.6" }, From 7efc19e081dcb2ced7d338cc94d9a4bd0a112c75 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sun, 22 Feb 2026 00:17:55 +0300 Subject: [PATCH 26/30] feat(monitoring): automate Prometheus web config generation Remove manual password hashing and web.yml setup in favor of automated generation. Add scripts for both Unix and Windows to create `monitoring/web.yml` using credentials from `.env`. This improves maintainability and reduces manual intervention during setup and configuration. --- .gitignore | 1 + monitoring/generate_prometheus_password.py | 9 ------ monitoring/web.yml | 2 -- scripts/Unix/install.sh | 4 +++ scripts/Unix/restart.sh | 4 +++ scripts/Unix/run.sh | 4 +++ scripts/Windows/install.ps1 | 4 +++ scripts/Windows/restart.ps1 | 4 +++ scripts/Windows/run.ps1 | 4 +++ scripts/lib/utils.ps1 | 37 ++++++++++++++++++++++ scripts/lib/utils.sh | 35 ++++++++++++++++++++ 11 files changed, 97 insertions(+), 11 deletions(-) delete mode 100644 monitoring/generate_prometheus_password.py delete mode 100644 monitoring/web.yml diff --git a/.gitignore b/.gitignore index a7c84269..66ea8e6d 100644 --- a/.gitignore +++ b/.gitignore @@ -194,6 +194,7 @@ engine/core/vendors/docs/* .initialized ./queries ./nginx.conf +monitoring/web.yml # AI assistants .claude/ diff --git a/monitoring/generate_prometheus_password.py b/monitoring/generate_prometheus_password.py deleted file mode 100644 index 57824c3f..00000000 --- a/monitoring/generate_prometheus_password.py +++ /dev/null @@ -1,9 +0,0 @@ -import getpass - -import bcrypt - -print( - bcrypt.hashpw( - getpass.getpass("Password: ").encode("utf-8"), bcrypt.gensalt() - ).decode() -) diff --git a/monitoring/web.yml b/monitoring/web.yml deleted file mode 100644 index 77702174..00000000 --- a/monitoring/web.yml +++ /dev/null @@ -1,2 +0,0 @@ -basic_auth_users: - schon: $2b$12$0HraDYmrZnJ089LcH9Vsn.Wv5V5a8oDlucTNm0.5obhULjPyLiYoy diff --git a/scripts/Unix/install.sh b/scripts/Unix/install.sh index 7ef3e258..6d6fe9b7 100755 --- a/scripts/Unix/install.sh +++ b/scripts/Unix/install.sh @@ -81,6 +81,10 @@ case "$install_choice" in fi log_success "Images built successfully" + # Generate Prometheus web config from .env + log_step "Generating Prometheus web config..." + generate_prometheus_web_config + echo log_result "Docker installation complete!" log_info "You can now use: make run" diff --git a/scripts/Unix/restart.sh b/scripts/Unix/restart.sh index 5c5b94dc..5023ceeb 100755 --- a/scripts/Unix/restart.sh +++ b/scripts/Unix/restart.sh @@ -3,6 +3,10 @@ set -euo pipefail source ./scripts/Unix/starter.sh +# Generate Prometheus web config from .env +log_step "Generating Prometheus web config..." +generate_prometheus_web_config + # Shutdown services log_step "Shutting down..." if ! output=$(docker compose down 2>&1); then diff --git a/scripts/Unix/run.sh b/scripts/Unix/run.sh index 26cc9161..0702e4ad 100755 --- a/scripts/Unix/run.sh +++ b/scripts/Unix/run.sh @@ -20,6 +20,10 @@ else log_warning "jq is not installed; skipping image verification step." fi +# Generate Prometheus web config from .env +log_step "Generating Prometheus web config..." +generate_prometheus_web_config + # Start services log_step "Spinning services up..." if ! output=$(docker compose up --no-build --detach --wait 2>&1); then diff --git a/scripts/Windows/install.ps1 b/scripts/Windows/install.ps1 index 12a59948..e066c89d 100644 --- a/scripts/Windows/install.ps1 +++ b/scripts/Windows/install.ps1 @@ -42,5 +42,9 @@ if ($LASTEXITCODE -ne 0) { } Write-Success "Images built successfully" +# Generate Prometheus web config from .env +Write-Step "Generating Prometheus web config..." +New-PrometheusWebConfig + Write-Result "" Write-Result "You can now use run.ps1 script or run: make run" diff --git a/scripts/Windows/restart.ps1 b/scripts/Windows/restart.ps1 index b16493f7..fd248985 100644 --- a/scripts/Windows/restart.ps1 +++ b/scripts/Windows/restart.ps1 @@ -10,6 +10,10 @@ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } +# Generate Prometheus web config from .env +Write-Step "Generating Prometheus web config..." +New-PrometheusWebConfig + # Shutdown services Write-Step "Shutting down..." $output = docker compose down 2>&1 diff --git a/scripts/Windows/run.ps1 b/scripts/Windows/run.ps1 index 53e08b91..9c75cf3e 100644 --- a/scripts/Windows/run.ps1 +++ b/scripts/Windows/run.ps1 @@ -35,6 +35,10 @@ foreach ($prop in $config.services.PSObject.Properties) Write-Info " Found image: $image" } +# Generate Prometheus web config from .env +Write-Step "Generating Prometheus web config..." +New-PrometheusWebConfig + # Start services Write-Step "Spinning services up..." $output = docker compose up --no-build --detach --wait 2>&1 diff --git a/scripts/lib/utils.ps1 b/scripts/lib/utils.ps1 index bc332c52..e320f22e 100644 --- a/scripts/lib/utils.ps1 +++ b/scripts/lib/utils.ps1 @@ -277,6 +277,43 @@ function Test-SystemRequirements return $true } +# Generate monitoring/web.yml from PROMETHEUS_USER and PROMETHEUS_PASSWORD in .env +function New-PrometheusWebConfig +{ + if (-not (Test-Path '.env')) { return } + + $envContent = Get-Content '.env' + $promUserLine = $envContent | Where-Object { $_ -match '^PROMETHEUS_USER=' } | Select-Object -First 1 + $promPassLine = $envContent | Where-Object { $_ -match '^PROMETHEUS_PASSWORD=' } | Select-Object -First 1 + + if (-not $promUserLine -or -not $promPassLine) { + Write-Warning-Custom "PROMETHEUS_USER or PROMETHEUS_PASSWORD not set in .env, skipping web.yml generation" + return + } + + $promUser = ($promUserLine -replace '^PROMETHEUS_USER=', '').Trim('"') + $promPassword = ($promPassLine -replace '^PROMETHEUS_PASSWORD=', '').Trim('"') + + if ([string]::IsNullOrEmpty($promUser) -or [string]::IsNullOrEmpty($promPassword)) { + Write-Warning-Custom "PROMETHEUS_USER or PROMETHEUS_PASSWORD is empty, skipping web.yml generation" + return + } + + $rawHash = docker run --rm httpd:2-alpine htpasswd -nbBC 12 "" "$promPassword" 2>$null + if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrEmpty($rawHash)) { + Write-Warning-Custom "Failed to generate Prometheus password hash" + return + } + + # htpasswd outputs ":$2y$..." - strip leading colon and whitespace + $hash = $rawHash.TrimStart(':').Trim() + + $content = "basic_auth_users:`n ${promUser}: ${hash}`n" + [System.IO.File]::WriteAllText((Join-Path $PWD 'monitoring/web.yml'), $content) + + Write-Success "Prometheus web config generated" +} + # Confirm action function Confirm-Action { diff --git a/scripts/lib/utils.sh b/scripts/lib/utils.sh index 2ad2426c..0805f3bf 100644 --- a/scripts/lib/utils.sh +++ b/scripts/lib/utils.sh @@ -201,6 +201,41 @@ check_system_requirements() { return 0 } +# Generate monitoring/web.yml from PROMETHEUS_USER and PROMETHEUS_PASSWORD in .env +generate_prometheus_web_config() { + if [ ! -f .env ]; then + return 0 + fi + + local prom_user prom_password + prom_user=$(grep '^PROMETHEUS_USER=' .env | head -1 | cut -d= -f2- | tr -d '"') + prom_password=$(grep '^PROMETHEUS_PASSWORD=' .env | head -1 | cut -d= -f2- | tr -d '"') + + if [ -z "$prom_user" ] || [ -z "$prom_password" ]; then + log_warning "PROMETHEUS_USER or PROMETHEUS_PASSWORD not set in .env, skipping web.yml generation" + return 0 + fi + + local raw_hash hash + raw_hash=$(docker run --rm httpd:2-alpine htpasswd -nbBC 12 "" "$prom_password" 2>/dev/null) + + if [ -z "$raw_hash" ]; then + log_warning "Failed to generate Prometheus password hash" + return 0 + fi + + # htpasswd outputs ":$2y$..." — strip leading colon and trailing whitespace + hash="${raw_hash#:}" + hash="${hash%%[[:space:]]*}" + + cat > monitoring/web.yml < Date: Wed, 25 Feb 2026 12:19:39 +0300 Subject: [PATCH 27/30] refactor(category): replace cache usage with model property for min/max price remove redundant cache lookups for `min_price` and `max_price` in the category model by leveraging cached properties. minimizes complexity and improves maintainability while ensuring consistent behavior. --- engine/core/graphene/object_types.py | 18 ++----- .../management/commands/clear_unwanted.py | 2 +- engine/core/management/commands/demo_data.py | 4 +- engine/core/models.py | 51 +++++++++++++++++-- engine/core/utils/commerce.py | 2 +- engine/core/vendors/__init__.py | 10 ++-- engine/core/views.py | 12 ++--- pyproject.toml | 6 +-- uv.lock | 42 +++++++-------- 9 files changed, 90 insertions(+), 57 deletions(-) diff --git a/engine/core/graphene/object_types.py b/engine/core/graphene/object_types.py index bc2b323a..cd0c9e0a 100644 --- a/engine/core/graphene/object_types.py +++ b/engine/core/graphene/object_types.py @@ -3,8 +3,7 @@ from contextlib import suppress from typing import Any from django.conf import settings -from django.core.cache import cache -from django.db.models import Max, Min, QuerySet +from django.db.models import QuerySet from django.utils.translation import gettext_lazy as _ from graphene import ( UUID, @@ -279,21 +278,10 @@ class CategoryType(DjangoObjectType): return self.filterable_attributes def resolve_min_max_prices(self: Category, _info): - min_max_prices = cache.get(key=f"{self.name}_min_max_prices", default={}) - - if not min_max_prices: - price_aggregation = Product.objects.filter(category=self).aggregate( - min_price=Min("stocks__price"), max_price=Max("stocks__price") - ) - min_max_prices["min_price"] = price_aggregation.get("min_price", 0.0) - min_max_prices["max_price"] = price_aggregation.get("max_price", 0.0) - cache.set( - key=f"{self.name}_min_max_prices", value=min_max_prices, timeout=86400 - ) return { - "min_price": min_max_prices["min_price"], - "max_price": min_max_prices["max_price"], + "min_price": self.min_price, + "max_price": self.max_price, } def resolve_brands(self: Category, info) -> QuerySet[Brand]: diff --git a/engine/core/management/commands/clear_unwanted.py b/engine/core/management/commands/clear_unwanted.py index c2ed53a8..d37853f9 100644 --- a/engine/core/management/commands/clear_unwanted.py +++ b/engine/core/management/commands/clear_unwanted.py @@ -14,7 +14,7 @@ class Command(BaseCommand): # Group stocks by (product, vendor) stocks_by_group = defaultdict(list) for stock in Stock.objects.all().order_by("modified"): - stocks_by_group[stock.product_pk].append(stock) + stocks_by_group[stock.product_pk].append(stock) # ty: ignore[possibly-missing-attribute] stock_deletions: list[str] = [] for group in stocks_by_group.values(): diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 6ab5c031..6699fcba 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -386,9 +386,9 @@ class Command(BaseCommand): if created: if "name_ru" in prod_data: - product.name_ru_ru = prod_data["name_ru"] + product.name_ru_ru = prod_data["name_ru"] # ty: ignore[invalid-assignment] if "description_ru" in prod_data: - product.description_ru_ru = prod_data["description_ru"] + product.description_ru_ru = prod_data["description_ru"] # ty: ignore[invalid-assignment] product.save() Stock.objects.create( diff --git a/engine/core/models.py b/engine/core/models.py index 0bea4ec4..0add9262 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -2,7 +2,7 @@ import datetime import json import logging from contextlib import suppress -from typing import Any, Iterable, Self +from typing import TYPE_CHECKING, Any, Iterable, Self from constance import config from django.conf import settings @@ -29,6 +29,7 @@ from django.db.models import ( JSONField, ManyToManyField, Max, + Min, OneToOneField, PositiveIntegerField, QuerySet, @@ -72,6 +73,9 @@ from engine.core.validators import validate_category_image_dimensions from engine.payments.models import Transaction from schon.utils.misc import create_object +if TYPE_CHECKING: + from django.db.models import Manager + logger = logging.getLogger(__name__) @@ -83,6 +87,9 @@ class AttributeGroup(NiceModel): " This can be useful for categorizing and managing attributes more effectively in acomplex system." ) + if TYPE_CHECKING: + attributes: Manager["Attribute"] + is_publicly_visible = True parent = ForeignKey( "self", @@ -266,6 +273,10 @@ class Category(NiceModel, MPTTModel): " as well as assign attributes like images, tags, or priority." ) + if TYPE_CHECKING: + products: Manager["Product"] + children: Manager["Category"] + is_publicly_visible = True image = ImageField( @@ -450,6 +461,20 @@ class Category(NiceModel, MPTTModel): is_active=True, ).distinct() + @cached_property + def min_price(self) -> float: + return ( + self.products.filter(is_active=True).aggregate(Min("price"))["price__min"] + or 0.0 + ) + + @cached_property + def max_price(self) -> float: + return ( + self.products.filter(is_active=True).aggregate(Max("price"))["price__max"] + or 0.0 + ) + class Meta: verbose_name = _("category") verbose_name_plural = _("categories") @@ -604,6 +629,12 @@ class Product(NiceModel): " its associated information within an application." ) + if TYPE_CHECKING: + images: Manager["ProductImage"] + stocks: Manager["Stock"] + attributes: Manager["AttributeValue"] + category_id: Any + is_publicly_visible = True category = ForeignKey( @@ -1274,6 +1305,10 @@ class Order(NiceModel): " Equally, functionality supports managing the products in the order lifecycle." ) + if TYPE_CHECKING: + order_products: Manager["OrderProduct"] + payments_transactions: Manager[Transaction] + is_publicly_visible = False billing_address = ForeignKey( @@ -1442,7 +1477,8 @@ class Order(NiceModel): if promotions.exists(): buy_price -= round( - product.price * (promotions.first().discount_percent / 100), 2 + product.price * (promotions.first().discount_percent / 100), # ty: ignore[possibly-missing-attribute] + 2, ) order_product, is_created = OrderProduct.objects.get_or_create( @@ -1487,7 +1523,7 @@ class Order(NiceModel): order_product.delete() return self if order_product.quantity == 1: - self.order_products.remove(order_product) + self.order_products.remove(order_product) # ty: ignore[unresolved-attribute] order_product.delete() else: order_product.quantity -= 1 @@ -1510,7 +1546,7 @@ class Order(NiceModel): _("you cannot remove products from an order that is not a pending one") ) for order_product in self.order_products.all(): - self.order_products.remove(order_product) + self.order_products.remove(order_product) # ty: ignore[unresolved-attribute] order_product.delete() return self @@ -1522,7 +1558,7 @@ class Order(NiceModel): try: product = Product.objects.get(uuid=product_uuid) order_product = self.order_products.get(product=product, order=self) - self.order_products.remove(order_product) + self.order_products.remove(order_product) # ty: ignore[unresolved-attribute] order_product.delete() except Product.DoesNotExist as dne: name = "Product" @@ -1788,6 +1824,8 @@ class Order(NiceModel): crm_links = OrderCrmLink.objects.filter(order=self) if crm_links.exists(): crm_link = crm_links.first() + if not crm_link: + return False crm_integration = create_object( crm_link.crm.integration_location, crm_link.crm.name ) @@ -1894,6 +1932,9 @@ class OrderProduct(NiceModel): "and stores a reference to them." ) + if TYPE_CHECKING: + download: "DigitalAssetDownload" + is_publicly_visible = False buy_price = FloatField( diff --git a/engine/core/utils/commerce.py b/engine/core/utils/commerce.py index c52254e1..c5ca430d 100644 --- a/engine/core/utils/commerce.py +++ b/engine/core/utils/commerce.py @@ -174,7 +174,7 @@ def get_top_returned_products( p = product_by_id[pid] img = "" with suppress(Exception): - img = p.images.first().image_url if p.images.exists() else "" + img = p.images.first().image_url if p.images.exists() else "" # ty: ignore[possibly-missing-attribute] result.append( { "name": p.name, diff --git a/engine/core/vendors/__init__.py b/engine/core/vendors/__init__.py index 563c78f1..f027c6a5 100644 --- a/engine/core/vendors/__init__.py +++ b/engine/core/vendors/__init__.py @@ -8,7 +8,7 @@ from datetime import datetime from decimal import Decimal from io import BytesIO from math import ceil, log10 -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, TypeVar from constance import config from django.conf import settings @@ -36,6 +36,8 @@ from engine.payments.errors import RatesError from engine.payments.utils import get_rates from schon.utils.misc import LoggingError, LogLevel +_BrandOrCategory = TypeVar("_BrandOrCategory", Brand, Category) + if TYPE_CHECKING: from engine.core.models import OrderProduct @@ -320,8 +322,8 @@ class AbstractVendor(ABC): @staticmethod def _auto_resolver_helper( - model: type[Brand] | type[Category], resolving_name: str - ) -> Brand | Category | None: + model: type[_BrandOrCategory], resolving_name: str + ) -> _BrandOrCategory | None: """Internal helper for resolving Brand/Category by name with deduplication.""" queryset = model.objects.filter(name=resolving_name) if not queryset.exists(): @@ -672,6 +674,8 @@ class AbstractVendor(ABC): .order_by("uuid") .first() ) + if not attribute: + return None fields_to_update: list[str] = [] if not attribute.is_active: attribute.is_active = True diff --git a/engine/core/views.py b/engine/core/views.py index 908acc41..73fa36f9 100644 --- a/engine/core/views.py +++ b/engine/core/views.py @@ -607,7 +607,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context: product = Product.objects.filter(pk=wished_first["products"]).first() if product: img = ( - product.images.first().image_url if product.images.exists() else "" + product.images.first().image_url if product.images.exists() else "" # ty: ignore[possibly-missing-attribute] ) most_wished = { "name": product.name, @@ -631,7 +631,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context: if not pid or pid not in product_by_id: continue p = product_by_id[pid] - img = p.images.first().image_url if p.images.exists() else "" + img = p.images.first().image_url if p.images.exists() else "" # ty: ignore[possibly-missing-attribute] most_wished_list.append( { "name": p.name, @@ -687,10 +687,10 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context: .order_by("total_qty")[:5] ) for p in products: - qty = int(p.total_qty or 0) + qty = int(p.total_qty or 0) # ty: ignore[possibly-missing-attribute] img = "" with suppress(Exception): - img = p.images.first().image_url if p.images.exists() else "" + img = p.images.first().image_url if p.images.exists() else "" # ty: ignore[possibly-missing-attribute] low_stock_list.append( { "name": p.name, @@ -734,7 +734,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context: product = Product.objects.filter(pk=popular_first["product"]).first() if product: img = ( - product.images.first().image_url if product.images.exists() else "" + product.images.first().image_url if product.images.exists() else "" # ty: ignore[possibly-missing-attribute] ) most_popular = { "name": product.name, @@ -758,7 +758,7 @@ def dashboard_callback(request: HttpRequest, context: Context) -> Context: if not pid or pid not in product_by_id: continue p = product_by_id[pid] - img = p.images.first().image_url if p.images.exists() else "" + img = p.images.first().image_url if p.images.exists() else "" # ty: ignore[possibly-missing-attribute] most_popular_list.append( { "name": p.name, diff --git a/pyproject.toml b/pyproject.toml index f9e7b415..9e8e23df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ dependencies = [ "django-elasticsearch-dsl==8.2", "django-extensions==4.1", "django-filter==25.2", - "django-health-check==4.0.4", + "django-health-check==4.0.6", "django-import-export[all]==4.4.0", "django-json-widget==2.1.1", "django-model-utils==5.0.0", @@ -90,10 +90,10 @@ linting = [ "types-paramiko==4.0.0.20250822", "types-psutil==7.2.2.20260130", "types-pillow==10.2.0.20240822", - "types-docutils==0.22.3.20251115", + "types-docutils==0.22.3.20260223", "types-six==1.17.0.20251009", ] -openai = ["openai==2.21.0"] +openai = ["openai==2.24.0"] jupyter = ["jupyter==1.1.1"] [tool.uv] diff --git a/uv.lock b/uv.lock index c6464e18..48638237 100644 --- a/uv.lock +++ b/uv.lock @@ -388,11 +388,11 @@ wheels = [ [[package]] name = "certifi" -version = "2026.1.4" +version = "2026.2.25" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, ] [[package]] @@ -880,15 +880,15 @@ wheels = [ [[package]] name = "django-health-check" -version = "4.0.4" +version = "4.0.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, { name = "dnspython" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/dc/ea/5abd492cc9ea536edba5d436a84086f1c0fcdc66fd023a1f4cc086d39a56/django_health_check-4.0.4.tar.gz", hash = "sha256:b2349ff9d75dc52e203be20f461eabae6b203f2566e5ba888bc885168decaaa9", size = 20496, upload-time = "2026-02-18T13:08:42.442Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/fe/718725c58fd177cff0cfb8abe3010f2cad582713f2bc52eaf7120b750dec/django_health_check-4.0.6.tar.gz", hash = "sha256:03837041ba8a235e810e16218f2ef3feb372c4af72776fa3676c16435c72171c", size = 20763, upload-time = "2026-02-23T17:11:40.625Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/12/8f1fc3b2bd8516c4e71d988b1218543ab0ef3fd21545302bdaf91a57f50d/django_health_check-4.0.4-py3-none-any.whl", hash = "sha256:6c91efa2e3b4f4b280aa5646b6347385f57010314c395aa6af3f7c64f75cd1f8", size = 25476, upload-time = "2026-02-18T13:08:40.91Z" }, + { url = "https://files.pythonhosted.org/packages/3a/44/2fa6ec47c1c18159c094f7d00397a208b6311e8b26d603dd22ba6e79b99d/django_health_check-4.0.6-py3-none-any.whl", hash = "sha256:efba106bc4f92b1b084f3af751e9eeb0b5c1af77d0af212e432ede2ba8f1e94f", size = 25813, upload-time = "2026-02-23T17:11:39.419Z" }, ] [[package]] @@ -1920,7 +1920,7 @@ wheels = [ [[package]] name = "jupyterlab" -version = "4.5.4" +version = "4.5.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, @@ -1937,9 +1937,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7c/6b/21af7c0512bdf67e0c54c121779a1f2a97a164a7657e13fced79db8fa5a0/jupyterlab-4.5.4.tar.gz", hash = "sha256:c215f48d8e4582bd2920ad61cc6a40d8ebfef7e5a517ae56b8a9413c9789fdfb", size = 23943597, upload-time = "2026-02-11T00:26:55.308Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/2d/953a5612a34a3c799a62566a548e711d103f631672fd49650e0f2de80870/jupyterlab-4.5.5.tar.gz", hash = "sha256:eac620698c59eb810e1729909be418d9373d18137cac66637141abba613b3fda", size = 23968441, upload-time = "2026-02-23T18:57:34.339Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f5/9f/a70972ece62ead2d81acc6223188f6d18a92f665ccce17796a0cdea4fcf5/jupyterlab-4.5.4-py3-none-any.whl", hash = "sha256:cc233f70539728534669fb0015331f2a3a87656207b3bb2d07916e9289192f12", size = 12391867, upload-time = "2026-02-11T00:26:51.23Z" }, + { url = "https://files.pythonhosted.org/packages/b9/52/372d3494766d690dfdd286871bf5f7fb9a6c61f7566ccaa7153a163dd1df/jupyterlab-4.5.5-py3-none-any.whl", hash = "sha256:a35694a40a8e7f2e82f387472af24e61b22adcce87b5a8ab97a5d9c486202a6d", size = 12446824, upload-time = "2026-02-23T18:57:30.398Z" }, ] [[package]] @@ -2281,7 +2281,7 @@ wheels = [ [[package]] name = "notebook" -version = "7.5.3" +version = "7.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-server" }, @@ -2290,9 +2290,9 @@ dependencies = [ { name = "notebook-shim" }, { name = "tornado" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b8/cb/cc7f4df5cee315dd126a47eb60890690a0438d5e0dd40c32d60ce16de377/notebook-7.5.3.tar.gz", hash = "sha256:393ceb269cf9fdb02a3be607a57d7bd5c2c14604f1818a17dbeb38e04f98cbfa", size = 14073140, upload-time = "2026-01-26T07:28:36.605Z" } +sdist = { url = "https://files.pythonhosted.org/packages/78/08/9d446fbb49f95de316ea6d7f25d0a4bc95117dd574e35f405895ac706f29/notebook-7.5.4.tar.gz", hash = "sha256:b928b2ba22cb63aa83df2e0e76fe3697950a0c1c4a41b84ebccf1972b1bb5771", size = 14167892, upload-time = "2026-02-24T14:13:56.116Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/98/9286e7f35e5584ebb79f997f2fb0cb66745c86f6c5fccf15ba32aac5e908/notebook-7.5.3-py3-none-any.whl", hash = "sha256:c997bfa1a2a9eb58c9bbb7e77d50428befb1033dd6f02c482922e96851d67354", size = 14481744, upload-time = "2026-01-26T07:28:31.867Z" }, + { url = "https://files.pythonhosted.org/packages/59/01/05e5387b53e0f549212d5eff58845886f3827617b5c9409c966ddc07cb6d/notebook-7.5.4-py3-none-any.whl", hash = "sha256:860e31782b3d3a25ca0819ff039f5cf77845d1bf30c78ef9528b88b25e0a9850", size = 14578014, upload-time = "2026-02-24T14:13:52.274Z" }, ] [[package]] @@ -2358,7 +2358,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/97/73/8ade73f6749177003 [[package]] name = "openai" -version = "2.21.0" +version = "2.24.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2370,9 +2370,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/92/e5/3d197a0947a166649f566706d7a4c8f7fe38f1fa7b24c9bcffe4c7591d44/openai-2.21.0.tar.gz", hash = "sha256:81b48ce4b8bbb2cc3af02047ceb19561f7b1dc0d4e52d1de7f02abfd15aa59b7", size = 644374, upload-time = "2026-02-14T00:12:01.577Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/13/17e87641b89b74552ed408a92b231283786523edddc95f3545809fab673c/openai-2.24.0.tar.gz", hash = "sha256:1e5769f540dbd01cb33bc4716a23e67b9d695161a734aff9c5f925e2bf99a673", size = 658717, upload-time = "2026-02-24T20:02:07.958Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/56/0a89092a453bb2c676d66abee44f863e742b2110d4dbb1dbcca3f7e5fc33/openai-2.21.0-py3-none-any.whl", hash = "sha256:0bc1c775e5b1536c294eded39ee08f8407656537ccc71b1004104fe1602e267c", size = 1103065, upload-time = "2026-02-14T00:11:59.603Z" }, + { url = "https://files.pythonhosted.org/packages/c9/30/844dc675ee6902579b8eef01ed23917cc9319a1c9c0c14ec6e39340c96d0/openai-2.24.0-py3-none-any.whl", hash = "sha256:fed30480d7d6c884303287bde864980a4b137b60553ffbcf9ab4a233b7a73d94", size = 1120122, upload-time = "2026-02-24T20:02:05.669Z" }, ] [[package]] @@ -3440,7 +3440,7 @@ requires-dist = [ { name = "django-elasticsearch-dsl", specifier = "==8.2" }, { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, - { name = "django-health-check", specifier = "==4.0.4" }, + { name = "django-health-check", specifier = "==4.0.6" }, { name = "django-import-export", extras = ["all"], specifier = "==4.4.0" }, { name = "django-json-widget", specifier = "==2.1.1" }, { name = "django-md-field", specifier = "==0.1.0" }, @@ -3471,7 +3471,7 @@ requires-dist = [ { name = "graphene-file-upload", specifier = "==1.3.0" }, { name = "httpx", specifier = "==0.28.1" }, { name = "jupyter", marker = "extra == 'jupyter'", specifier = "==1.1.1" }, - { name = "openai", marker = "extra == 'openai'", specifier = "==2.21.0" }, + { name = "openai", marker = "extra == 'openai'", specifier = "==2.24.0" }, { name = "opentelemetry-instrumentation-django", specifier = "==0.60b1" }, { name = "paramiko", specifier = "==4.0.0" }, { name = "pillow", specifier = "==12.1.1" }, @@ -3490,7 +3490,7 @@ requires-dist = [ { name = "six", specifier = "==1.17.0" }, { name = "swapper", specifier = "==1.4.0" }, { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.16" }, - { name = "types-docutils", marker = "extra == 'linting'", specifier = "==0.22.3.20251115" }, + { name = "types-docutils", marker = "extra == 'linting'", specifier = "==0.22.3.20260223" }, { name = "types-paramiko", marker = "extra == 'linting'", specifier = "==4.0.0.20250822" }, { name = "types-pillow", marker = "extra == 'linting'", specifier = "==10.2.0.20240822" }, { name = "types-psutil", marker = "extra == 'linting'", specifier = "==7.2.2.20260130" }, @@ -3747,11 +3747,11 @@ wheels = [ [[package]] name = "types-docutils" -version = "0.22.3.20251115" +version = "0.22.3.20260223" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/d7/576ec24bf61a280f571e1f22284793adc321610b9bcfba1bf468cf7b334f/types_docutils-0.22.3.20251115.tar.gz", hash = "sha256:0f79ea6a7bd4d12d56c9f824a0090ffae0ea4204203eb0006392906850913e16", size = 56828, upload-time = "2025-11-15T02:59:57.371Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/33/92c0129283363e3b3ba270bf6a2b7d077d949d2f90afc4abaf6e73578563/types_docutils-0.22.3.20260223.tar.gz", hash = "sha256:e90e868da82df615ea2217cf36dff31f09660daa15fc0f956af53f89c1364501", size = 57230, upload-time = "2026-02-23T04:11:21.806Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/01/61ac9eb38f1f978b47443dc6fd2e0a3b0f647c2da741ddad30771f1b2b6f/types_docutils-0.22.3.20251115-py3-none-any.whl", hash = "sha256:c6e53715b65395d00a75a3a8a74e352c669bc63959e65a207dffaa22f4a2ad6e", size = 91951, upload-time = "2025-11-15T02:59:56.413Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c7/a4ae6a75d5b07d63089d5c04d450a0de4a5d48ffcb84b95659b22d3885fe/types_docutils-0.22.3.20260223-py3-none-any.whl", hash = "sha256:cc2d6b7560a28e351903db0989091474aa619ad287843a018324baee9c4d9a8f", size = 91969, upload-time = "2026-02-23T04:11:20.966Z" }, ] [[package]] From a1cc0cfd305eeaa3ef0923f8b9fb7a74a86e21f3 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 27 Feb 2026 18:05:27 +0300 Subject: [PATCH 28/30] feat(category): add min_price and max_price to serializer enable retrieval of min and max product prices for categories to support price range filters. fixed a typo in queryset filter for brands. --- engine/core/models.py | 4 ++-- engine/core/serializers/detail.py | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/engine/core/models.py b/engine/core/models.py index 0add9262..690f7014 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -456,8 +456,8 @@ class Category(NiceModel, MPTTModel): @cached_property def brands(self) -> QuerySet["Brand"]: return Brand.objects.filter( - products__category=self, - products__is_active=True, + product__category=self, + product__is_active=True, is_active=True, ).distinct() diff --git a/engine/core/serializers/detail.py b/engine/core/serializers/detail.py index 535704ac..14c97487 100644 --- a/engine/core/serializers/detail.py +++ b/engine/core/serializers/detail.py @@ -62,6 +62,8 @@ class CategoryDetailSerializer(ModelSerializer): children = SerializerMethodField() filterable_attributes = SerializerMethodField() brands = BrandSimpleSerializer(many=True, read_only=True) + min_price = SerializerMethodField() + max_price = SerializerMethodField() class Meta: model = Category @@ -98,6 +100,12 @@ class CategoryDetailSerializer(ModelSerializer): return list(serializer.data) return [] + def get_min_price(self, obj: Category): + return obj.min_price + + def get_max_price(self, obj: Category): + return obj.max_price + class BrandDetailSerializer(ModelSerializer): categories = CategorySimpleSerializer(many=True) From a59c5f59ddd7ca73746606c2feb40c23e31a059f Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 27 Feb 2026 18:47:14 +0300 Subject: [PATCH 29/30] feat(blog): enhance slug behavior and expand demo data attributes update `slug` field for `Post` model using `TweakedAutoSlugField` to improve auto-slug behavior with Unicode and additional options. Add detailed `attribute_values` to demo products for enriched metadata. Update dependencies for stability and features. --- .../blog/migrations/0009_alter_post_slug.py | 28 ++ engine/blog/models.py | 13 +- engine/core/fixtures/demo.json | 398 +++++++++++++++--- engine/core/management/commands/demo_data.py | 41 +- pyproject.toml | 8 +- uv.lock | 64 +-- 6 files changed, 457 insertions(+), 95 deletions(-) create mode 100644 engine/blog/migrations/0009_alter_post_slug.py diff --git a/engine/blog/migrations/0009_alter_post_slug.py b/engine/blog/migrations/0009_alter_post_slug.py new file mode 100644 index 00000000..1b886f71 --- /dev/null +++ b/engine/blog/migrations/0009_alter_post_slug.py @@ -0,0 +1,28 @@ +# Generated by Django 5.2.11 on 2026-02-27 15:43 + +from django.db import migrations + +import engine.core.utils.db + + +class Migration(migrations.Migration): + dependencies = [ + ("blog", "0008_alter_post_content_alter_post_content_ar_ar_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="post", + name="slug", + field=engine.core.utils.db.TweakedAutoSlugField( + allow_unicode=True, + blank=True, + editable=False, + max_length=88, + null=True, + overwrite=True, + populate_from="title", + unique=True, + ), + ), + ] diff --git a/engine/blog/models.py b/engine/blog/models.py index 23e9cdd7..5706d3a8 100644 --- a/engine/blog/models.py +++ b/engine/blog/models.py @@ -9,9 +9,9 @@ from django.db.models import ( TextField, ) from django.utils.translation import gettext_lazy as _ -from django_extensions.db.fields import AutoSlugField from engine.core.abstract import NiceModel +from engine.core.utils.db import TweakedAutoSlugField, unicode_slugify_function class Post(NiceModel): @@ -47,8 +47,15 @@ class Post(NiceModel): null=True, ) file = FileField(upload_to="posts/", blank=True, null=True) - slug = AutoSlugField( - populate_from="title", allow_unicode=True, unique=True, editable=False + slug = TweakedAutoSlugField( + populate_from="title", + slugify_function=unicode_slugify_function, + allow_unicode=True, + unique=True, + editable=False, + max_length=88, + overwrite=True, + null=True, ) tags = ManyToManyField(to="blog.PostTag", blank=True, related_name="posts") meta_description = CharField(max_length=150, blank=True, null=True) diff --git a/engine/core/fixtures/demo.json b/engine/core/fixtures/demo.json index c23f5f97..0624eb96 100644 --- a/engine/core/fixtures/demo.json +++ b/engine/core/fixtures/demo.json @@ -338,7 +338,13 @@ "partnumber": "DIA-RB-150-D-VVS1", "price": 18500, "purchase_price": 15000, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 1.5, + "Cut": {"en": "Round Brilliant", "ru": "Круглая бриллиантовая"}, + "Color Grade": "D", + "Clarity Grade": "VVS1" + } }, { "name": "Princess Cut Diamond 2.0ct E VS2", @@ -350,7 +356,13 @@ "partnumber": "DIA-PC-200-E-VS2", "price": 24000, "purchase_price": 19500, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 2.0, + "Cut": {"en": "Princess", "ru": "Принцесса"}, + "Color Grade": "E", + "Clarity Grade": "VS2" + } }, { "name": "Oval Diamond 1.2ct F IF", @@ -362,7 +374,13 @@ "partnumber": "DIA-OV-120-F-IF", "price": 28500, "purchase_price": 23000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 1.2, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": "F", + "Clarity Grade": "IF" + } }, { "name": "Cushion Cut Diamond 3.0ct G VS1", @@ -374,7 +392,13 @@ "partnumber": "DIA-CU-300-G-VS1", "price": 42000, "purchase_price": 35000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 3.0, + "Cut": {"en": "Cushion", "ru": "Кушон"}, + "Color Grade": "G", + "Clarity Grade": "VS1" + } }, { "name": "Emerald Cut Diamond 1.8ct D VVS2", @@ -386,7 +410,13 @@ "partnumber": "DIA-EM-180-D-VVS2", "price": 32000, "purchase_price": 26000, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 1.8, + "Cut": {"en": "Emerald", "ru": "Изумрудная"}, + "Color Grade": "D", + "Clarity Grade": "VVS2" + } }, { "name": "Fancy Yellow Diamond 2.5ct", @@ -398,7 +428,12 @@ "partnumber": "DIA-FY-250", "price": 65000, "purchase_price": 52000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 2.5, + "Cut": {"en": "Radiant", "ru": "Радиант"}, + "Color Grade": {"en": "Fancy Intense Yellow", "ru": "Фантазийный интенсивно-жёлтый"} + } }, { "name": "Pink Diamond 0.5ct Fancy Light", @@ -410,7 +445,14 @@ "partnumber": "DIA-PNK-050-FL", "price": 125000, "purchase_price": 100000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 0.5, + "Cut": {"en": "Pear", "ru": "Грушевидная"}, + "Color Grade": {"en": "Fancy Light Pink", "ru": "Фантазийный светло-розовый"}, + "Country of Origin": {"en": "Australia", "ru": "Австралия"}, + "Mine": {"en": "Argyle", "ru": "Аргайл"} + } }, { "name": "Burmese Ruby 2.5ct Pigeon Blood", @@ -422,7 +464,13 @@ "partnumber": "RUB-BUR-250-PB", "price": 125000, "purchase_price": 100000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 2.5, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": {"en": "Pigeon Blood", "ru": "Голубиная кровь"}, + "Country of Origin": {"en": "Myanmar", "ru": "Мьянма"} + } }, { "name": "Mozambique Ruby 1.8ct Vivid Red", @@ -434,7 +482,12 @@ "partnumber": "RUB-MOZ-180-VR", "price": 8500, "purchase_price": 6800, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 1.8, + "Color Grade": {"en": "Vivid Red", "ru": "Насыщенно-красный"}, + "Country of Origin": {"en": "Mozambique", "ru": "Мозамбик"} + } }, { "name": "Star Ruby 3.2ct Six-Ray", @@ -446,7 +499,13 @@ "partnumber": "RUB-STAR-320-SR", "price": 15000, "purchase_price": 12000, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 3.2, + "Cut": {"en": "Cabochon", "ru": "Кабошон"}, + "Color Grade": {"en": "Red", "ru": "Красный"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Kashmir Sapphire 3.0ct Cornflower Blue", @@ -458,7 +517,13 @@ "partnumber": "SAP-KAS-300-CB", "price": 185000, "purchase_price": 150000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 3.0, + "Color Grade": {"en": "Cornflower Blue", "ru": "Васильково-голубой"}, + "Country of Origin": {"en": "India", "ru": "Индия"}, + "Mine": {"en": "Kashmir", "ru": "Кашмир"} + } }, { "name": "Ceylon Sapphire 2.2ct Royal Blue", @@ -470,7 +535,12 @@ "partnumber": "SAP-CEY-220-RB", "price": 12500, "purchase_price": 10000, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 2.2, + "Color Grade": {"en": "Royal Blue", "ru": "Королевский синий"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Padparadscha Sapphire 1.5ct", @@ -482,7 +552,12 @@ "partnumber": "SAP-PAD-150", "price": 45000, "purchase_price": 36000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 1.5, + "Color Grade": {"en": "Pink-Orange", "ru": "Розово-оранжевый"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Yellow Sapphire 4.0ct Golden", @@ -494,7 +569,12 @@ "partnumber": "SAP-YEL-400-GD", "price": 6500, "purchase_price": 5200, - "quantity": 5 + "quantity": 5, + "attribute_values": { + "Carat Weight": 4.0, + "Color Grade": {"en": "Golden Yellow", "ru": "Золотисто-жёлтый"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Pink Sapphire 1.8ct Hot Pink", @@ -506,7 +586,12 @@ "partnumber": "SAP-PNK-180-HP", "price": 4200, "purchase_price": 3400, - "quantity": 6 + "quantity": 6, + "attribute_values": { + "Carat Weight": 1.8, + "Color Grade": {"en": "Hot Pink", "ru": "Ярко-розовый"}, + "Country of Origin": {"en": "Madagascar", "ru": "Мадагаскар"} + } }, { "name": "Colombian Emerald 2.8ct Muzo Green", @@ -518,7 +603,13 @@ "partnumber": "EME-COL-280-MZ", "price": 35000, "purchase_price": 28000, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 2.8, + "Color Grade": {"en": "Deep Green", "ru": "Глубокий зелёный"}, + "Country of Origin": {"en": "Colombia", "ru": "Колумбия"}, + "Mine": {"en": "Muzo", "ru": "Музо"} + } }, { "name": "Zambian Emerald 3.5ct Vivid Green", @@ -530,7 +621,12 @@ "partnumber": "EME-ZAM-350-VG", "price": 18500, "purchase_price": 15000, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 3.5, + "Color Grade": {"en": "Vivid Bluish-Green", "ru": "Насыщенный сине-зелёный"}, + "Country of Origin": {"en": "Zambia", "ru": "Замбия"} + } }, { "name": "Brazilian Emerald 1.2ct Medium Green", @@ -542,7 +638,12 @@ "partnumber": "EME-BRA-120-MG", "price": 2800, "purchase_price": 2200, - "quantity": 8 + "quantity": 8, + "attribute_values": { + "Carat Weight": 1.2, + "Color Grade": {"en": "Medium Green", "ru": "Средне-зелёный"}, + "Country of Origin": {"en": "Brazil", "ru": "Бразилия"} + } }, { "name": "Australian Black Opal 5.2ct", @@ -554,7 +655,13 @@ "partnumber": "OPL-BLK-520-LR", "price": 28000, "purchase_price": 22500, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 5.2, + "Cut": {"en": "Cabochon", "ru": "Кабошон"}, + "Country of Origin": {"en": "Australia", "ru": "Австралия"}, + "Mine": {"en": "Lightning Ridge", "ru": "Лайтнинг Ридж"} + } }, { "name": "Ethiopian Welo Opal 3.8ct", @@ -566,7 +673,12 @@ "partnumber": "OPL-ETH-380-WL", "price": 3500, "purchase_price": 2800, - "quantity": 5 + "quantity": 5, + "attribute_values": { + "Carat Weight": 3.8, + "Cut": {"en": "Cabochon", "ru": "Кабошон"}, + "Country of Origin": {"en": "Ethiopia", "ru": "Эфиопия"} + } }, { "name": "Boulder Opal 8.5ct", @@ -578,7 +690,12 @@ "partnumber": "OPL-BLD-850", "price": 4800, "purchase_price": 3800, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 8.5, + "Cut": {"en": "Freeform", "ru": "Свободная форма"}, + "Country of Origin": {"en": "Australia", "ru": "Австралия"} + } }, { "name": "Fire Opal 2.1ct Mexican Orange", @@ -590,7 +707,12 @@ "partnumber": "OPL-FIRE-210-MX", "price": 1200, "purchase_price": 950, - "quantity": 7 + "quantity": 7, + "attribute_values": { + "Carat Weight": 2.1, + "Color Grade": {"en": "Intense Orange", "ru": "Интенсивный оранжевый"}, + "Country of Origin": {"en": "Mexico", "ru": "Мексика"} + } }, { "name": "South Sea Pearl 14mm Golden", @@ -602,7 +724,12 @@ "partnumber": "PRL-SSG-14MM", "price": 8500, "purchase_price": 6800, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Dimensions (mm)": "14", + "Color Grade": {"en": "Golden", "ru": "Золотистый"}, + "Clarity Grade": "AAA" + } }, { "name": "Tahitian Pearl 12mm Peacock", @@ -614,7 +741,12 @@ "partnumber": "PRL-TAH-12MM-PC", "price": 3200, "purchase_price": 2500, - "quantity": 6 + "quantity": 6, + "attribute_values": { + "Dimensions (mm)": "12", + "Color Grade": {"en": "Peacock", "ru": "Павлиний"}, + "Country of Origin": {"en": "Tahiti", "ru": "Таити"} + } }, { "name": "Akoya Pearl Strand 7mm", @@ -626,7 +758,12 @@ "partnumber": "PRL-AKO-7MM-STR", "price": 4500, "purchase_price": 3600, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Dimensions (mm)": "7", + "Color Grade": {"en": "White with Rose Overtone", "ru": "Белый с розовым перламутром"}, + "Country of Origin": {"en": "Japan", "ru": "Япония"} + } }, { "name": "Freshwater Pearl Set", @@ -638,7 +775,11 @@ "partnumber": "PRL-FW-SET-10", "price": 850, "purchase_price": 680, - "quantity": 10 + "quantity": 10, + "attribute_values": { + "Dimensions (mm)": "9-10", + "Color Grade": {"en": "Multi-Pastel", "ru": "Мульти-пастельный"} + } }, { "name": "Siberian Amethyst 8.5ct Deep Purple", @@ -650,7 +791,13 @@ "partnumber": "AME-SIB-850-DP", "price": 1200, "purchase_price": 950, - "quantity": 5 + "quantity": 5, + "attribute_values": { + "Carat Weight": 8.5, + "Cut": {"en": "Cushion", "ru": "Кушон"}, + "Color Grade": {"en": "Deep Purple", "ru": "Тёмно-фиолетовый"}, + "Country of Origin": {"en": "Russia", "ru": "Россия"} + } }, { "name": "Uruguayan Amethyst 12.3ct", @@ -662,7 +809,12 @@ "partnumber": "AME-URU-1230", "price": 650, "purchase_price": 520, - "quantity": 8 + "quantity": 8, + "attribute_values": { + "Carat Weight": 12.3, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Country of Origin": {"en": "Uruguay", "ru": "Уругвай"} + } }, { "name": "Ametrine 6.8ct Bi-Color", @@ -674,7 +826,13 @@ "partnumber": "AME-TRI-680-BC", "price": 450, "purchase_price": 360, - "quantity": 6 + "quantity": 6, + "attribute_values": { + "Carat Weight": 6.8, + "Cut": {"en": "Emerald", "ru": "Изумрудная"}, + "Color Grade": {"en": "Bi-Color Purple/Gold", "ru": "Двухцветный фиолетовый/золотистый"}, + "Country of Origin": {"en": "Bolivia", "ru": "Боливия"} + } }, { "name": "Santa Maria Aquamarine 4.2ct", @@ -686,7 +844,12 @@ "partnumber": "AQU-SM-420", "price": 5500, "purchase_price": 4400, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 4.2, + "Color Grade": {"en": "Intense Blue", "ru": "Интенсивный голубой"}, + "Country of Origin": {"en": "Brazil", "ru": "Бразилия"} + } }, { "name": "Madagascar Aquamarine 7.5ct", @@ -698,7 +861,13 @@ "partnumber": "AQU-MAD-750", "price": 2200, "purchase_price": 1750, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 7.5, + "Cut": {"en": "Octagon", "ru": "Восьмиугольная"}, + "Color Grade": {"en": "Light Blue", "ru": "Светло-голубой"}, + "Country of Origin": {"en": "Madagascar", "ru": "Мадагаскар"} + } }, { "name": "Pakistani Aquamarine 15.2ct", @@ -710,7 +879,13 @@ "partnumber": "AQU-PAK-1520", "price": 4800, "purchase_price": 3850, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 15.2, + "Color Grade": {"en": "Medium Blue", "ru": "Средне-голубой"}, + "Country of Origin": {"en": "Pakistan", "ru": "Пакистан"}, + "Mine": {"en": "Shigar Valley", "ru": "Долина Шигар"} + } }, { "name": "AAA Tanzanite 5.8ct Vivid Blue", @@ -722,7 +897,13 @@ "partnumber": "TAN-AAA-580-VB", "price": 8500, "purchase_price": 6800, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 5.8, + "Cut": {"en": "Trillion", "ru": "Триллион"}, + "Color Grade": {"en": "Vivid Blue-Violet", "ru": "Насыщенный сине-фиолетовый"}, + "Country of Origin": {"en": "Tanzania", "ru": "Танзания"} + } }, { "name": "Tanzanite 3.2ct Blue-Violet", @@ -734,7 +915,13 @@ "partnumber": "TAN-320-BV", "price": 3200, "purchase_price": 2560, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 3.2, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": {"en": "Blue-Violet", "ru": "Сине-фиолетовый"}, + "Country of Origin": {"en": "Tanzania", "ru": "Танзания"} + } }, { "name": "Tanzanite Pair 2.0ct Each", @@ -746,7 +933,12 @@ "partnumber": "TAN-PAIR-200", "price": 5800, "purchase_price": 4650, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 2.0, + "Color Grade": {"en": "Blue-Violet", "ru": "Сине-фиолетовый"}, + "Country of Origin": {"en": "Tanzania", "ru": "Танзания"} + } }, { "name": "Paraiba Tourmaline 1.2ct Neon Blue", @@ -758,7 +950,12 @@ "partnumber": "TOU-PAR-120-NB", "price": 85000, "purchase_price": 68000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 1.2, + "Color Grade": {"en": "Neon Blue", "ru": "Неоново-голубой"}, + "Country of Origin": {"en": "Brazil", "ru": "Бразилия"} + } }, { "name": "Watermelon Tourmaline 8.5ct", @@ -770,7 +967,12 @@ "partnumber": "TOU-WM-850", "price": 1800, "purchase_price": 1450, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 8.5, + "Cut": {"en": "Slice", "ru": "Слайс"}, + "Color Grade": {"en": "Bi-Color Pink/Green", "ru": "Двухцветный розовый/зелёный"} + } }, { "name": "Rubellite Tourmaline 4.3ct", @@ -782,7 +984,12 @@ "partnumber": "TOU-RUB-430", "price": 3500, "purchase_price": 2800, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 4.3, + "Cut": {"en": "Cushion", "ru": "Кушон"}, + "Color Grade": {"en": "Raspberry Red", "ru": "Малиново-красный"} + } }, { "name": "Chrome Tourmaline 2.8ct", @@ -794,7 +1001,12 @@ "partnumber": "TOU-CHR-280", "price": 2200, "purchase_price": 1750, - "quantity": 5 + "quantity": 5, + "attribute_values": { + "Carat Weight": 2.8, + "Color Grade": {"en": "Intense Green", "ru": "Интенсивный зелёный"}, + "Country of Origin": {"en": "East Africa", "ru": "Восточная Африка"} + } }, { "name": "Indicolite Tourmaline 3.6ct", @@ -806,7 +1018,13 @@ "partnumber": "TOU-IND-360", "price": 2800, "purchase_price": 2250, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 3.6, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": {"en": "Teal Blue", "ru": "Сине-зелёный"}, + "Country of Origin": {"en": "Afghanistan", "ru": "Афганистан"} + } }, { "name": "Marquise Diamond 1.0ct D VVS2", @@ -818,7 +1036,13 @@ "partnumber": "DIA-MQ-100-D-VVS2", "price": 12500, "purchase_price": 10000, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 1.0, + "Cut": {"en": "Marquise", "ru": "Маркиз"}, + "Color Grade": "D", + "Clarity Grade": "VVS2" + } }, { "name": "Asscher Cut Diamond 2.2ct E VS1", @@ -830,7 +1054,13 @@ "partnumber": "DIA-AS-220-E-VS1", "price": 28000, "purchase_price": 22500, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 2.2, + "Cut": {"en": "Asscher", "ru": "Ашер"}, + "Color Grade": "E", + "Clarity Grade": "VS1" + } }, { "name": "Thai Ruby 1.5ct Vivid Red", @@ -842,7 +1072,12 @@ "partnumber": "RUB-THA-150-VR", "price": 6200, "purchase_price": 5000, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 1.5, + "Color Grade": {"en": "Vivid Red", "ru": "Насыщенно-красный"}, + "Country of Origin": {"en": "Thailand", "ru": "Таиланд"} + } }, { "name": "Burmese Ruby 1.0ct Unheated", @@ -854,7 +1089,13 @@ "partnumber": "RUB-BUR-100-UH", "price": 18000, "purchase_price": 14500, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 1.0, + "Color Grade": {"en": "Vivid Red", "ru": "Насыщенно-красный"}, + "Country of Origin": {"en": "Myanmar", "ru": "Мьянма"}, + "Mine": {"en": "Mogok", "ru": "Могок"} + } }, { "name": "Pink Sapphire Pair 1.2ct Each", @@ -866,7 +1107,13 @@ "partnumber": "SAP-PNK-PAIR-120", "price": 5800, "purchase_price": 4650, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 1.2, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": {"en": "Pink", "ru": "Розовый"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Afghan Emerald 1.8ct Panjshir", @@ -878,7 +1125,13 @@ "partnumber": "EME-AFG-180-PJ", "price": 12000, "purchase_price": 9600, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 1.8, + "Color Grade": {"en": "Vivid Green", "ru": "Яркий зелёный"}, + "Country of Origin": {"en": "Afghanistan", "ru": "Афганистан"}, + "Mine": {"en": "Panjshir", "ru": "Панджшер"} + } }, { "name": "Ethiopian Emerald 2.5ct Vivid", @@ -890,7 +1143,12 @@ "partnumber": "EME-ETH-250", "price": 9500, "purchase_price": 7600, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Carat Weight": 2.5, + "Color Grade": {"en": "Vivid Green", "ru": "Яркий зелёный"}, + "Country of Origin": {"en": "Ethiopia", "ru": "Эфиопия"} + } }, { "name": "Colombian Emerald Pair 1.0ct Each", @@ -902,7 +1160,13 @@ "partnumber": "EME-COL-PAIR-100", "price": 14000, "purchase_price": 11200, - "quantity": 2 + "quantity": 2, + "attribute_values": { + "Carat Weight": 1.0, + "Color Grade": {"en": "Deep Green", "ru": "Глубокий зелёный"}, + "Country of Origin": {"en": "Colombia", "ru": "Колумбия"}, + "Mine": {"en": "Muzo", "ru": "Музо"} + } }, { "name": "Ceylon Sapphire 5.0ct Unheated", @@ -914,7 +1178,13 @@ "partnumber": "SAP-CEY-500-UH", "price": 45000, "purchase_price": 36000, - "quantity": 1 + "quantity": 1, + "attribute_values": { + "Carat Weight": 5.0, + "Cut": {"en": "Cushion", "ru": "Кушон"}, + "Color Grade": {"en": "Medium-Deep Blue", "ru": "Средне-глубокий синий"}, + "Country of Origin": {"en": "Sri Lanka", "ru": "Шри-Ланка"} + } }, { "name": "Baroque South Sea Pearl 16mm White", @@ -926,7 +1196,13 @@ "partnumber": "PRL-BAR-16MM-WH", "price": 6500, "purchase_price": 5200, - "quantity": 3 + "quantity": 3, + "attribute_values": { + "Dimensions (mm)": "16", + "Cut": {"en": "Baroque", "ru": "Барочная"}, + "Color Grade": {"en": "White", "ru": "Белый"}, + "Clarity Grade": "AAA" + } }, { "name": "Madeira Citrine 8.5ct", @@ -938,7 +1214,12 @@ "partnumber": "AME-CIT-850-MD", "price": 950, "purchase_price": 760, - "quantity": 4 + "quantity": 4, + "attribute_values": { + "Carat Weight": 8.5, + "Cut": {"en": "Emerald", "ru": "Изумрудная"}, + "Color Grade": {"en": "Reddish-Orange", "ru": "Красновато-оранжевый"} + } }, { "name": "Rose de France Amethyst 14.0ct", @@ -950,7 +1231,12 @@ "partnumber": "AME-RDF-1400", "price": 420, "purchase_price": 340, - "quantity": 6 + "quantity": 6, + "attribute_values": { + "Carat Weight": 14.0, + "Cut": {"en": "Oval", "ru": "Овальная"}, + "Color Grade": {"en": "Lavender-Pink", "ru": "Лавандово-розовый"} + } }, { "name": "Prasiolite 11.2ct Green Amethyst", @@ -962,7 +1248,13 @@ "partnumber": "AME-PRS-1120", "price": 380, "purchase_price": 300, - "quantity": 5 + "quantity": 5, + "attribute_values": { + "Carat Weight": 11.2, + "Cut": {"en": "Cushion", "ru": "Кушон"}, + "Color Grade": {"en": "Mint Green", "ru": "Мятно-зелёный"}, + "Country of Origin": {"en": "Brazil", "ru": "Бразилия"} + } }, { "name": "Diamond Solitaire Engagement Ring", diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 6699fcba..195f4dca 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -16,6 +16,7 @@ from engine.core.models import ( Address, Attribute, AttributeGroup, + AttributeValue, Brand, Category, CategoryTag, @@ -32,7 +33,6 @@ from engine.payments.models import Balance from engine.vibes_auth.models import Group, User DEMO_EMAIL_DOMAIN = "wiseless.xyz" -DEMO_VENDOR_NAME = "GemDemo Global" DEMO_IMAGES_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_products_images" DEMO_BLOG_DIR = Path(settings.BASE_DIR) / "engine/core/fixtures/demo_blog_posts" @@ -211,11 +211,12 @@ class Command(BaseCommand): demo_users.delete() + demo_vendor_name = self.demo_data["vendor"]["name"] try: - vendor = Vendor.objects.get(name=DEMO_VENDOR_NAME) + vendor = Vendor.objects.get(name=demo_vendor_name) Stock.objects.filter(vendor=vendor).delete() vendor.delete() - self.stdout.write(f" Removed vendor: {DEMO_VENDOR_NAME}") + self.stdout.write(f" Removed vendor: {demo_vendor_name}") except Vendor.DoesNotExist: pass @@ -232,6 +233,10 @@ class Command(BaseCommand): if product_dir.exists() and not any(product_dir.iterdir()): shutil.rmtree(product_dir, ignore_errors=True) + # Delete OrderProducts referencing demo products (from non-demo users) + # to avoid ProtectedError since OrderProduct.product uses PROTECT + OrderProduct.objects.filter(product__in=products).delete() + products.delete() brand_names = [b["name"] for b in self.demo_data["brands"]] @@ -336,6 +341,17 @@ class Command(BaseCommand): attr.name_ru_ru = attr_data["name_ru"] attr.save() + attr_lookup = {} + for attr_data in data["attributes"]: + group = attr_groups.get(attr_data["group"]) + if group: + try: + attr_lookup[attr_data["name"]] = Attribute.objects.get( + group=group, name=attr_data["name"] + ) + except Attribute.DoesNotExist: + pass + brands = {} for brand_data in data["brands"]: brand, created = Brand.objects.get_or_create( @@ -403,6 +419,25 @@ class Command(BaseCommand): # Add product image self._add_product_image(product, prod_data["partnumber"]) + # Add attribute values + for attr_name, av_data in prod_data.get("attribute_values", {}).items(): + attr = attr_lookup.get(attr_name) + if attr: + if isinstance(av_data, dict): + value = str(av_data["en"]) + value_ru = av_data.get("ru") + else: + value = str(av_data) + value_ru = None + av, created = AttributeValue.objects.get_or_create( + product=product, + attribute=attr, + defaults={"value": value}, + ) + if created and value_ru: + av.value_ru_ru = value_ru # ty:ignore[invalid-assignment] + av.save() + def _find_image(self, partnumber: str, suffix: str = "") -> Path | None: extensions = (".jpg", ".jpeg", ".png", ".webp") for ext in extensions: diff --git a/pyproject.toml b/pyproject.toml index 9e8e23df..c6894bc4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -32,7 +32,7 @@ dependencies = [ "django-redis==6.0.0", "django-ratelimit==4.1.0", "django-storages==1.14.6", - "django-unfold==0.80.2", + "django-unfold==0.81.0", "django-debug-toolbar==6.2.0", "django-widget-tweaks==1.5.1", "djangorestframework==3.16.1", @@ -62,7 +62,7 @@ dependencies = [ "python-slugify==8.0.4", "psutil==7.2.2", "psycopg[binary]==3.3.3", - "redis==7.2.0", + "redis==7.2.1", "requests==2.32.5", "sentry-sdk[django,celery,opentelemetry]==2.53.0", "six==1.17.0", @@ -70,7 +70,7 @@ dependencies = [ "uvicorn==0.41.0", "zeep==4.3.2", "websockets==16.0", - "whitenoise==6.11.0", + "whitenoise==6.12.0", ] [project.optional-dependencies] @@ -81,7 +81,7 @@ worker = [ ] linting = [ "ty==0.0.16", - "ruff==0.15.2", + "ruff==0.15.4", "celery-types==0.24.0", "django-stubs==5.2.9", "djangorestframework-stubs==3.16.8", diff --git a/uv.lock b/uv.lock index 48638237..d59136d2 100644 --- a/uv.lock +++ b/uv.lock @@ -1056,14 +1056,14 @@ wheels = [ [[package]] name = "django-unfold" -version = "0.80.2" +version = "0.81.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/bb6273b4d88afcc37e7f5fa3c8386265eda8c89312f50d751e7450bec7bd/django_unfold-0.80.2.tar.gz", hash = "sha256:6d9baa1694f9c3f8c451ea6e00537375ae1c7832d3ad0110d0f576bd47dae3d1", size = 1111081, upload-time = "2026-02-18T09:25:27.251Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/96/54e3852a562fb5da3a626ae7992f2427945cadf7d45325b8dff42c418a3d/django_unfold-0.81.0.tar.gz", hash = "sha256:4746a2e78210d174c556b8dcf6cbc87642b86282a37406d820d6c1b4f6c160be", size = 1111379, upload-time = "2026-02-25T09:48:42.197Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/11/792187e14290dc7737a78905f6d7ab664da11bb2f29873b5152bdc14114a/django_unfold-0.80.2-py3-none-any.whl", hash = "sha256:9e9d98eb6bcbc58769a7e17b104fa17be88672fb0379e8ca26a4f978564b1b0b", size = 1226068, upload-time = "2026-02-18T09:25:28.853Z" }, + { url = "https://files.pythonhosted.org/packages/63/03/f3b11452636bcb8f8fb4b2daa3301781eca7ea1b2ee5781fdc888e315b43/django_unfold-0.81.0-py3-none-any.whl", hash = "sha256:7a800fcf7ac438ae473ffa51cdfbb22ef0e6e8455dad84ce1e1846ddd21deac9", size = 1226399, upload-time = "2026-02-25T09:48:40.646Z" }, ] [[package]] @@ -3148,11 +3148,11 @@ wheels = [ [[package]] name = "redis" -version = "7.2.0" +version = "7.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9f/32/6fac13a11e73e1bc67a2ae821a72bfe4c2d8c4c48f0267e4a952be0f1bae/redis-7.2.0.tar.gz", hash = "sha256:4dd5bf4bd4ae80510267f14185a15cba2a38666b941aff68cccf0256b51c1f26", size = 4901247, upload-time = "2026-02-16T17:16:22.797Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/31/1476f206482dd9bc53fdbbe9f6fbd5e05d153f18e54667ce839df331f2e6/redis-7.2.1.tar.gz", hash = "sha256:6163c1a47ee2d9d01221d8456bc1c75ab953cbda18cfbc15e7140e9ba16ca3a5", size = 4906735, upload-time = "2026-02-25T20:05:18.171Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/86/cf/f6180b67f99688d83e15c84c5beda831d1d341e95872d224f87ccafafe61/redis-7.2.0-py3-none-any.whl", hash = "sha256:01f591f8598e483f1842d429e8ae3a820804566f1c73dca1b80e23af9fba0497", size = 394898, upload-time = "2026-02-16T17:16:20.693Z" }, + { url = "https://files.pythonhosted.org/packages/ca/98/1dd1a5c060916cf21d15e67b7d6a7078e26e2605d5c37cbc9f4f5454c478/redis-7.2.1-py3-none-any.whl", hash = "sha256:49e231fbc8df2001436ae5252b3f0f3dc930430239bfeb6da4c7ee92b16e5d33", size = 396057, upload-time = "2026-02-25T20:05:16.533Z" }, ] [[package]] @@ -3295,27 +3295,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.2" +version = "0.15.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/04/eab13a954e763b0606f460443fcbf6bb5a0faf06890ea3754ff16523dce5/ruff-0.15.2.tar.gz", hash = "sha256:14b965afee0969e68bb871eba625343b8673375f457af4abe98553e8bbb98342", size = 4558148, upload-time = "2026-02-19T22:32:20.271Z" } +sdist = { url = "https://files.pythonhosted.org/packages/da/31/d6e536cdebb6568ae75a7f00e4b4819ae0ad2640c3604c305a0428680b0c/ruff-0.15.4.tar.gz", hash = "sha256:3412195319e42d634470cc97aa9803d07e9d5c9223b99bcb1518f0c725f26ae1", size = 4569550, upload-time = "2026-02-26T20:04:14.959Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/70/3a4dc6d09b13cb3e695f28307e5d889b2e1a66b7af9c5e257e796695b0e6/ruff-0.15.2-py3-none-linux_armv6l.whl", hash = "sha256:120691a6fdae2f16d65435648160f5b81a9625288f75544dc40637436b5d3c0d", size = 10430565, upload-time = "2026-02-19T22:32:41.824Z" }, - { url = "https://files.pythonhosted.org/packages/71/0b/bb8457b56185ece1305c666dc895832946d24055be90692381c31d57466d/ruff-0.15.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a89056d831256099658b6bba4037ac6dd06f49d194199215befe2bb10457ea5e", size = 10820354, upload-time = "2026-02-19T22:32:07.366Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c1/e0532d7f9c9e0b14c46f61b14afd563298b8b83f337b6789ddd987e46121/ruff-0.15.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e36dee3a64be0ebd23c86ffa3aa3fd3ac9a712ff295e192243f814a830b6bd87", size = 10170767, upload-time = "2026-02-19T22:32:13.188Z" }, - { url = "https://files.pythonhosted.org/packages/47/e8/da1aa341d3af017a21c7a62fb5ec31d4e7ad0a93ab80e3a508316efbcb23/ruff-0.15.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9fb47b6d9764677f8c0a193c0943ce9a05d6763523f132325af8a858eadc2b9", size = 10529591, upload-time = "2026-02-19T22:32:02.547Z" }, - { url = "https://files.pythonhosted.org/packages/93/74/184fbf38e9f3510231fbc5e437e808f0b48c42d1df9434b208821efcd8d6/ruff-0.15.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f376990f9d0d6442ea9014b19621d8f2aaf2b8e39fdbfc79220b7f0c596c9b80", size = 10260771, upload-time = "2026-02-19T22:32:36.938Z" }, - { url = "https://files.pythonhosted.org/packages/05/ac/605c20b8e059a0bc4b42360414baa4892ff278cec1c91fff4be0dceedefd/ruff-0.15.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dcc987551952d73cbf5c88d9fdee815618d497e4df86cd4c4824cc59d5dd75f", size = 11045791, upload-time = "2026-02-19T22:32:31.642Z" }, - { url = "https://files.pythonhosted.org/packages/fd/52/db6e419908f45a894924d410ac77d64bdd98ff86901d833364251bd08e22/ruff-0.15.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42a47fd785cbe8c01b9ff45031af875d101b040ad8f4de7bbb716487c74c9a77", size = 11879271, upload-time = "2026-02-19T22:32:29.305Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d8/7992b18f2008bdc9231d0f10b16df7dda964dbf639e2b8b4c1b4e91b83af/ruff-0.15.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbe9f49354866e575b4c6943856989f966421870e85cd2ac94dccb0a9dcb2fea", size = 11303707, upload-time = "2026-02-19T22:32:22.492Z" }, - { url = "https://files.pythonhosted.org/packages/d7/02/849b46184bcfdd4b64cde61752cc9a146c54759ed036edd11857e9b8443b/ruff-0.15.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7a672c82b5f9887576087d97be5ce439f04bbaf548ee987b92d3a7dede41d3a", size = 11149151, upload-time = "2026-02-19T22:32:44.234Z" }, - { url = "https://files.pythonhosted.org/packages/70/04/f5284e388bab60d1d3b99614a5a9aeb03e0f333847e2429bebd2aaa1feec/ruff-0.15.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:72ecc64f46f7019e2bcc3cdc05d4a7da958b629a5ab7033195e11a438403d956", size = 11091132, upload-time = "2026-02-19T22:32:24.691Z" }, - { url = "https://files.pythonhosted.org/packages/fa/ae/88d844a21110e14d92cf73d57363fab59b727ebeabe78009b9ccb23500af/ruff-0.15.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8dcf243b15b561c655c1ef2f2b0050e5d50db37fe90115507f6ff37d865dc8b4", size = 10504717, upload-time = "2026-02-19T22:32:26.75Z" }, - { url = "https://files.pythonhosted.org/packages/64/27/867076a6ada7f2b9c8292884ab44d08fd2ba71bd2b5364d4136f3cd537e1/ruff-0.15.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dab6941c862c05739774677c6273166d2510d254dac0695c0e3f5efa1b5585de", size = 10263122, upload-time = "2026-02-19T22:32:10.036Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ef/faf9321d550f8ebf0c6373696e70d1758e20ccdc3951ad7af00c0956be7c/ruff-0.15.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b9164f57fc36058e9a6806eb92af185b0697c9fe4c7c52caa431c6554521e5c", size = 10735295, upload-time = "2026-02-19T22:32:39.227Z" }, - { url = "https://files.pythonhosted.org/packages/2f/55/e8089fec62e050ba84d71b70e7834b97709ca9b7aba10c1a0b196e493f97/ruff-0.15.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:80d24fcae24d42659db7e335b9e1531697a7102c19185b8dc4a028b952865fd8", size = 11241641, upload-time = "2026-02-19T22:32:34.617Z" }, - { url = "https://files.pythonhosted.org/packages/23/01/1c30526460f4d23222d0fabd5888868262fd0e2b71a00570ca26483cd993/ruff-0.15.2-py3-none-win32.whl", hash = "sha256:fd5ff9e5f519a7e1bd99cbe8daa324010a74f5e2ebc97c6242c08f26f3714f6f", size = 10507885, upload-time = "2026-02-19T22:32:15.635Z" }, - { url = "https://files.pythonhosted.org/packages/5c/10/3d18e3bbdf8fc50bbb4ac3cc45970aa5a9753c5cb51bf9ed9a3cd8b79fa3/ruff-0.15.2-py3-none-win_amd64.whl", hash = "sha256:d20014e3dfa400f3ff84830dfb5755ece2de45ab62ecea4af6b7262d0fb4f7c5", size = 11623725, upload-time = "2026-02-19T22:32:04.947Z" }, - { url = "https://files.pythonhosted.org/packages/6d/78/097c0798b1dab9f8affe73da9642bb4500e098cb27fd8dc9724816ac747b/ruff-0.15.2-py3-none-win_arm64.whl", hash = "sha256:cabddc5822acdc8f7b5527b36ceac55cc51eec7b1946e60181de8fe83ca8876e", size = 10941649, upload-time = "2026-02-19T22:32:18.108Z" }, + { url = "https://files.pythonhosted.org/packages/f2/82/c11a03cfec3a4d26a0ea1e571f0f44be5993b923f905eeddfc397c13d360/ruff-0.15.4-py3-none-linux_armv6l.whl", hash = "sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476acba17a332e0", size = 10453333, upload-time = "2026-02-26T20:04:20.093Z" }, + { url = "https://files.pythonhosted.org/packages/ce/5d/6a1f271f6e31dffb31855996493641edc3eef8077b883eaf007a2f1c2976/ruff-0.15.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a33992", size = 10853356, upload-time = "2026-02-26T20:04:05.808Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d8/0fab9f8842b83b1a9c2bf81b85063f65e93fb512e60effa95b0be49bfc54/ruff-0.15.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba", size = 10187434, upload-time = "2026-02-26T20:03:54.656Z" }, + { url = "https://files.pythonhosted.org/packages/85/cc/cc220fd9394eff5db8d94dec199eec56dd6c9f3651d8869d024867a91030/ruff-0.15.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2496488bdfd3732747558b6f95ae427ff066d1fcd054daf75f5a50674411e75", size = 10535456, upload-time = "2026-02-26T20:03:52.738Z" }, + { url = "https://files.pythonhosted.org/packages/fa/0f/bced38fa5cf24373ec767713c8e4cadc90247f3863605fb030e597878661/ruff-0.15.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3f1c4893841ff2d54cbda1b2860fa3260173df5ddd7b95d370186f8a5e66a4ac", size = 10287772, upload-time = "2026-02-26T20:04:08.138Z" }, + { url = "https://files.pythonhosted.org/packages/2b/90/58a1802d84fed15f8f281925b21ab3cecd813bde52a8ca033a4de8ab0e7a/ruff-0.15.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:820b8766bd65503b6c30aaa6331e8ef3a6e564f7999c844e9a547c40179e440a", size = 11049051, upload-time = "2026-02-26T20:04:03.53Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ac/b7ad36703c35f3866584564dc15f12f91cb1a26a897dc2fd13d7cb3ae1af/ruff-0.15.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9fb74bab47139c1751f900f857fa503987253c3ef89129b24ed375e72873e85", size = 11890494, upload-time = "2026-02-26T20:04:10.497Z" }, + { url = "https://files.pythonhosted.org/packages/93/3d/3eb2f47a39a8b0da99faf9c54d3eb24720add1e886a5309d4d1be73a6380/ruff-0.15.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f80c98765949c518142b3a50a5db89343aa90f2c2bf7799de9986498ae6176db", size = 11326221, upload-time = "2026-02-26T20:04:12.84Z" }, + { url = "https://files.pythonhosted.org/packages/ff/90/bf134f4c1e5243e62690e09d63c55df948a74084c8ac3e48a88468314da6/ruff-0.15.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:451a2e224151729b3b6c9ffb36aed9091b2996fe4bdbd11f47e27d8f2e8888ec", size = 11168459, upload-time = "2026-02-26T20:04:00.969Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e5/a64d27688789b06b5d55162aafc32059bb8c989c61a5139a36e1368285eb/ruff-0.15.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a8f157f2e583c513c4f5f896163a93198297371f34c04220daf40d133fdd4f7f", size = 11104366, upload-time = "2026-02-26T20:03:48.099Z" }, + { url = "https://files.pythonhosted.org/packages/f1/f6/32d1dcb66a2559763fc3027bdd65836cad9eb09d90f2ed6a63d8e9252b02/ruff-0.15.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:917cc68503357021f541e69b35361c99387cdbbf99bd0ea4aa6f28ca99ff5338", size = 10510887, upload-time = "2026-02-26T20:03:45.771Z" }, + { url = "https://files.pythonhosted.org/packages/ff/92/22d1ced50971c5b6433aed166fcef8c9343f567a94cf2b9d9089f6aa80fe/ruff-0.15.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e9737c8161da79fd7cfec19f1e35620375bd8b2a50c3e77fa3d2c16f574105cc", size = 10285939, upload-time = "2026-02-26T20:04:22.42Z" }, + { url = "https://files.pythonhosted.org/packages/e6/f4/7c20aec3143837641a02509a4668fb146a642fd1211846634edc17eb5563/ruff-0.15.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:291258c917539e18f6ba40482fe31d6f5ac023994ee11d7bdafd716f2aab8a68", size = 10765471, upload-time = "2026-02-26T20:03:58.924Z" }, + { url = "https://files.pythonhosted.org/packages/d0/09/6d2f7586f09a16120aebdff8f64d962d7c4348313c77ebb29c566cefc357/ruff-0.15.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:3f83c45911da6f2cd5936c436cf86b9f09f09165f033a99dcf7477e34041cbc3", size = 11263382, upload-time = "2026-02-26T20:04:24.424Z" }, + { url = "https://files.pythonhosted.org/packages/1b/fa/2ef715a1cd329ef47c1a050e10dee91a9054b7ce2fcfdd6a06d139afb7ec/ruff-0.15.4-py3-none-win32.whl", hash = "sha256:65594a2d557d4ee9f02834fcdf0a28daa8b3b9f6cb2cb93846025a36db47ef22", size = 10506664, upload-time = "2026-02-26T20:03:50.56Z" }, + { url = "https://files.pythonhosted.org/packages/d0/a8/c688ef7e29983976820d18710f955751d9f4d4eb69df658af3d006e2ba3e/ruff-0.15.4-py3-none-win_amd64.whl", hash = "sha256:04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f", size = 11651048, upload-time = "2026-02-26T20:04:17.191Z" }, + { url = "https://files.pythonhosted.org/packages/3e/0a/9e1be9035b37448ce2e68c978f0591da94389ade5a5abafa4cf99985d1b2/ruff-0.15.4-py3-none-win_arm64.whl", hash = "sha256:60d5177e8cfc70e51b9c5fad936c634872a74209f934c1e79107d11787ad5453", size = 10966776, upload-time = "2026-02-26T20:03:56.908Z" }, ] [[package]] @@ -3451,7 +3451,7 @@ requires-dist = [ { name = "django-redis", specifier = "==6.0.0" }, { name = "django-storages", specifier = "==1.14.6" }, { name = "django-stubs", marker = "extra == 'linting'", specifier = "==5.2.9" }, - { name = "django-unfold", specifier = "==0.80.2" }, + { name = "django-unfold", specifier = "==0.81.0" }, { name = "django-widget-tweaks", specifier = "==1.5.1" }, { name = "djangoql", specifier = "==0.19.1" }, { name = "djangorestframework", specifier = "==3.16.1" }, @@ -3483,9 +3483,9 @@ requires-dist = [ { name = "pytest", specifier = "==9.0.2" }, { name = "pytest-django", specifier = "==4.12.0" }, { name = "python-slugify", specifier = "==8.0.4" }, - { name = "redis", specifier = "==7.2.0" }, + { name = "redis", specifier = "==7.2.1" }, { name = "requests", specifier = "==2.32.5" }, - { name = "ruff", marker = "extra == 'linting'", specifier = "==0.15.2" }, + { name = "ruff", marker = "extra == 'linting'", specifier = "==0.15.4" }, { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.53.0" }, { name = "six", specifier = "==1.17.0" }, { name = "swapper", specifier = "==1.4.0" }, @@ -3499,7 +3499,7 @@ requires-dist = [ { name = "types-six", marker = "extra == 'linting'", specifier = "==1.17.0.20251009" }, { name = "uvicorn", specifier = "==0.41.0" }, { name = "websockets", specifier = "==16.0" }, - { name = "whitenoise", specifier = "==6.11.0" }, + { name = "whitenoise", specifier = "==6.12.0" }, { name = "zeep", specifier = "==4.3.2" }, ] provides-extras = ["worker", "linting", "openai", "jupyter"] @@ -4005,11 +4005,11 @@ wheels = [ [[package]] name = "whitenoise" -version = "6.11.0" +version = "6.12.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/95/8c81ec6b6ebcbf8aca2de7603070ccf37dbb873b03f20708e0f7c1664bc6/whitenoise-6.11.0.tar.gz", hash = "sha256:0f5bfce6061ae6611cd9396a8231e088722e4fc67bc13a111be74c738d99375f", size = 26432, upload-time = "2025-09-18T09:16:10.995Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/2a/55b3f3a4ec326cd077c1c3defeee656b9298372a69229134d930151acd01/whitenoise-6.12.0.tar.gz", hash = "sha256:f723ebb76a112e98816ff80fcea0a6c9b8ecde835f8ddda25df7a30a3c2db6ad", size = 26841, upload-time = "2026-02-27T00:05:42.028Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/e9/4366332f9295fe0647d7d3251ce18f5615fbcb12d02c79a26f8dba9221b3/whitenoise-6.11.0-py3-none-any.whl", hash = "sha256:b2aeb45950597236f53b5342b3121c5de69c8da0109362aee506ce88e022d258", size = 20197, upload-time = "2025-09-18T09:16:09.754Z" }, + { url = "https://files.pythonhosted.org/packages/db/eb/d5583a11486211f3ebd4b385545ae787f32363d453c19fffd81106c9c138/whitenoise-6.12.0-py3-none-any.whl", hash = "sha256:fc5e8c572e33ebf24795b47b6a7da8da3c00cff2349f5b04c02f28d0cc5a3cc2", size = 20302, upload-time = "2026-02-27T00:05:40.086Z" }, ] [[package]] From 79be6ed4e4e8527a52e06c4be44fde2e9951cecf Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Fri, 27 Feb 2026 19:02:55 +0300 Subject: [PATCH 30/30] feat(demo_data): use translation override to ensure consistent locale wraps actions in a `with override("en")` block to enforce the use of the English locale during execution. This ensures consistent behavior and message formatting regardless of the server's default language settings. --- engine/core/management/commands/demo_data.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 195f4dca..3858ab6e 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -10,6 +10,7 @@ from django.core.files.base import ContentFile from django.core.management.base import BaseCommand from django.db import transaction from django.utils import timezone +from django.utils.translation import override from engine.blog.models import Post, PostTag from engine.core.models import ( @@ -86,12 +87,13 @@ class Command(BaseCommand): self._load_demo_data() - if action == "install": - self._install(options) - elif action == "remove": - self._remove() - else: - self.stdout.write(self.style.ERROR(f"Unknown action: {action}")) + with override("en"): + if action == "install": + self._install(options) + elif action == "remove": + self._remove() + else: + self.stdout.write(self.style.ERROR(f"Unknown action: {action}")) @property def staff_user(self):

    c>*P9V)iW4gRlTvUOGA!o5DPWXUEFgD=M2NfYV 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�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 literal 0 HcmV?d00001 From 10f5c798d434d437cde2544f79b90cbc42c8ec8d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 18:08:22 +0300 Subject: [PATCH 14/30] style(demo_data): fix line break for product image save method Simplify readability by unifying the method call into a single line. No functional changes. --- engine/core/management/commands/demo_data.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/engine/core/management/commands/demo_data.py b/engine/core/management/commands/demo_data.py index 1f5213da..6ab5c031 100644 --- a/engine/core/management/commands/demo_data.py +++ b/engine/core/management/commands/demo_data.py @@ -443,9 +443,7 @@ class Command(BaseCommand): alt=product.name, priority=priority, ) - product_image.image.save( - image_path.name, ContentFile(image_content), save=True - ) + product_image.image.save(image_path.name, ContentFile(image_content), save=True) @transaction.atomic def _create_demo_users(self, count: int) -> list: From 87ed875fe64e35b6bc99b835ff79c465c1117598 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 18:27:10 +0300 Subject: [PATCH 15/30] feat(category): add brands relationship and resolve method enable brands association with categories and allow querying of active brands within a category. Updated GraphQL schema, models, and serializers to include this relationship while deprecating redundant category-to-brand ManyToManyField. --- engine/core/admin.py | 5 +---- engine/core/graphene/object_types.py | 5 +++++ engine/core/models.py | 12 ++++++++++-- engine/core/serializers/detail.py | 3 +++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/engine/core/admin.py b/engine/core/admin.py index 94df948e..d6f06de4 100644 --- a/engine/core/admin.py +++ b/engine/core/admin.py @@ -421,10 +421,7 @@ class BrandAdmin( "priority", "is_active", ) - list_filter = ( - "categories", - "is_active", - ) + list_filter = ("is_active",) search_fields = ( "uuid", "name", diff --git a/engine/core/graphene/object_types.py b/engine/core/graphene/object_types.py index 44ffffc3..bc2b323a 100644 --- a/engine/core/graphene/object_types.py +++ b/engine/core/graphene/object_types.py @@ -230,6 +230,7 @@ class CategoryType(DjangoObjectType): "minimum and maximum prices for products in this category, if available." ), ) + brands = List(lambda: BrandType, description=_("brands in this category")) tags = DjangoFilterConnectionField( lambda: CategoryTagType, description=_("tags for this category") ) @@ -249,6 +250,7 @@ class CategoryType(DjangoObjectType): "slug", "description", "image", + "brands", "min_max_prices", ) filter_fields = ["uuid"] @@ -294,6 +296,9 @@ class CategoryType(DjangoObjectType): "max_price": min_max_prices["max_price"], } + def resolve_brands(self: Category, info) -> QuerySet[Brand]: + return self.brands + def resolve_seo_meta(self: Category, info): lang = graphene_current_lang() base = f"https://{settings.BASE_DOMAIN}" diff --git a/engine/core/models.py b/engine/core/models.py index 55218d23..5e0b9e3d 100644 --- a/engine/core/models.py +++ b/engine/core/models.py @@ -443,6 +443,14 @@ class Category(ExportModelOperationsMixin("category"), NiceModel, MPTTModel): # Fallback to favicon.png from static files return static("favicon.png") + @cached_property + def brands(self) -> QuerySet["Brand"]: + return Brand.objects.filter( + products__category=self, + products__is_active=True, + is_active=True, + ).distinct() + class Meta: verbose_name = _("category") verbose_name_plural = _("categories") @@ -490,8 +498,8 @@ class Brand(ExportModelOperationsMixin("brand"), NiceModel): categories = ManyToManyField( "core.Category", blank=True, - help_text=_("optional categories that this brand is associated with"), - verbose_name=_("associated categories"), + help_text=_("DEPRECATED"), + verbose_name=_("DEPRECATED"), ) slug = AutoSlugField( populate_from=("name",), diff --git a/engine/core/serializers/detail.py b/engine/core/serializers/detail.py index ee3878a0..535704ac 100644 --- a/engine/core/serializers/detail.py +++ b/engine/core/serializers/detail.py @@ -26,6 +26,7 @@ from engine.core.models import ( Wishlist, ) from engine.core.serializers.simple import ( + BrandSimpleSerializer, CategorySimpleSerializer, ProductSimpleSerializer, ) @@ -60,6 +61,7 @@ class CategoryDetailListSerializer(ListSerializer): class CategoryDetailSerializer(ModelSerializer): children = SerializerMethodField() filterable_attributes = SerializerMethodField() + brands = BrandSimpleSerializer(many=True, read_only=True) class Meta: model = Category @@ -71,6 +73,7 @@ class CategoryDetailSerializer(ModelSerializer): "image", "markup_percent", "filterable_attributes", + "brands", "children", "slug", "created", From c728204cb1cfcef9801d915e75b99ebf63ae740c Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 19:49:47 +0300 Subject: [PATCH 16/30] chore(deps): update dependencies in `uv.lock` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit upgrade versions for `aiogram` (3.24.0 → 3.25.0), `async-lru` (2.1.0 → 2.2.0), `coverage` (7.13.3 → 7.13.4), and `cryptography` (46.0.4 → 46.0.5) to incorporate latest bug fixes and enhancements. --- engine/core/templatetags/filters.py | 29 ++ engine/core/vendors/__init__.py | 2 +- pyproject.toml | 32 +- uv.lock | 559 ++++++++++++++-------------- 4 files changed, 333 insertions(+), 289 deletions(-) diff --git a/engine/core/templatetags/filters.py b/engine/core/templatetags/filters.py index 4ef5c8de..d89b19ae 100644 --- a/engine/core/templatetags/filters.py +++ b/engine/core/templatetags/filters.py @@ -1,4 +1,6 @@ from django import template +from django.contrib.admin.helpers import Fieldset +from django.utils.text import slugify register = template.Library() @@ -7,3 +9,30 @@ register = template.Library() def endswith(value, arg): """Returns True if the value ends with the argument.""" return str(value).endswith(arg) + + +@register.filter +def unicode_slugify(value): + """Slugify that preserves non-ASCII characters (Russian, Chinese, etc.).""" + return slugify(str(value), allow_unicode=True) + + +@register.filter +def tabs_active_unicode(fieldsets: list[Fieldset]) -> str: + """Unicode-safe version of Unfold's tabs_active filter.""" + active = "" + + if len(fieldsets) > 0 and hasattr(fieldsets[0], "name"): + active = slugify(str(fieldsets[0].name), allow_unicode=True) + + for fieldset in fieldsets: + for field_line in fieldset: + for field in field_line: + if ( + not field.is_readonly + and field.errors() + and hasattr(fieldset, "name") + ): + active = slugify(str(fieldset.name), allow_unicode=True) + + return active diff --git a/engine/core/vendors/__init__.py b/engine/core/vendors/__init__.py index 1b10b38c..563c78f1 100644 --- a/engine/core/vendors/__init__.py +++ b/engine/core/vendors/__init__.py @@ -453,7 +453,7 @@ class AbstractVendor(ABC): # step back 1 to land on a “9” ending psychological = next_threshold - 1 - return float(psychological) + return float(psychological) if psychological > price else float(ceil(price)) def get_vendor_instance(self, safe: bool = False) -> Vendor | None: """ diff --git a/pyproject.toml b/pyproject.toml index 0a19e31d..d682e1ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,23 +6,23 @@ authors = [{ name = "fureunoir", email = "contact@fureunoir.com" }] readme = "README.md" requires-python = ">=3.12,<=3.13" dependencies = [ - "aiogram==3.24.0", + "aiogram==3.25.0", "aiosmtpd==1.4.6", "channels==4.3.2", "channels-redis==4.3.0", "colorlog==6.10.1", - "coverage==7.13.3", + "coverage==7.13.4", "click==8.3.1", - "cryptography==46.0.4", + "cryptography==46.0.5", "django==5.2.11", "django-cacheops==7.2", "django-constance==4.3.4", "django-cors-headers==4.9.0", - "django-dbbackup==5.1.2", + "django-dbbackup==5.2.0", "django-elasticsearch-dsl==8.2", "django-extensions==4.1", "django-filter==25.2", - "django-health-check==3.23.3", + "django-health-check==4.0.4", "django-import-export[all]==4.4.0", "django-json-widget==2.1.1", "django-model-utils==5.0.0", @@ -33,7 +33,7 @@ dependencies = [ "django-redis==6.0.0", "django-ratelimit==4.1.0", "django-storages==1.14.6", - "django-unfold==0.78.1", + "django-unfold==0.80.2", "django-widget-tweaks==1.5.1", "djangorestframework==3.16.1", "djangorestframework-recursive==0.1.2", @@ -46,27 +46,27 @@ dependencies = [ "drf-spectacular-websocket==1.3.1", "drf-orjson-renderer==1.8.0", "elasticsearch-dsl==8.18.0", - "filelock==3.20.3", + "filelock==3.24.3", "filetype==1.2.0", "graphene-django==3.2.3", "graphene-file-upload==1.3.0", "httpx==0.28.1", "paramiko==4.0.0", - "pillow==12.1.0", + "pillow==12.1.1", "pip==26.0.1", "polib==1.2.0", "PyJWT==2.11.0", "pytest==9.0.2", - "pytest-django==4.11.1", + "pytest-django==4.12.0", "python-slugify==8.0.4", "psutil==7.2.2", - "psycopg[binary]==3.3.2", - "redis==7.1.0", + "psycopg[binary]==3.3.3", + "redis==7.2.0", "requests==2.32.5", - "sentry-sdk[django,celery,opentelemetry]==2.52.0", + "sentry-sdk[django,celery,opentelemetry]==2.53.0", "six==1.17.0", "swapper==1.4.0", - "uvicorn==0.40.0", + "uvicorn==0.41.0", "zeep==4.3.2", "websockets==16.0", "whitenoise==6.11.0", @@ -79,8 +79,8 @@ worker = [ "django-celery-results==2.6.0", ] linting = [ - "ty==0.0.15", - "ruff==0.15.0", + "ty==0.0.18", + "ruff==0.15.2", "celery-types==0.24.0", "django-stubs==5.2.9", "djangorestframework-stubs==3.16.8", @@ -92,7 +92,7 @@ linting = [ "types-docutils==0.22.3.20251115", "types-six==1.17.0.20251009", ] -openai = ["openai==2.16.0"] +openai = ["openai==2.21.0"] jupyter = ["jupyter==1.1.1"] [tool.uv] diff --git a/uv.lock b/uv.lock index 448d00d8..9ab11f8d 100644 --- a/uv.lock +++ b/uv.lock @@ -18,7 +18,7 @@ wheels = [ [[package]] name = "aiogram" -version = "3.24.0" +version = "3.25.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -28,9 +28,9 @@ dependencies = [ { name = "pydantic" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/2f/04f47e81def8f2168679b1551e665e7ee02cf063e7bddace9fb5d1ce2f35/aiogram-3.24.0.tar.gz", hash = "sha256:ec547ede5bfa8a7a4f5fb02c75391333fc43b6f3de6a6d3f00a32e27628df5f6", size = 1713321, upload-time = "2026-01-02T00:56:55.3Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/31/360c4ce76e60e9e7bcdda1af1ab4331d78837fbb22847a62121ad32b7672/aiogram-3.25.0.tar.gz", hash = "sha256:8a8b0c34f8c4ca8a6501b954abb0eeba26743449e35e20b70c0d810347354c3c", size = 1721010, upload-time = "2026-02-10T21:50:25.473Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a5/7ba5f75b56f87a956b9e5a3e823bcbb5b55fc968914a16f3c7aa659cfc89/aiogram-3.24.0-py3-none-any.whl", hash = "sha256:eb3cc05b0ec53c7e24d7eada5c069aee2f431332e2e7bc2c8adf30d13b02f715", size = 706866, upload-time = "2026-01-02T00:56:53.115Z" }, + { url = "https://files.pythonhosted.org/packages/cf/be/1090252415e192687985517162dbdcee2ec4150cda1fa52bf57ae1f1c2a8/aiogram-3.25.0-py3-none-any.whl", hash = "sha256:0243966e93fbde14e90c0dfd0b3776c637ebf7ddcca2c7ee81ecbd68d9490cce", size = 713972, upload-time = "2026-02-10T21:50:23.253Z" }, ] [[package]] @@ -228,11 +228,11 @@ wheels = [ [[package]] name = "async-lru" -version = "2.1.0" +version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/c3/bbf34f15ea88dfb649ab2c40f9d75081784a50573a9ea431563cab64adb8/async_lru-2.1.0.tar.gz", hash = "sha256:9eeb2fecd3fe42cc8a787fc32ead53a3a7158cc43d039c3c55ab3e4e5b2a80ed", size = 12041, upload-time = "2026-01-17T22:52:18.931Z" } +sdist = { url = "https://files.pythonhosted.org/packages/05/8a/ca724066c32a53fa75f59e0f21aa822fdaa8a0dffa112d223634e3caabf9/async_lru-2.2.0.tar.gz", hash = "sha256:80abae2a237dbc6c60861d621619af39f0d920aea306de34cb992c879e01370c", size = 14654, upload-time = "2026-02-20T19:11:43.848Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/e9/eb6a5db5ac505d5d45715388e92bced7a5bb556facc4d0865d192823f2d2/async_lru-2.1.0-py3-none-any.whl", hash = "sha256:fa12dcf99a42ac1280bc16c634bbaf06883809790f6304d85cdab3f666f33a7e", size = 6933, upload-time = "2026-01-17T22:52:17.389Z" }, + { url = "https://files.pythonhosted.org/packages/13/5c/af990f019b8dd11c5492a6371fe74a5b0276357370030b67254a87329944/async_lru-2.2.0-py3-none-any.whl", hash = "sha256:e2c1cf731eba202b59c5feedaef14ffd9d02ad0037fcda64938699f2c380eafe", size = 7890, upload-time = "2026-02-20T19:11:42.273Z" }, ] [[package]] @@ -580,50 +580,56 @@ wheels = [ [[package]] name = "coverage" -version = "7.13.3" +version = "7.13.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/43/3e4ac666cc35f231fa70c94e9f38459299de1a152813f9d2f60fc5f3ecaf/coverage-7.13.3.tar.gz", hash = "sha256:f7f6182d3dfb8802c1747eacbfe611b669455b69b7c037484bb1efbbb56711ac", size = 826832, upload-time = "2026-02-03T14:02:30.944Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/56/95b7e30fa389756cb56630faa728da46a27b8c6eb46f9d557c68fff12b65/coverage-7.13.4.tar.gz", hash = "sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91", size = 827239, upload-time = "2026-02-09T12:59:03.86Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/44/330f8e83b143f6668778ed61d17ece9dc48459e9e74669177de02f45fec5/coverage-7.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ed48b4170caa2c4420e0cd27dc977caaffc7eecc317355751df8373dddcef595", size = 219441, upload-time = "2026-02-03T14:00:22.585Z" }, - { url = "https://files.pythonhosted.org/packages/08/e7/29db05693562c2e65bdf6910c0af2fd6f9325b8f43caf7a258413f369e30/coverage-7.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8f2adf4bcffbbec41f366f2e6dffb9d24e8172d16e91da5799c9b7ed6b5716e6", size = 219801, upload-time = "2026-02-03T14:00:24.186Z" }, - { url = "https://files.pythonhosted.org/packages/90/ae/7f8a78249b02b0818db46220795f8ac8312ea4abd1d37d79ea81db5cae81/coverage-7.13.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01119735c690786b6966a1e9f098da4cd7ca9174c4cfe076d04e653105488395", size = 251306, upload-time = "2026-02-03T14:00:25.798Z" }, - { url = "https://files.pythonhosted.org/packages/62/71/a18a53d1808e09b2e9ebd6b47dad5e92daf4c38b0686b4c4d1b2f3e42b7f/coverage-7.13.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8bb09e83c603f152d855f666d70a71765ca8e67332e5829e62cb9466c176af23", size = 254051, upload-time = "2026-02-03T14:00:27.474Z" }, - { url = "https://files.pythonhosted.org/packages/4a/0a/eb30f6455d04c5a3396d0696cad2df0269ae7444bb322f86ffe3376f7bf9/coverage-7.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b607a40cba795cfac6d130220d25962931ce101f2f478a29822b19755377fb34", size = 255160, upload-time = "2026-02-03T14:00:29.024Z" }, - { url = "https://files.pythonhosted.org/packages/7b/7e/a45baac86274ce3ed842dbb84f14560c673ad30535f397d89164ec56c5df/coverage-7.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:44f14a62f5da2e9aedf9080e01d2cda61df39197d48e323538ec037336d68da8", size = 251709, upload-time = "2026-02-03T14:00:30.641Z" }, - { url = "https://files.pythonhosted.org/packages/c0/df/dd0dc12f30da11349993f3e218901fdf82f45ee44773596050c8f5a1fb25/coverage-7.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:debf29e0b157769843dff0981cc76f79e0ed04e36bb773c6cac5f6029054bd8a", size = 253083, upload-time = "2026-02-03T14:00:32.14Z" }, - { url = "https://files.pythonhosted.org/packages/ab/32/fc764c8389a8ce95cb90eb97af4c32f392ab0ac23ec57cadeefb887188d3/coverage-7.13.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:824bb95cd71604031ae9a48edb91fd6effde669522f960375668ed21b36e3ec4", size = 251227, upload-time = "2026-02-03T14:00:34.721Z" }, - { url = "https://files.pythonhosted.org/packages/dd/ca/d025e9da8f06f24c34d2da9873957cfc5f7e0d67802c3e34d0caa8452130/coverage-7.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8f1010029a5b52dc427c8e2a8dbddb2303ddd180b806687d1acd1bb1d06649e7", size = 250794, upload-time = "2026-02-03T14:00:36.278Z" }, - { url = "https://files.pythonhosted.org/packages/45/c7/76bf35d5d488ec8f68682eb8e7671acc50a6d2d1c1182de1d2b6d4ffad3b/coverage-7.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cd5dee4fd7659d8306ffa79eeaaafd91fa30a302dac3af723b9b469e549247e0", size = 252671, upload-time = "2026-02-03T14:00:38.368Z" }, - { url = "https://files.pythonhosted.org/packages/bf/10/1921f1a03a7c209e1cb374f81a6b9b68b03cdb3ecc3433c189bc90e2a3d5/coverage-7.13.3-cp312-cp312-win32.whl", hash = "sha256:f7f153d0184d45f3873b3ad3ad22694fd73aadcb8cdbc4337ab4b41ea6b4dff1", size = 221986, upload-time = "2026-02-03T14:00:40.442Z" }, - { url = "https://files.pythonhosted.org/packages/3c/7c/f5d93297f8e125a80c15545edc754d93e0ed8ba255b65e609b185296af01/coverage-7.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:03a6e5e1e50819d6d7436f5bc40c92ded7e484e400716886ac921e35c133149d", size = 222793, upload-time = "2026-02-03T14:00:42.106Z" }, - { url = "https://files.pythonhosted.org/packages/43/59/c86b84170015b4555ebabca8649bdf9f4a1f737a73168088385ed0f947c4/coverage-7.13.3-cp312-cp312-win_arm64.whl", hash = "sha256:51c4c42c0e7d09a822b08b6cf79b3c4db8333fffde7450da946719ba0d45730f", size = 221410, upload-time = "2026-02-03T14:00:43.726Z" }, - { url = "https://files.pythonhosted.org/packages/81/f3/4c333da7b373e8c8bfb62517e8174a01dcc373d7a9083698e3b39d50d59c/coverage-7.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:853c3d3c79ff0db65797aad79dee6be020efd218ac4510f15a205f1e8d13ce25", size = 219468, upload-time = "2026-02-03T14:00:45.829Z" }, - { url = "https://files.pythonhosted.org/packages/d6/31/0714337b7d23630c8de2f4d56acf43c65f8728a45ed529b34410683f7217/coverage-7.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f75695e157c83d374f88dcc646a60cb94173304a9258b2e74ba5a66b7614a51a", size = 219839, upload-time = "2026-02-03T14:00:47.407Z" }, - { url = "https://files.pythonhosted.org/packages/12/99/bd6f2a2738144c98945666f90cae446ed870cecf0421c767475fcf42cdbe/coverage-7.13.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2d098709621d0819039f3f1e471ee554f55a0b2ac0d816883c765b14129b5627", size = 250828, upload-time = "2026-02-03T14:00:49.029Z" }, - { url = "https://files.pythonhosted.org/packages/6f/99/97b600225fbf631e6f5bfd3ad5bcaf87fbb9e34ff87492e5a572ff01bbe2/coverage-7.13.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16d23d6579cf80a474ad160ca14d8b319abaa6db62759d6eef53b2fc979b58c8", size = 253432, upload-time = "2026-02-03T14:00:50.655Z" }, - { url = "https://files.pythonhosted.org/packages/5f/5c/abe2b3490bda26bd4f5e3e799be0bdf00bd81edebedc2c9da8d3ef288fa8/coverage-7.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00d34b29a59d2076e6f318b30a00a69bf63687e30cd882984ed444e753990cc1", size = 254672, upload-time = "2026-02-03T14:00:52.757Z" }, - { url = "https://files.pythonhosted.org/packages/31/ba/5d1957c76b40daff53971fe0adb84d9c2162b614280031d1d0653dd010c1/coverage-7.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ab6d72bffac9deb6e6cb0f61042e748de3f9f8e98afb0375a8e64b0b6e11746b", size = 251050, upload-time = "2026-02-03T14:00:54.332Z" }, - { url = "https://files.pythonhosted.org/packages/69/dc/dffdf3bfe9d32090f047d3c3085378558cb4eb6778cda7de414ad74581ed/coverage-7.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e129328ad1258e49cae0123a3b5fcb93d6c2fa90d540f0b4c7cdcdc019aaa3dc", size = 252801, upload-time = "2026-02-03T14:00:56.121Z" }, - { url = "https://files.pythonhosted.org/packages/87/51/cdf6198b0f2746e04511a30dc9185d7b8cdd895276c07bdb538e37f1cd50/coverage-7.13.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2213a8d88ed35459bda71597599d4eec7c2ebad201c88f0bfc2c26fd9b0dd2ea", size = 250763, upload-time = "2026-02-03T14:00:58.719Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1a/596b7d62218c1d69f2475b69cc6b211e33c83c902f38ee6ae9766dd422da/coverage-7.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:00dd3f02de6d5f5c9c3d95e3e036c3c2e2a669f8bf2d3ceb92505c4ce7838f67", size = 250587, upload-time = "2026-02-03T14:01:01.197Z" }, - { url = "https://files.pythonhosted.org/packages/f7/46/52330d5841ff660f22c130b75f5e1dd3e352c8e7baef5e5fef6b14e3e991/coverage-7.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9bada7bc660d20b23d7d312ebe29e927b655cf414dadcdb6335a2075695bd86", size = 252358, upload-time = "2026-02-03T14:01:02.824Z" }, - { url = "https://files.pythonhosted.org/packages/36/8a/e69a5be51923097ba7d5cff9724466e74fe486e9232020ba97c809a8b42b/coverage-7.13.3-cp313-cp313-win32.whl", hash = "sha256:75b3c0300f3fa15809bd62d9ca8b170eb21fcf0100eb4b4154d6dc8b3a5bbd43", size = 222007, upload-time = "2026-02-03T14:01:04.876Z" }, - { url = "https://files.pythonhosted.org/packages/0a/09/a5a069bcee0d613bdd48ee7637fa73bc09e7ed4342b26890f2df97cc9682/coverage-7.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:a2f7589c6132c44c53f6e705e1a6677e2b7821378c22f7703b2cf5388d0d4587", size = 222812, upload-time = "2026-02-03T14:01:07.296Z" }, - { url = "https://files.pythonhosted.org/packages/3d/4f/d62ad7dfe32f9e3d4a10c178bb6f98b10b083d6e0530ca202b399371f6c1/coverage-7.13.3-cp313-cp313-win_arm64.whl", hash = "sha256:123ceaf2b9d8c614f01110f908a341e05b1b305d6b2ada98763b9a5a59756051", size = 221433, upload-time = "2026-02-03T14:01:09.156Z" }, - { url = "https://files.pythonhosted.org/packages/04/b2/4876c46d723d80b9c5b695f1a11bf5f7c3dabf540ec00d6edc076ff025e6/coverage-7.13.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:cc7fd0f726795420f3678ac82ff882c7fc33770bd0074463b5aef7293285ace9", size = 220162, upload-time = "2026-02-03T14:01:11.409Z" }, - { url = "https://files.pythonhosted.org/packages/fc/04/9942b64a0e0bdda2c109f56bda42b2a59d9d3df4c94b85a323c1cae9fc77/coverage-7.13.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d358dc408edc28730aed5477a69338e444e62fba0b7e9e4a131c505fadad691e", size = 220510, upload-time = "2026-02-03T14:01:13.038Z" }, - { url = "https://files.pythonhosted.org/packages/5a/82/5cfe1e81eae525b74669f9795f37eb3edd4679b873d79d1e6c1c14ee6c1c/coverage-7.13.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5d67b9ed6f7b5527b209b24b3df9f2e5bf0198c1bbf99c6971b0e2dcb7e2a107", size = 261801, upload-time = "2026-02-03T14:01:14.674Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ec/a553d7f742fd2cd12e36a16a7b4b3582d5934b496ef2b5ea8abeb10903d4/coverage-7.13.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59224bfb2e9b37c1335ae35d00daa3a5b4e0b1a20f530be208fff1ecfa436f43", size = 263882, upload-time = "2026-02-03T14:01:16.343Z" }, - { url = "https://files.pythonhosted.org/packages/e1/58/8f54a2a93e3d675635bc406de1c9ac8d551312142ff52c9d71b5e533ad45/coverage-7.13.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9306b5299e31e31e0d3b908c66bcb6e7e3ddca143dea0266e9ce6c667346d3", size = 266306, upload-time = "2026-02-03T14:01:18.02Z" }, - { url = "https://files.pythonhosted.org/packages/1a/be/e593399fd6ea1f00aee79ebd7cc401021f218d34e96682a92e1bae092ff6/coverage-7.13.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:343aaeb5f8bb7bcd38620fd7bc56e6ee8207847d8c6103a1e7b72322d381ba4a", size = 261051, upload-time = "2026-02-03T14:01:19.757Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e5/e9e0f6138b21bcdebccac36fbfde9cf15eb1bbcea9f5b1f35cd1f465fb91/coverage-7.13.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2182129f4c101272ff5f2f18038d7b698db1bf8e7aa9e615cb48440899ad32e", size = 263868, upload-time = "2026-02-03T14:01:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bf/de72cfebb69756f2d4a2dde35efcc33c47d85cd3ebdf844b3914aac2ef28/coverage-7.13.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:94d2ac94bd0cc57c5626f52f8c2fffed1444b5ae8c9fc68320306cc2b255e155", size = 261498, upload-time = "2026-02-03T14:01:23.097Z" }, - { url = "https://files.pythonhosted.org/packages/f2/91/4a2d313a70fc2e98ca53afd1c8ce67a89b1944cd996589a5b1fe7fbb3e5c/coverage-7.13.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:65436cde5ecabe26fb2f0bf598962f0a054d3f23ad529361326ac002c61a2a1e", size = 260394, upload-time = "2026-02-03T14:01:24.949Z" }, - { url = "https://files.pythonhosted.org/packages/40/83/25113af7cf6941e779eb7ed8de2a677865b859a07ccee9146d4cc06a03e3/coverage-7.13.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:db83b77f97129813dbd463a67e5335adc6a6a91db652cc085d60c2d512746f96", size = 262579, upload-time = "2026-02-03T14:01:26.703Z" }, - { url = "https://files.pythonhosted.org/packages/1e/19/a5f2b96262977e82fb9aabbe19b4d83561f5d063f18dde3e72f34ffc3b2f/coverage-7.13.3-cp313-cp313t-win32.whl", hash = "sha256:dfb428e41377e6b9ba1b0a32df6db5409cb089a0ed1d0a672dc4953ec110d84f", size = 222679, upload-time = "2026-02-03T14:01:28.553Z" }, - { url = "https://files.pythonhosted.org/packages/81/82/ef1747b88c87a5c7d7edc3704799ebd650189a9158e680a063308b6125ef/coverage-7.13.3-cp313-cp313t-win_amd64.whl", hash = "sha256:5badd7e596e6b0c89aa8ec6d37f4473e4357f982ce57f9a2942b0221cd9cf60c", size = 223740, upload-time = "2026-02-03T14:01:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/1c/4c/a67c7bb5b560241c22736a9cb2f14c5034149ffae18630323fde787339e4/coverage-7.13.3-cp313-cp313t-win_arm64.whl", hash = "sha256:989aa158c0eb19d83c76c26f4ba00dbb272485c56e452010a3450bdbc9daafd9", size = 221996, upload-time = "2026-02-03T14:01:32.495Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fb/70af542d2d938c778c9373ce253aa4116dbe7c0a5672f78b2b2ae0e1b94b/coverage-7.13.3-py3-none-any.whl", hash = "sha256:90a8af9dba6429b2573199622d72e0ebf024d6276f16abce394ad4d181bb0910", size = 211237, upload-time = "2026-02-03T14:02:27.986Z" }, + { url = "https://files.pythonhosted.org/packages/d1/81/4ce2fdd909c5a0ed1f6dedb88aa57ab79b6d1fbd9b588c1ac7ef45659566/coverage-7.13.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459", size = 219449, upload-time = "2026-02-09T12:56:54.889Z" }, + { url = "https://files.pythonhosted.org/packages/5d/96/5238b1efc5922ddbdc9b0db9243152c09777804fb7c02ad1741eb18a11c0/coverage-7.13.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3", size = 219810, upload-time = "2026-02-09T12:56:56.33Z" }, + { url = "https://files.pythonhosted.org/packages/78/72/2f372b726d433c9c35e56377cf1d513b4c16fe51841060d826b95caacec1/coverage-7.13.4-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634", size = 251308, upload-time = "2026-02-09T12:56:57.858Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a0/2ea570925524ef4e00bb6c82649f5682a77fac5ab910a65c9284de422600/coverage-7.13.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3", size = 254052, upload-time = "2026-02-09T12:56:59.754Z" }, + { url = "https://files.pythonhosted.org/packages/e8/ac/45dc2e19a1939098d783c846e130b8f862fbb50d09e0af663988f2f21973/coverage-7.13.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa", size = 255165, upload-time = "2026-02-09T12:57:01.287Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4d/26d236ff35abc3b5e63540d3386e4c3b192168c1d96da5cb2f43c640970f/coverage-7.13.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3", size = 257432, upload-time = "2026-02-09T12:57:02.637Z" }, + { url = "https://files.pythonhosted.org/packages/ec/55/14a966c757d1348b2e19caf699415a2a4c4f7feaa4bbc6326a51f5c7dd1b/coverage-7.13.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a", size = 251716, upload-time = "2026-02-09T12:57:04.056Z" }, + { url = "https://files.pythonhosted.org/packages/77/33/50116647905837c66d28b2af1321b845d5f5d19be9655cb84d4a0ea806b4/coverage-7.13.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7", size = 253089, upload-time = "2026-02-09T12:57:05.503Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b4/8efb11a46e3665d92635a56e4f2d4529de6d33f2cb38afd47d779d15fc99/coverage-7.13.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc", size = 251232, upload-time = "2026-02-09T12:57:06.879Z" }, + { url = "https://files.pythonhosted.org/packages/51/24/8cd73dd399b812cc76bb0ac260e671c4163093441847ffe058ac9fda1e32/coverage-7.13.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47", size = 255299, upload-time = "2026-02-09T12:57:08.245Z" }, + { url = "https://files.pythonhosted.org/packages/03/94/0a4b12f1d0e029ce1ccc1c800944a9984cbe7d678e470bb6d3c6bc38a0da/coverage-7.13.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985", size = 250796, upload-time = "2026-02-09T12:57:10.142Z" }, + { url = "https://files.pythonhosted.org/packages/73/44/6002fbf88f6698ca034360ce474c406be6d5a985b3fdb3401128031eef6b/coverage-7.13.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0", size = 252673, upload-time = "2026-02-09T12:57:12.197Z" }, + { url = "https://files.pythonhosted.org/packages/de/c6/a0279f7c00e786be75a749a5674e6fa267bcbd8209cd10c9a450c655dfa7/coverage-7.13.4-cp312-cp312-win32.whl", hash = "sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246", size = 221990, upload-time = "2026-02-09T12:57:14.085Z" }, + { url = "https://files.pythonhosted.org/packages/77/4e/c0a25a425fcf5557d9abd18419c95b63922e897bc86c1f327f155ef234a9/coverage-7.13.4-cp312-cp312-win_amd64.whl", hash = "sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126", size = 222800, upload-time = "2026-02-09T12:57:15.944Z" }, + { url = "https://files.pythonhosted.org/packages/47/ac/92da44ad9a6f4e3a7debd178949d6f3769bedca33830ce9b1dcdab589a37/coverage-7.13.4-cp312-cp312-win_arm64.whl", hash = "sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d", size = 221415, upload-time = "2026-02-09T12:57:17.497Z" }, + { url = "https://files.pythonhosted.org/packages/db/23/aad45061a31677d68e47499197a131eea55da4875d16c1f42021ab963503/coverage-7.13.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9", size = 219474, upload-time = "2026-02-09T12:57:19.332Z" }, + { url = "https://files.pythonhosted.org/packages/a5/70/9b8b67a0945f3dfec1fd896c5cefb7c19d5a3a6d74630b99a895170999ae/coverage-7.13.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac", size = 219844, upload-time = "2026-02-09T12:57:20.66Z" }, + { url = "https://files.pythonhosted.org/packages/97/fd/7e859f8fab324cef6c4ad7cff156ca7c489fef9179d5749b0c8d321281c2/coverage-7.13.4-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea", size = 250832, upload-time = "2026-02-09T12:57:22.007Z" }, + { url = "https://files.pythonhosted.org/packages/e4/dc/b2442d10020c2f52617828862d8b6ee337859cd8f3a1f13d607dddda9cf7/coverage-7.13.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b", size = 253434, upload-time = "2026-02-09T12:57:23.339Z" }, + { url = "https://files.pythonhosted.org/packages/5a/88/6728a7ad17428b18d836540630487231f5470fb82454871149502f5e5aa2/coverage-7.13.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525", size = 254676, upload-time = "2026-02-09T12:57:24.774Z" }, + { url = "https://files.pythonhosted.org/packages/7c/bc/21244b1b8cedf0dff0a2b53b208015fe798d5f2a8d5348dbfece04224fff/coverage-7.13.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242", size = 256807, upload-time = "2026-02-09T12:57:26.125Z" }, + { url = "https://files.pythonhosted.org/packages/97/a0/ddba7ed3251cff51006737a727d84e05b61517d1784a9988a846ba508877/coverage-7.13.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148", size = 251058, upload-time = "2026-02-09T12:57:27.614Z" }, + { url = "https://files.pythonhosted.org/packages/9b/55/e289addf7ff54d3a540526f33751951bf0878f3809b47f6dfb3def69c6f7/coverage-7.13.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a", size = 252805, upload-time = "2026-02-09T12:57:29.066Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/cc276b1fa4a59be56d96f1dabddbdc30f4ba22e3b1cd42504c37b3313255/coverage-7.13.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23", size = 250766, upload-time = "2026-02-09T12:57:30.522Z" }, + { url = "https://files.pythonhosted.org/packages/94/44/1093b8f93018f8b41a8cf29636c9292502f05e4a113d4d107d14a3acd044/coverage-7.13.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80", size = 254923, upload-time = "2026-02-09T12:57:31.946Z" }, + { url = "https://files.pythonhosted.org/packages/8b/55/ea2796da2d42257f37dbea1aab239ba9263b31bd91d5527cdd6db5efe174/coverage-7.13.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea", size = 250591, upload-time = "2026-02-09T12:57:33.842Z" }, + { url = "https://files.pythonhosted.org/packages/d4/fa/7c4bb72aacf8af5020675aa633e59c1fbe296d22aed191b6a5b711eb2bc7/coverage-7.13.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a", size = 252364, upload-time = "2026-02-09T12:57:35.743Z" }, + { url = "https://files.pythonhosted.org/packages/5c/38/a8d2ec0146479c20bbaa7181b5b455a0c41101eed57f10dd19a78ab44c80/coverage-7.13.4-cp313-cp313-win32.whl", hash = "sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d", size = 222010, upload-time = "2026-02-09T12:57:37.25Z" }, + { url = "https://files.pythonhosted.org/packages/e2/0c/dbfafbe90a185943dcfbc766fe0e1909f658811492d79b741523a414a6cc/coverage-7.13.4-cp313-cp313-win_amd64.whl", hash = "sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd", size = 222818, upload-time = "2026-02-09T12:57:38.734Z" }, + { url = "https://files.pythonhosted.org/packages/04/d1/934918a138c932c90d78301f45f677fb05c39a3112b96fd2c8e60503cdc7/coverage-7.13.4-cp313-cp313-win_arm64.whl", hash = "sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af", size = 221438, upload-time = "2026-02-09T12:57:40.223Z" }, + { url = "https://files.pythonhosted.org/packages/52/57/ee93ced533bcb3e6df961c0c6e42da2fc6addae53fb95b94a89b1e33ebd7/coverage-7.13.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d", size = 220165, upload-time = "2026-02-09T12:57:41.639Z" }, + { url = "https://files.pythonhosted.org/packages/c5/e0/969fc285a6fbdda49d91af278488d904dcd7651b2693872f0ff94e40e84a/coverage-7.13.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12", size = 220516, upload-time = "2026-02-09T12:57:44.215Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b8/9531944e16267e2735a30a9641ff49671f07e8138ecf1ca13db9fd2560c7/coverage-7.13.4-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b", size = 261804, upload-time = "2026-02-09T12:57:45.989Z" }, + { url = "https://files.pythonhosted.org/packages/8a/f3/e63df6d500314a2a60390d1989240d5f27318a7a68fa30ad3806e2a9323e/coverage-7.13.4-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9", size = 263885, upload-time = "2026-02-09T12:57:47.42Z" }, + { url = "https://files.pythonhosted.org/packages/f3/67/7654810de580e14b37670b60a09c599fa348e48312db5b216d730857ffe6/coverage-7.13.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092", size = 266308, upload-time = "2026-02-09T12:57:49.345Z" }, + { url = "https://files.pythonhosted.org/packages/37/6f/39d41eca0eab3cc82115953ad41c4e77935286c930e8fad15eaed1389d83/coverage-7.13.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9", size = 267452, upload-time = "2026-02-09T12:57:50.811Z" }, + { url = "https://files.pythonhosted.org/packages/50/6d/39c0fbb8fc5cd4d2090811e553c2108cf5112e882f82505ee7495349a6bf/coverage-7.13.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26", size = 261057, upload-time = "2026-02-09T12:57:52.447Z" }, + { url = "https://files.pythonhosted.org/packages/a4/a2/60010c669df5fa603bb5a97fb75407e191a846510da70ac657eb696b7fce/coverage-7.13.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2", size = 263875, upload-time = "2026-02-09T12:57:53.938Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d9/63b22a6bdbd17f1f96e9ed58604c2a6b0e72a9133e37d663bef185877cf6/coverage-7.13.4-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940", size = 261500, upload-time = "2026-02-09T12:57:56.012Z" }, + { url = "https://files.pythonhosted.org/packages/70/bf/69f86ba1ad85bc3ad240e4c0e57a2e620fbc0e1645a47b5c62f0e941ad7f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c", size = 265212, upload-time = "2026-02-09T12:57:57.5Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f2/5f65a278a8c2148731831574c73e42f57204243d33bedaaf18fa79c5958f/coverage-7.13.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0", size = 260398, upload-time = "2026-02-09T12:57:59.027Z" }, + { url = "https://files.pythonhosted.org/packages/ef/80/6e8280a350ee9fea92f14b8357448a242dcaa243cb2c72ab0ca591f66c8c/coverage-7.13.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b", size = 262584, upload-time = "2026-02-09T12:58:01.129Z" }, + { url = "https://files.pythonhosted.org/packages/22/63/01ff182fc95f260b539590fb12c11ad3e21332c15f9799cb5e2386f71d9f/coverage-7.13.4-cp313-cp313t-win32.whl", hash = "sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9", size = 222688, upload-time = "2026-02-09T12:58:02.736Z" }, + { url = "https://files.pythonhosted.org/packages/a9/43/89de4ef5d3cd53b886afa114065f7e9d3707bdb3e5efae13535b46ae483d/coverage-7.13.4-cp313-cp313t-win_amd64.whl", hash = "sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd", size = 223746, upload-time = "2026-02-09T12:58:05.362Z" }, + { url = "https://files.pythonhosted.org/packages/35/39/7cf0aa9a10d470a5309b38b289b9bb07ddeac5d61af9b664fe9775a4cb3e/coverage-7.13.4-cp313-cp313t-win_arm64.whl", hash = "sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997", size = 222003, upload-time = "2026-02-09T12:58:06.952Z" }, + { url = "https://files.pythonhosted.org/packages/0d/4a/331fe2caf6799d591109bb9c08083080f6de90a823695d412a935622abb2/coverage-7.13.4-py3-none-any.whl", hash = "sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0", size = 211242, upload-time = "2026-02-09T12:59:02.032Z" }, ] [[package]] @@ -640,41 +646,41 @@ wheels = [ [[package]] name = "cryptography" -version = "46.0.4" +version = "46.0.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/78/19/f748958276519adf6a0c1e79e7b8860b4830dda55ccdf29f2719b5fc499c/cryptography-46.0.4.tar.gz", hash = "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59", size = 749301, upload-time = "2026-01-28T00:24:37.379Z" } +sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/99/157aae7949a5f30d51fcb1a9851e8ebd5c74bf99b5285d8bb4b8b9ee641e/cryptography-46.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485", size = 7173686, upload-time = "2026-01-28T00:23:07.515Z" }, - { url = "https://files.pythonhosted.org/packages/87/91/874b8910903159043b5c6a123b7e79c4559ddd1896e38967567942635778/cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc", size = 4275871, upload-time = "2026-01-28T00:23:09.439Z" }, - { url = "https://files.pythonhosted.org/packages/c0/35/690e809be77896111f5b195ede56e4b4ed0435b428c2f2b6d35046fbb5e8/cryptography-46.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0", size = 4423124, upload-time = "2026-01-28T00:23:11.529Z" }, - { url = "https://files.pythonhosted.org/packages/1a/5b/a26407d4f79d61ca4bebaa9213feafdd8806dc69d3d290ce24996d3cfe43/cryptography-46.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa", size = 4277090, upload-time = "2026-01-28T00:23:13.123Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d8/4bb7aec442a9049827aa34cee1aa83803e528fa55da9a9d45d01d1bb933e/cryptography-46.0.4-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81", size = 4947652, upload-time = "2026-01-28T00:23:14.554Z" }, - { url = "https://files.pythonhosted.org/packages/2b/08/f83e2e0814248b844265802d081f2fac2f1cbe6cd258e72ba14ff006823a/cryptography-46.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255", size = 4455157, upload-time = "2026-01-28T00:23:16.443Z" }, - { url = "https://files.pythonhosted.org/packages/0a/05/19d849cf4096448779d2dcc9bb27d097457dac36f7273ffa875a93b5884c/cryptography-46.0.4-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e", size = 3981078, upload-time = "2026-01-28T00:23:17.838Z" }, - { url = "https://files.pythonhosted.org/packages/e6/89/f7bac81d66ba7cde867a743ea5b37537b32b5c633c473002b26a226f703f/cryptography-46.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c", size = 4276213, upload-time = "2026-01-28T00:23:19.257Z" }, - { url = "https://files.pythonhosted.org/packages/da/9f/7133e41f24edd827020ad21b068736e792bc68eecf66d93c924ad4719fb3/cryptography-46.0.4-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32", size = 4912190, upload-time = "2026-01-28T00:23:21.244Z" }, - { url = "https://files.pythonhosted.org/packages/a6/f7/6d43cbaddf6f65b24816e4af187d211f0bc536a29961f69faedc48501d8e/cryptography-46.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616", size = 4454641, upload-time = "2026-01-28T00:23:22.866Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4f/ebd0473ad656a0ac912a16bd07db0f5d85184924e14fc88feecae2492834/cryptography-46.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0", size = 4405159, upload-time = "2026-01-28T00:23:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d1/f7/7923886f32dc47e27adeff8246e976d77258fd2aa3efdd1754e4e323bf49/cryptography-46.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0", size = 4666059, upload-time = "2026-01-28T00:23:26.766Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a7/0fca0fd3591dffc297278a61813d7f661a14243dd60f499a7a5b48acb52a/cryptography-46.0.4-cp311-abi3-win32.whl", hash = "sha256:82a62483daf20b8134f6e92898da70d04d0ef9a75829d732ea1018678185f4f5", size = 3026378, upload-time = "2026-01-28T00:23:28.317Z" }, - { url = "https://files.pythonhosted.org/packages/2d/12/652c84b6f9873f0909374864a57b003686c642ea48c84d6c7e2c515e6da5/cryptography-46.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:6225d3ebe26a55dbc8ead5ad1265c0403552a63336499564675b29eb3184c09b", size = 3478614, upload-time = "2026-01-28T00:23:30.275Z" }, - { url = "https://files.pythonhosted.org/packages/56/f7/f648fdbb61d0d45902d3f374217451385edc7e7768d1b03ff1d0e5ffc17b/cryptography-46.0.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a9556ba711f7c23f77b151d5798f3ac44a13455cc68db7697a1096e6d0563cab", size = 7169583, upload-time = "2026-01-28T00:23:56.558Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cc/8f3224cbb2a928de7298d6ed4790f5ebc48114e02bdc9559196bfb12435d/cryptography-46.0.4-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef", size = 4275419, upload-time = "2026-01-28T00:23:58.364Z" }, - { url = "https://files.pythonhosted.org/packages/17/43/4a18faa7a872d00e4264855134ba82d23546c850a70ff209e04ee200e76f/cryptography-46.0.4-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d", size = 4419058, upload-time = "2026-01-28T00:23:59.867Z" }, - { url = "https://files.pythonhosted.org/packages/ee/64/6651969409821d791ba12346a124f55e1b76f66a819254ae840a965d4b9c/cryptography-46.0.4-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973", size = 4278151, upload-time = "2026-01-28T00:24:01.731Z" }, - { url = "https://files.pythonhosted.org/packages/20/0b/a7fce65ee08c3c02f7a8310cc090a732344066b990ac63a9dfd0a655d321/cryptography-46.0.4-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4", size = 4939441, upload-time = "2026-01-28T00:24:03.175Z" }, - { url = "https://files.pythonhosted.org/packages/db/a7/20c5701e2cd3e1dfd7a19d2290c522a5f435dd30957d431dcb531d0f1413/cryptography-46.0.4-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af", size = 4451617, upload-time = "2026-01-28T00:24:05.403Z" }, - { url = "https://files.pythonhosted.org/packages/00/dc/3e16030ea9aa47b63af6524c354933b4fb0e352257c792c4deeb0edae367/cryptography-46.0.4-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263", size = 3977774, upload-time = "2026-01-28T00:24:06.851Z" }, - { url = "https://files.pythonhosted.org/packages/42/c8/ad93f14118252717b465880368721c963975ac4b941b7ef88f3c56bf2897/cryptography-46.0.4-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095", size = 4277008, upload-time = "2026-01-28T00:24:08.926Z" }, - { url = "https://files.pythonhosted.org/packages/00/cf/89c99698151c00a4631fbfcfcf459d308213ac29e321b0ff44ceeeac82f1/cryptography-46.0.4-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b", size = 4903339, upload-time = "2026-01-28T00:24:12.009Z" }, - { url = "https://files.pythonhosted.org/packages/03/c3/c90a2cb358de4ac9309b26acf49b2a100957e1ff5cc1e98e6c4996576710/cryptography-46.0.4-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019", size = 4451216, upload-time = "2026-01-28T00:24:13.975Z" }, - { url = "https://files.pythonhosted.org/packages/96/2c/8d7f4171388a10208671e181ca43cdc0e596d8259ebacbbcfbd16de593da/cryptography-46.0.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4", size = 4404299, upload-time = "2026-01-28T00:24:16.169Z" }, - { url = "https://files.pythonhosted.org/packages/e9/23/cbb2036e450980f65c6e0a173b73a56ff3bccd8998965dea5cc9ddd424a5/cryptography-46.0.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b", size = 4664837, upload-time = "2026-01-28T00:24:17.629Z" }, - { url = "https://files.pythonhosted.org/packages/0a/21/f7433d18fe6d5845329cbdc597e30caf983229c7a245bcf54afecc555938/cryptography-46.0.4-cp38-abi3-win32.whl", hash = "sha256:0563655cb3c6d05fb2afe693340bc050c30f9f34e15763361cf08e94749401fc", size = 3009779, upload-time = "2026-01-28T00:24:20.198Z" }, - { url = "https://files.pythonhosted.org/packages/3a/6a/bd2e7caa2facffedf172a45c1a02e551e6d7d4828658c9a245516a598d94/cryptography-46.0.4-cp38-abi3-win_amd64.whl", hash = "sha256:fa0900b9ef9c49728887d1576fd8d9e7e3ea872fa9b25ef9b64888adc434e976", size = 3466633, upload-time = "2026-01-28T00:24:21.851Z" }, + { url = "https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", size = 7176289, upload-time = "2026-02-10T19:17:08.274Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, + { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, + { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, + { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ed/325d2a490c5e94038cdb0117da9397ece1f11201f425c4e9c57fe5b9f08b/cryptography-46.0.5-cp311-abi3-win32.whl", hash = "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", size = 3028230, upload-time = "2026-02-10T19:17:30.518Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5a/ac0f49e48063ab4255d9e3b79f5def51697fce1a95ea1370f03dc9db76f6/cryptography-46.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", size = 3480909, upload-time = "2026-02-10T19:17:32.083Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fa/a66aa722105ad6a458bebd64086ca2b72cdd361fed31763d20390f6f1389/cryptography-46.0.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", size = 7170514, upload-time = "2026-02-10T19:17:56.267Z" }, + { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, + { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, + { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, + { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, + { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, + { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, + { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, + { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/45/2d/9c5f2926cb5300a8eefc3f4f0b3f3df39db7f7ce40c8365444c49363cbda/cryptography-46.0.5-cp38-abi3-win32.whl", hash = "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", size = 3010220, upload-time = "2026-02-10T19:18:17.361Z" }, + { url = "https://files.pythonhosted.org/packages/48/ef/0c2f4a8e31018a986949d34a01115dd057bf536905dca38897bacd21fac3/cryptography-46.0.5-cp38-abi3-win_amd64.whl", hash = "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", size = 3467050, upload-time = "2026-02-10T19:18:18.899Z" }, ] [[package]] @@ -812,14 +818,14 @@ wheels = [ [[package]] name = "django-dbbackup" -version = "5.1.2" +version = "5.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/19/7f75d5e1ee70d61e1fdb68ff148681f74e7900f24b7b1e8e2d1506c808d2/django_dbbackup-5.1.2.tar.gz", hash = "sha256:792b646633e46622ee79536556a9e42d469758b8591dec06f99a9175c11f8e51", size = 26393, upload-time = "2026-01-15T00:37:11.491Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/27/40f38df3ee6467a2e9f59a3d3d5c6ab3858b6f162840e243c41868a60dc7/django_dbbackup-5.2.0.tar.gz", hash = "sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3", size = 27626, upload-time = "2026-02-11T04:47:39.572Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/24/b2d523c8e2599b75bcf2955e62b05b13280fab20244cff2364c728810f60/django_dbbackup-5.1.2-py3-none-any.whl", hash = "sha256:4ebc0e3a8de73811393f401099dc35b4f3aca39044ca430ab6ab307df32849a1", size = 34667, upload-time = "2026-01-15T00:37:10.041Z" }, + { url = "https://files.pythonhosted.org/packages/1a/6f/ff400d50fd71226e9d16a210c5d097bb797ec21879019ba260365d42e490/django_dbbackup-5.2.0-py3-none-any.whl", hash = "sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370", size = 35981, upload-time = "2026-02-11T04:47:38.081Z" }, ] [[package]] @@ -861,15 +867,15 @@ wheels = [ [[package]] name = "django-health-check" -version = "3.23.3" +version = "4.0.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, - { name = "psutil" }, + { name = "dnspython" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/9b/fd280bb8a70fd649a1ac97a51a936086cead496b0fb4b2e9ad29d1635681/django_health_check-3.23.3.tar.gz", hash = "sha256:7b5e6e6c8b2254190a65cf497c292a4af407a3d52b316f4c801601ce2b20de94", size = 20653, upload-time = "2026-02-03T22:09:20.259Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/ea/5abd492cc9ea536edba5d436a84086f1c0fcdc66fd023a1f4cc086d39a56/django_health_check-4.0.4.tar.gz", hash = "sha256:b2349ff9d75dc52e203be20f461eabae6b203f2566e5ba888bc885168decaaa9", size = 20496, upload-time = "2026-02-18T13:08:42.442Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/a7/2512ca5ad1dd31e3d1c9ab0faebbb08864527464ab25de6f5abd1f063ad9/django_health_check-3.23.3-py3-none-any.whl", hash = "sha256:3055971ff8cbd361b736dcf4551769f9ba28d3aca5462679dd50e4ef193de8d0", size = 37699, upload-time = "2026-02-03T22:09:18.654Z" }, + { url = "https://files.pythonhosted.org/packages/d8/12/8f1fc3b2bd8516c4e71d988b1218543ab0ef3fd21545302bdaf91a57f50d/django_health_check-4.0.4-py3-none-any.whl", hash = "sha256:6c91efa2e3b4f4b280aa5646b6347385f57010314c395aa6af3f7c64f75cd1f8", size = 25476, upload-time = "2026-02-18T13:08:40.91Z" }, ] [[package]] @@ -1050,14 +1056,14 @@ wheels = [ [[package]] name = "django-unfold" -version = "0.78.1" +version = "0.80.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/ca/c1148935fd0753fb70ddad19b7b7180dd94eabd267024dd65611a2c4388f/django_unfold-0.78.1.tar.gz", hash = "sha256:1de8537f0037b48e84d72b30229259060140ac84fc30d79eb69b5c9de6c5e51d", size = 1109404, upload-time = "2026-02-03T10:11:08.838Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/99/bb6273b4d88afcc37e7f5fa3c8386265eda8c89312f50d751e7450bec7bd/django_unfold-0.80.2.tar.gz", hash = "sha256:6d9baa1694f9c3f8c451ea6e00537375ae1c7832d3ad0110d0f576bd47dae3d1", size = 1111081, upload-time = "2026-02-18T09:25:27.251Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/79/0b/4dd387462f0d7e705c477da8c761303591fccd66f0a6b5d6ba2ddc0f7855/django_unfold-0.78.1-py3-none-any.whl", hash = "sha256:6b557030d3ad6c8275ecacb69260b03a7ed3de972cb2e60ef2dea6d3363d515c", size = 1224742, upload-time = "2026-02-03T10:11:07.057Z" }, + { url = "https://files.pythonhosted.org/packages/37/11/792187e14290dc7737a78905f6d7ab664da11bb2f29873b5152bdc14114a/django_unfold-0.80.2-py3-none-any.whl", hash = "sha256:9e9d98eb6bcbc58769a7e17b104fa17be88672fb0379e8ca26a4f978564b1b0b", size = 1226068, upload-time = "2026-02-18T09:25:28.853Z" }, ] [[package]] @@ -1166,6 +1172,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/d8/033eae74851b5c8894a5a35fb5bb3ec6d45714f3183962dbce5a2b17f18f/djangorestframework_yaml-2.0.0-py2.py3-none-any.whl", hash = "sha256:7fe744e6004d2191fa1cb8a4fc62f98150202bfebd60702a04f8187cc240b7c4", size = 6684, upload-time = "2020-04-27T01:19:29.99Z" }, ] +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + [[package]] name = "docutils" version = "0.22.4" @@ -1305,11 +1320,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.20.3" +version = "3.24.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1", size = 19485, upload-time = "2026-01-09T17:55:05.421Z" } +sdist = { url = "https://files.pythonhosted.org/packages/73/92/a8e2479937ff39185d20dd6a851c1a63e55849e447a55e798cc2e1f49c65/filelock-3.24.3.tar.gz", hash = "sha256:011a5644dc937c22699943ebbfc46e969cdde3e171470a6e40b9533e5a72affa", size = 37935, upload-time = "2026-02-19T00:48:20.543Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1", size = 16701, upload-time = "2026-01-09T17:55:04.334Z" }, + { url = "https://files.pythonhosted.org/packages/9c/0f/5d0c71a1aefeb08efff26272149e07ab922b64f46c63363756224bd6872e/filelock-3.24.3-py3-none-any.whl", hash = "sha256:426e9a4660391f7f8a810d71b0555bce9008b0a1cc342ab1f6947d37639e002d", size = 24331, upload-time = "2026-02-19T00:48:18.465Z" }, ] [[package]] @@ -1548,7 +1563,7 @@ wheels = [ [[package]] name = "ipykernel" -version = "7.1.0" +version = "7.2.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "appnope", marker = "sys_platform == 'darwin'" }, @@ -1565,9 +1580,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/8d/b68b728e2d06b9e0051019640a40a9eb7a88fcd82c2e1b5ce70bef5ff044/ipykernel-7.2.0.tar.gz", hash = "sha256:18ed160b6dee2cbb16e5f3575858bc19d8f1fe6046a9a680c708494ce31d909e", size = 176046, upload-time = "2026-02-06T16:43:27.403Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, + { url = "https://files.pythonhosted.org/packages/82/b9/e73d5d9f405cba7706c539aa8b311b49d4c2f3d698d9c12f815231169c71/ipykernel-7.2.0-py3-none-any.whl", hash = "sha256:3bbd4420d2b3cc105cbdf3756bfc04500b1e52f090a90716851f3916c62e1661", size = 118788, upload-time = "2026-02-06T16:43:25.149Z" }, ] [[package]] @@ -1905,7 +1920,7 @@ wheels = [ [[package]] name = "jupyterlab" -version = "4.5.3" +version = "4.5.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, @@ -1922,9 +1937,9 @@ dependencies = [ { name = "tornado" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3e/76/393eae3349f9a39bf21f8f5406e5244d36e2bfc932049b6070c271f92764/jupyterlab-4.5.3.tar.gz", hash = "sha256:4a159f71067cb38e4a82e86a42de8e7e926f384d7f2291964f282282096d27e8", size = 23939231, upload-time = "2026-01-23T15:04:25.768Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7c/6b/21af7c0512bdf67e0c54c121779a1f2a97a164a7657e13fced79db8fa5a0/jupyterlab-4.5.4.tar.gz", hash = "sha256:c215f48d8e4582bd2920ad61cc6a40d8ebfef7e5a517ae56b8a9413c9789fdfb", size = 23943597, upload-time = "2026-02-11T00:26:55.308Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/9a/0bf9a7a45f0006d7ff4fdc4fc313de4255acab02bf4db1887c65f0472c01/jupyterlab-4.5.3-py3-none-any.whl", hash = "sha256:63c9f3a48de72ba00df766ad6eed416394f5bb883829f11eeff0872302520ba7", size = 12391761, upload-time = "2026-01-23T15:04:21.214Z" }, + { url = "https://files.pythonhosted.org/packages/f5/9f/a70972ece62ead2d81acc6223188f6d18a92f665ccce17796a0cdea4fcf5/jupyterlab-4.5.4-py3-none-any.whl", hash = "sha256:cc233f70539728534669fb0015331f2a3a87656207b3bb2d07916e9289192f12", size = 12391867, upload-time = "2026-02-11T00:26:51.23Z" }, ] [[package]] @@ -2042,11 +2057,11 @@ wheels = [ [[package]] name = "markdown" -version = "3.10.1" +version = "3.10.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/b1/af95bcae8549f1f3fd70faacb29075826a0d689a27f232e8cee315efa053/markdown-3.10.1.tar.gz", hash = "sha256:1c19c10bd5c14ac948c53d0d762a04e2fa35a6d58a6b7b1e6bfcbe6fefc0001a", size = 365402, upload-time = "2026-01-21T18:09:28.206Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/59/1b/6ef961f543593969d25b2afe57a3564200280528caa9bd1082eecdd7b3bc/markdown-3.10.1-py3-none-any.whl", hash = "sha256:867d788939fe33e4b736426f5b9f651ad0c0ae0ecf89df0ca5d1176c70812fe3", size = 107684, upload-time = "2026-01-21T18:09:27.203Z" }, + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[package]] @@ -2343,7 +2358,7 @@ sdist = { url = "https://files.pythonhosted.org/packages/97/73/8ade73f6749177003 [[package]] name = "openai" -version = "2.16.0" +version = "2.21.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2355,9 +2370,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/6c/e4c964fcf1d527fdf4739e7cc940c60075a4114d50d03871d5d5b1e13a88/openai-2.16.0.tar.gz", hash = "sha256:42eaa22ca0d8ded4367a77374104d7a2feafee5bd60a107c3c11b5243a11cd12", size = 629649, upload-time = "2026-01-27T23:28:02.579Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/e5/3d197a0947a166649f566706d7a4c8f7fe38f1fa7b24c9bcffe4c7591d44/openai-2.21.0.tar.gz", hash = "sha256:81b48ce4b8bbb2cc3af02047ceb19561f7b1dc0d4e52d1de7f02abfd15aa59b7", size = 644374, upload-time = "2026-02-14T00:12:01.577Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/83/0315bf2cfd75a2ce8a7e54188e9456c60cec6c0cf66728ed07bd9859ff26/openai-2.16.0-py3-none-any.whl", hash = "sha256:5f46643a8f42899a84e80c38838135d7038e7718333ce61396994f887b09a59b", size = 1068612, upload-time = "2026-01-27T23:28:00.356Z" }, + { url = "https://files.pythonhosted.org/packages/cc/56/0a89092a453bb2c676d66abee44f863e742b2110d4dbb1dbcca3f7e5fc33/openai-2.21.0-py3-none-any.whl", hash = "sha256:0bc1c775e5b1536c294eded39ee08f8407656537ccc71b1004104fe1602e267c", size = 1103065, upload-time = "2026-02-14T00:11:59.603Z" }, ] [[package]] @@ -2490,38 +2505,38 @@ wheels = [ [[package]] name = "pandas" -version = "3.0.0" +version = "3.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, { name = "python-dateutil" }, { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/da/b1dc0481ab8d55d0f46e343cfe67d4551a0e14fcee52bd38ca1bd73258d8/pandas-3.0.0.tar.gz", hash = "sha256:0facf7e87d38f721f0af46fe70d97373a37701b1c09f7ed7aeeb292ade5c050f", size = 4633005, upload-time = "2026-01-21T15:52:04.726Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2e/0c/b28ed414f080ee0ad153f848586d61d1878f91689950f037f976ce15f6c8/pandas-3.0.1.tar.gz", hash = "sha256:4186a699674af418f655dbd420ed87f50d56b4cd6603784279d9eef6627823c8", size = 4641901, upload-time = "2026-02-17T22:20:16.434Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/38/db33686f4b5fa64d7af40d96361f6a4615b8c6c8f1b3d334eee46ae6160e/pandas-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9803b31f5039b3c3b10cc858c5e40054adb4b29b4d81cb2fd789f4121c8efbcd", size = 10334013, upload-time = "2026-01-21T15:50:34.771Z" }, - { url = "https://files.pythonhosted.org/packages/a5/7b/9254310594e9774906bacdd4e732415e1f86ab7dbb4b377ef9ede58cd8ec/pandas-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14c2a4099cd38a1d18ff108168ea417909b2dea3bd1ebff2ccf28ddb6a74d740", size = 9874154, upload-time = "2026-01-21T15:50:36.67Z" }, - { url = "https://files.pythonhosted.org/packages/63/d4/726c5a67a13bc66643e66d2e9ff115cead482a44fc56991d0c4014f15aaf/pandas-3.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d257699b9a9960e6125686098d5714ac59d05222bef7a5e6af7a7fd87c650801", size = 10384433, upload-time = "2026-01-21T15:50:39.132Z" }, - { url = "https://files.pythonhosted.org/packages/bf/2e/9211f09bedb04f9832122942de8b051804b31a39cfbad199a819bb88d9f3/pandas-3.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69780c98f286076dcafca38d8b8eee1676adf220199c0a39f0ecbf976b68151a", size = 10864519, upload-time = "2026-01-21T15:50:41.043Z" }, - { url = "https://files.pythonhosted.org/packages/00/8d/50858522cdc46ac88b9afdc3015e298959a70a08cd21e008a44e9520180c/pandas-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4a66384f017240f3858a4c8a7cf21b0591c3ac885cddb7758a589f0f71e87ebb", size = 11394124, upload-time = "2026-01-21T15:50:43.377Z" }, - { url = "https://files.pythonhosted.org/packages/86/3f/83b2577db02503cd93d8e95b0f794ad9d4be0ba7cb6c8bcdcac964a34a42/pandas-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be8c515c9bc33989d97b89db66ea0cececb0f6e3c2a87fcc8b69443a6923e95f", size = 11920444, upload-time = "2026-01-21T15:50:45.932Z" }, - { url = "https://files.pythonhosted.org/packages/64/2d/4f8a2f192ed12c90a0aab47f5557ece0e56b0370c49de9454a09de7381b2/pandas-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a453aad8c4f4e9f166436994a33884442ea62aa8b27d007311e87521b97246e1", size = 9730970, upload-time = "2026-01-21T15:50:47.962Z" }, - { url = "https://files.pythonhosted.org/packages/d4/64/ff571be435cf1e643ca98d0945d76732c0b4e9c37191a89c8550b105eed1/pandas-3.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:da768007b5a33057f6d9053563d6b74dd6d029c337d93c6d0d22a763a5c2ecc0", size = 9041950, upload-time = "2026-01-21T15:50:50.422Z" }, - { url = "https://files.pythonhosted.org/packages/6f/fa/7f0ac4ca8877c57537aaff2a842f8760e630d8e824b730eb2e859ffe96ca/pandas-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b78d646249b9a2bc191040988c7bb524c92fa8534fb0898a0741d7e6f2ffafa6", size = 10307129, upload-time = "2026-01-21T15:50:52.877Z" }, - { url = "https://files.pythonhosted.org/packages/6f/11/28a221815dcea4c0c9414dfc845e34a84a6a7dabc6da3194498ed5ba4361/pandas-3.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bc9cba7b355cb4162442a88ce495e01cb605f17ac1e27d6596ac963504e0305f", size = 9850201, upload-time = "2026-01-21T15:50:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/ba/da/53bbc8c5363b7e5bd10f9ae59ab250fc7a382ea6ba08e4d06d8694370354/pandas-3.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c9a1a149aed3b6c9bf246033ff91e1b02d529546c5d6fb6b74a28fea0cf4c70", size = 10354031, upload-time = "2026-01-21T15:50:57.463Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a3/51e02ebc2a14974170d51e2410dfdab58870ea9bcd37cda15bd553d24dc4/pandas-3.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95683af6175d884ee89471842acfca29172a85031fccdabc35e50c0984470a0e", size = 10861165, upload-time = "2026-01-21T15:50:59.32Z" }, - { url = "https://files.pythonhosted.org/packages/a5/fe/05a51e3cac11d161472b8297bd41723ea98013384dd6d76d115ce3482f9b/pandas-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1fbbb5a7288719e36b76b4f18d46ede46e7f916b6c8d9915b756b0a6c3f792b3", size = 11359359, upload-time = "2026-01-21T15:51:02.014Z" }, - { url = "https://files.pythonhosted.org/packages/ee/56/ba620583225f9b85a4d3e69c01df3e3870659cc525f67929b60e9f21dcd1/pandas-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e8b9808590fa364416b49b2a35c1f4cf2785a6c156935879e57f826df22038e", size = 11912907, upload-time = "2026-01-21T15:51:05.175Z" }, - { url = "https://files.pythonhosted.org/packages/c9/8c/c6638d9f67e45e07656b3826405c5cc5f57f6fd07c8b2572ade328c86e22/pandas-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:98212a38a709feb90ae658cb6227ea3657c22ba8157d4b8f913cd4c950de5e7e", size = 9732138, upload-time = "2026-01-21T15:51:07.569Z" }, - { url = "https://files.pythonhosted.org/packages/7b/bf/bd1335c3bf1770b6d8fed2799993b11c4971af93bb1b729b9ebbc02ca2ec/pandas-3.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:177d9df10b3f43b70307a149d7ec49a1229a653f907aa60a48f1877d0e6be3be", size = 9033568, upload-time = "2026-01-21T15:51:09.484Z" }, - { url = "https://files.pythonhosted.org/packages/8e/c6/f5e2171914d5e29b9171d495344097d54e3ffe41d2d85d8115baba4dc483/pandas-3.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2713810ad3806767b89ad3b7b69ba153e1c6ff6d9c20f9c2140379b2a98b6c98", size = 10741936, upload-time = "2026-01-21T15:51:11.693Z" }, - { url = "https://files.pythonhosted.org/packages/51/88/9a0164f99510a1acb9f548691f022c756c2314aad0d8330a24616c14c462/pandas-3.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:15d59f885ee5011daf8335dff47dcb8a912a27b4ad7826dc6cbe809fd145d327", size = 10393884, upload-time = "2026-01-21T15:51:14.197Z" }, - { url = "https://files.pythonhosted.org/packages/e0/53/b34d78084d88d8ae2b848591229da8826d1e65aacf00b3abe34023467648/pandas-3.0.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24e6547fb64d2c92665dd2adbfa4e85fa4fd70a9c070e7cfb03b629a0bbab5eb", size = 10310740, upload-time = "2026-01-21T15:51:16.093Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d3/bee792e7c3d6930b74468d990604325701412e55d7aaf47460a22311d1a5/pandas-3.0.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:48ee04b90e2505c693d3f8e8f524dab8cb8aaf7ddcab52c92afa535e717c4812", size = 10700014, upload-time = "2026-01-21T15:51:18.818Z" }, - { url = "https://files.pythonhosted.org/packages/55/db/2570bc40fb13aaed1cbc3fbd725c3a60ee162477982123c3adc8971e7ac1/pandas-3.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66f72fb172959af42a459e27a8d8d2c7e311ff4c1f7db6deb3b643dbc382ae08", size = 11323737, upload-time = "2026-01-21T15:51:20.784Z" }, - { url = "https://files.pythonhosted.org/packages/bc/2e/297ac7f21c8181b62a4cccebad0a70caf679adf3ae5e83cb676194c8acc3/pandas-3.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4a4a400ca18230976724a5066f20878af785f36c6756e498e94c2a5e5d57779c", size = 11771558, upload-time = "2026-01-21T15:51:22.977Z" }, - { url = "https://files.pythonhosted.org/packages/0a/46/e1c6876d71c14332be70239acce9ad435975a80541086e5ffba2f249bcf6/pandas-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:940eebffe55528074341a5a36515f3e4c5e25e958ebbc764c9502cfc35ba3faa", size = 10473771, upload-time = "2026-01-21T15:51:25.285Z" }, + { url = "https://files.pythonhosted.org/packages/37/51/b467209c08dae2c624873d7491ea47d2b47336e5403309d433ea79c38571/pandas-3.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:476f84f8c20c9f5bc47252b66b4bb25e1a9fc2fa98cead96744d8116cb85771d", size = 10344357, upload-time = "2026-02-17T22:18:38.262Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f1/e2567ffc8951ab371db2e40b2fe068e36b81d8cf3260f06ae508700e5504/pandas-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ab749dfba921edf641d4036c4c21c0b3ea70fea478165cb98a998fb2a261955", size = 9884543, upload-time = "2026-02-17T22:18:41.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8e36891080b87823aff3640c78649b91b8ff6eea3c0d70aeabd72ea43ab069b", size = 10396030, upload-time = "2026-02-17T22:18:43.822Z" }, + { url = "https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:532527a701281b9dd371e2f582ed9094f4c12dd9ffb82c0c54ee28d8ac9520c4", size = 10876435, upload-time = "2026-02-17T22:18:45.954Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a6/2a75320849dd154a793f69c951db759aedb8d1dd3939eeacda9bdcfa1629/pandas-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:356e5c055ed9b0da1580d465657bc7d00635af4fd47f30afb23025352ba764d1", size = 11405133, upload-time = "2026-02-17T22:18:48.533Z" }, + { url = "https://files.pythonhosted.org/packages/58/53/1d68fafb2e02d7881df66aa53be4cd748d25cbe311f3b3c85c93ea5d30ca/pandas-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d810036895f9ad6345b8f2a338dd6998a74e8483847403582cab67745bff821", size = 11932065, upload-time = "2026-02-17T22:18:50.837Z" }, + { url = "https://files.pythonhosted.org/packages/75/08/67cc404b3a966b6df27b38370ddd96b3b023030b572283d035181854aac5/pandas-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:536232a5fe26dd989bd633e7a0c450705fdc86a207fec7254a55e9a22950fe43", size = 9741627, upload-time = "2026-02-17T22:18:53.905Z" }, + { url = "https://files.pythonhosted.org/packages/86/4f/caf9952948fb00d23795f09b893d11f1cacb384e666854d87249530f7cbe/pandas-3.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f463ebfd8de7f326d38037c7363c6dacb857c5881ab8961fb387804d6daf2f7", size = 9052483, upload-time = "2026-02-17T22:18:57.31Z" }, + { url = "https://files.pythonhosted.org/packages/0b/48/aad6ec4f8d007534c091e9a7172b3ec1b1ee6d99a9cbb936b5eab6c6cf58/pandas-3.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5272627187b5d9c20e55d27caf5f2cd23e286aba25cadf73c8590e432e2b7262", size = 10317509, upload-time = "2026-02-17T22:18:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/a8/14/5990826f779f79148ae9d3a2c39593dc04d61d5d90541e71b5749f35af95/pandas-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:661e0f665932af88c7877f31da0dc743fe9c8f2524bdffe23d24fdcb67ef9d56", size = 9860561, upload-time = "2026-02-17T22:19:02.265Z" }, + { url = "https://files.pythonhosted.org/packages/fa/80/f01ff54664b6d70fed71475543d108a9b7c888e923ad210795bef04ffb7d/pandas-3.0.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:75e6e292ff898679e47a2199172593d9f6107fd2dd3617c22c2946e97d5df46e", size = 10365506, upload-time = "2026-02-17T22:19:05.017Z" }, + { url = "https://files.pythonhosted.org/packages/f2/85/ab6d04733a7d6ff32bfc8382bf1b07078228f5d6ebec5266b91bfc5c4ff7/pandas-3.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ff8cf1d2896e34343197685f432450ec99a85ba8d90cce2030c5eee2ef98791", size = 10873196, upload-time = "2026-02-17T22:19:07.204Z" }, + { url = "https://files.pythonhosted.org/packages/48/a9/9301c83d0b47c23ac5deab91c6b39fd98d5b5db4d93b25df8d381451828f/pandas-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eca8b4510f6763f3d37359c2105df03a7a221a508f30e396a51d0713d462e68a", size = 11370859, upload-time = "2026-02-17T22:19:09.436Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/0c1fc5bd2d29c7db2ab372330063ad555fb83e08422829c785f5ec2176ca/pandas-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:06aff2ad6f0b94a17822cf8b83bbb563b090ed82ff4fe7712db2ce57cd50d9b8", size = 11924584, upload-time = "2026-02-17T22:19:11.562Z" }, + { url = "https://files.pythonhosted.org/packages/d6/7d/216a1588b65a7aa5f4535570418a599d943c85afb1d95b0876fc00aa1468/pandas-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fea306c783e28884c29057a1d9baa11a349bbf99538ec1da44c8476563d1b25", size = 9742769, upload-time = "2026-02-17T22:19:13.926Z" }, + { url = "https://files.pythonhosted.org/packages/c4/cb/810a22a6af9a4e97c8ab1c946b47f3489c5bca5adc483ce0ffc84c9cc768/pandas-3.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:a8d37a43c52917427e897cb2e429f67a449327394396a81034a4449b99afda59", size = 9043855, upload-time = "2026-02-17T22:19:16.09Z" }, + { url = "https://files.pythonhosted.org/packages/92/fa/423c89086cca1f039cf1253c3ff5b90f157b5b3757314aa635f6bf3e30aa/pandas-3.0.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d54855f04f8246ed7b6fc96b05d4871591143c46c0b6f4af874764ed0d2d6f06", size = 10752673, upload-time = "2026-02-17T22:19:18.304Z" }, + { url = "https://files.pythonhosted.org/packages/22/23/b5a08ec1f40020397f0faba72f1e2c11f7596a6169c7b3e800abff0e433f/pandas-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e1b677accee34a09e0dc2ce5624e4a58a1870ffe56fc021e9caf7f23cd7668f", size = 10404967, upload-time = "2026-02-17T22:19:20.726Z" }, + { url = "https://files.pythonhosted.org/packages/5c/81/94841f1bb4afdc2b52a99daa895ac2c61600bb72e26525ecc9543d453ebc/pandas-3.0.1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9cabbdcd03f1b6cd254d6dda8ae09b0252524be1592594c00b7895916cb1324", size = 10320575, upload-time = "2026-02-17T22:19:24.919Z" }, + { url = "https://files.pythonhosted.org/packages/0a/8b/2ae37d66a5342a83adadfd0cb0b4bf9c3c7925424dd5f40d15d6cfaa35ee/pandas-3.0.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ae2ab1f166668b41e770650101e7090824fd34d17915dd9cd479f5c5e0065e9", size = 10710921, upload-time = "2026-02-17T22:19:27.181Z" }, + { url = "https://files.pythonhosted.org/packages/a2/61/772b2e2757855e232b7ccf7cb8079a5711becb3a97f291c953def15a833f/pandas-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6bf0603c2e30e2cafac32807b06435f28741135cb8697eae8b28c7d492fc7d76", size = 11334191, upload-time = "2026-02-17T22:19:29.411Z" }, + { url = "https://files.pythonhosted.org/packages/1b/08/b16c6df3ef555d8495d1d265a7963b65be166785d28f06a350913a4fac78/pandas-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c426422973973cae1f4a23e51d4ae85974f44871b24844e4f7de752dd877098", size = 11782256, upload-time = "2026-02-17T22:19:32.34Z" }, + { url = "https://files.pythonhosted.org/packages/55/80/178af0594890dee17e239fca96d3d8670ba0f5ff59b7d0439850924a9c09/pandas-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b03f91ae8c10a85c1613102c7bef5229b5379f343030a3ccefeca8a33414cf35", size = 10485047, upload-time = "2026-02-17T22:19:34.605Z" }, ] [[package]] @@ -2550,11 +2565,11 @@ wheels = [ [[package]] name = "parso" -version = "0.8.5" +version = "0.8.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } +sdist = { url = "https://files.pythonhosted.org/packages/81/76/a1e769043c0c0c9fe391b702539d594731a4362334cdf4dc25d0c09761e7/parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", size = 401621, upload-time = "2026-02-09T15:45:24.425Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, + { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894, upload-time = "2026-02-09T15:45:21.391Z" }, ] [[package]] @@ -2571,46 +2586,46 @@ wheels = [ [[package]] name = "pillow" -version = "12.1.0" +version = "12.1.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d0/02/d52c733a2452ef1ffcc123b68e6606d07276b0e358db70eabad7e40042b7/pillow-12.1.0.tar.gz", hash = "sha256:5c5ae0a06e9ea030ab786b0251b32c7e4ce10e58d983c0d5c56029455180b5b9", size = 46977283, upload-time = "2026-01-02T09:13:29.892Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/42/5c74462b4fd957fcd7b13b04fb3205ff8349236ea74c7c375766d6c82288/pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4", size = 46980264, upload-time = "2026-02-11T04:23:07.146Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/31/dc53fe21a2f2996e1b7d92bf671cdb157079385183ef7c1ae08b485db510/pillow-12.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a332ac4ccb84b6dde65dbace8431f3af08874bf9770719d32a635c4ef411b18b", size = 5262642, upload-time = "2026-01-02T09:11:10.138Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c1/10e45ac9cc79419cedf5121b42dcca5a50ad2b601fa080f58c22fb27626e/pillow-12.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:907bfa8a9cb790748a9aa4513e37c88c59660da3bcfffbd24a7d9e6abf224551", size = 4657464, upload-time = "2026-01-02T09:11:12.319Z" }, - { url = "https://files.pythonhosted.org/packages/ad/26/7b82c0ab7ef40ebede7a97c72d473bda5950f609f8e0c77b04af574a0ddb/pillow-12.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:efdc140e7b63b8f739d09a99033aa430accce485ff78e6d311973a67b6bf3208", size = 6234878, upload-time = "2026-01-02T09:11:14.096Z" }, - { url = "https://files.pythonhosted.org/packages/76/25/27abc9792615b5e886ca9411ba6637b675f1b77af3104710ac7353fe5605/pillow-12.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bef9768cab184e7ae6e559c032e95ba8d07b3023c289f79a2bd36e8bf85605a5", size = 8044868, upload-time = "2026-01-02T09:11:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ea/f200a4c36d836100e7bc738fc48cd963d3ba6372ebc8298a889e0cfc3359/pillow-12.1.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:742aea052cf5ab5034a53c3846165bc3ce88d7c38e954120db0ab867ca242661", size = 6349468, upload-time = "2026-01-02T09:11:17.631Z" }, - { url = "https://files.pythonhosted.org/packages/11/8f/48d0b77ab2200374c66d344459b8958c86693be99526450e7aee714e03e4/pillow-12.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a6dfc2af5b082b635af6e08e0d1f9f1c4e04d17d4e2ca0ef96131e85eda6eb17", size = 7041518, upload-time = "2026-01-02T09:11:19.389Z" }, - { url = "https://files.pythonhosted.org/packages/1d/23/c281182eb986b5d31f0a76d2a2c8cd41722d6fb8ed07521e802f9bba52de/pillow-12.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:609e89d9f90b581c8d16358c9087df76024cf058fa693dd3e1e1620823f39670", size = 6462829, upload-time = "2026-01-02T09:11:21.28Z" }, - { url = "https://files.pythonhosted.org/packages/25/ef/7018273e0faac099d7b00982abdcc39142ae6f3bd9ceb06de09779c4a9d6/pillow-12.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:43b4899cfd091a9693a1278c4982f3e50f7fb7cff5153b05174b4afc9593b616", size = 7166756, upload-time = "2026-01-02T09:11:23.559Z" }, - { url = "https://files.pythonhosted.org/packages/8f/c8/993d4b7ab2e341fe02ceef9576afcf5830cdec640be2ac5bee1820d693d4/pillow-12.1.0-cp312-cp312-win32.whl", hash = "sha256:aa0c9cc0b82b14766a99fbe6084409972266e82f459821cd26997a488a7261a7", size = 6328770, upload-time = "2026-01-02T09:11:25.661Z" }, - { url = "https://files.pythonhosted.org/packages/a7/87/90b358775a3f02765d87655237229ba64a997b87efa8ccaca7dd3e36e7a7/pillow-12.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:d70534cea9e7966169ad29a903b99fc507e932069a881d0965a1a84bb57f6c6d", size = 7033406, upload-time = "2026-01-02T09:11:27.474Z" }, - { url = "https://files.pythonhosted.org/packages/5d/cf/881b457eccacac9e5b2ddd97d5071fb6d668307c57cbf4e3b5278e06e536/pillow-12.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:65b80c1ee7e14a87d6a068dd3b0aea268ffcabfe0498d38661b00c5b4b22e74c", size = 2452612, upload-time = "2026-01-02T09:11:29.309Z" }, - { url = "https://files.pythonhosted.org/packages/dd/c7/2530a4aa28248623e9d7f27316b42e27c32ec410f695929696f2e0e4a778/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:7b5dd7cbae20285cdb597b10eb5a2c13aa9de6cde9bb64a3c1317427b1db1ae1", size = 4062543, upload-time = "2026-01-02T09:11:31.566Z" }, - { url = "https://files.pythonhosted.org/packages/8f/1f/40b8eae823dc1519b87d53c30ed9ef085506b05281d313031755c1705f73/pillow-12.1.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:29a4cef9cb672363926f0470afc516dbf7305a14d8c54f7abbb5c199cd8f8179", size = 4138373, upload-time = "2026-01-02T09:11:33.367Z" }, - { url = "https://files.pythonhosted.org/packages/d4/77/6fa60634cf06e52139fd0e89e5bbf055e8166c691c42fb162818b7fda31d/pillow-12.1.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:681088909d7e8fa9e31b9799aaa59ba5234c58e5e4f1951b4c4d1082a2e980e0", size = 3601241, upload-time = "2026-01-02T09:11:35.011Z" }, - { url = "https://files.pythonhosted.org/packages/4f/bf/28ab865de622e14b747f0cd7877510848252d950e43002e224fb1c9ababf/pillow-12.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:983976c2ab753166dc66d36af6e8ec15bb511e4a25856e2227e5f7e00a160587", size = 5262410, upload-time = "2026-01-02T09:11:36.682Z" }, - { url = "https://files.pythonhosted.org/packages/1c/34/583420a1b55e715937a85bd48c5c0991598247a1fd2eb5423188e765ea02/pillow-12.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:db44d5c160a90df2d24a24760bbd37607d53da0b34fb546c4c232af7192298ac", size = 4657312, upload-time = "2026-01-02T09:11:38.535Z" }, - { url = "https://files.pythonhosted.org/packages/1d/fd/f5a0896839762885b3376ff04878f86ab2b097c2f9a9cdccf4eda8ba8dc0/pillow-12.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6b7a9d1db5dad90e2991645874f708e87d9a3c370c243c2d7684d28f7e133e6b", size = 6232605, upload-time = "2026-01-02T09:11:40.602Z" }, - { url = "https://files.pythonhosted.org/packages/98/aa/938a09d127ac1e70e6ed467bd03834350b33ef646b31edb7452d5de43792/pillow-12.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6258f3260986990ba2fa8a874f8b6e808cf5abb51a94015ca3dc3c68aa4f30ea", size = 8041617, upload-time = "2026-01-02T09:11:42.721Z" }, - { url = "https://files.pythonhosted.org/packages/17/e8/538b24cb426ac0186e03f80f78bc8dc7246c667f58b540bdd57c71c9f79d/pillow-12.1.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e115c15e3bc727b1ca3e641a909f77f8ca72a64fff150f666fcc85e57701c26c", size = 6346509, upload-time = "2026-01-02T09:11:44.955Z" }, - { url = "https://files.pythonhosted.org/packages/01/9a/632e58ec89a32738cabfd9ec418f0e9898a2b4719afc581f07c04a05e3c9/pillow-12.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6741e6f3074a35e47c77b23a4e4f2d90db3ed905cb1c5e6e0d49bff2045632bc", size = 7038117, upload-time = "2026-01-02T09:11:46.736Z" }, - { url = "https://files.pythonhosted.org/packages/c7/a2/d40308cf86eada842ca1f3ffa45d0ca0df7e4ab33c83f81e73f5eaed136d/pillow-12.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:935b9d1aed48fcfb3f838caac506f38e29621b44ccc4f8a64d575cb1b2a88644", size = 6460151, upload-time = "2026-01-02T09:11:48.625Z" }, - { url = "https://files.pythonhosted.org/packages/f1/88/f5b058ad6453a085c5266660a1417bdad590199da1b32fb4efcff9d33b05/pillow-12.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5fee4c04aad8932da9f8f710af2c1a15a83582cfb884152a9caa79d4efcdbf9c", size = 7164534, upload-time = "2026-01-02T09:11:50.445Z" }, - { url = "https://files.pythonhosted.org/packages/19/ce/c17334caea1db789163b5d855a5735e47995b0b5dc8745e9a3605d5f24c0/pillow-12.1.0-cp313-cp313-win32.whl", hash = "sha256:a786bf667724d84aa29b5db1c61b7bfdde380202aaca12c3461afd6b71743171", size = 6332551, upload-time = "2026-01-02T09:11:52.234Z" }, - { url = "https://files.pythonhosted.org/packages/e5/07/74a9d941fa45c90a0d9465098fe1ec85de3e2afbdc15cc4766622d516056/pillow-12.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:461f9dfdafa394c59cd6d818bdfdbab4028b83b02caadaff0ffd433faf4c9a7a", size = 7040087, upload-time = "2026-01-02T09:11:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/88/09/c99950c075a0e9053d8e880595926302575bc742b1b47fe1bbcc8d388d50/pillow-12.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:9212d6b86917a2300669511ed094a9406888362e085f2431a7da985a6b124f45", size = 2452470, upload-time = "2026-01-02T09:11:56.522Z" }, - { url = "https://files.pythonhosted.org/packages/b5/ba/970b7d85ba01f348dee4d65412476321d40ee04dcb51cd3735b9dc94eb58/pillow-12.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:00162e9ca6d22b7c3ee8e61faa3c3253cd19b6a37f126cad04f2f88b306f557d", size = 5264816, upload-time = "2026-01-02T09:11:58.227Z" }, - { url = "https://files.pythonhosted.org/packages/10/60/650f2fb55fdba7a510d836202aa52f0baac633e50ab1cf18415d332188fb/pillow-12.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7d6daa89a00b58c37cb1747ec9fb7ac3bc5ffd5949f5888657dfddde6d1312e0", size = 4660472, upload-time = "2026-01-02T09:12:00.798Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c0/5273a99478956a099d533c4f46cbaa19fd69d606624f4334b85e50987a08/pillow-12.1.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e2479c7f02f9d505682dc47df8c0ea1fc5e264c4d1629a5d63fe3e2334b89554", size = 6268974, upload-time = "2026-01-02T09:12:02.572Z" }, - { url = "https://files.pythonhosted.org/packages/b4/26/0bf714bc2e73d5267887d47931d53c4ceeceea6978148ed2ab2a4e6463c4/pillow-12.1.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f188d580bd870cda1e15183790d1cc2fa78f666e76077d103edf048eed9c356e", size = 8073070, upload-time = "2026-01-02T09:12:04.75Z" }, - { url = "https://files.pythonhosted.org/packages/43/cf/1ea826200de111a9d65724c54f927f3111dc5ae297f294b370a670c17786/pillow-12.1.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0fde7ec5538ab5095cc02df38ee99b0443ff0e1c847a045554cf5f9af1f4aa82", size = 6380176, upload-time = "2026-01-02T09:12:06.626Z" }, - { url = "https://files.pythonhosted.org/packages/03/e0/7938dd2b2013373fd85d96e0f38d62b7a5a262af21ac274250c7ca7847c9/pillow-12.1.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ed07dca4a8464bada6139ab38f5382f83e5f111698caf3191cb8dbf27d908b4", size = 7067061, upload-time = "2026-01-02T09:12:08.624Z" }, - { url = "https://files.pythonhosted.org/packages/86/ad/a2aa97d37272a929a98437a8c0ac37b3cf012f4f8721e1bd5154699b2518/pillow-12.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:f45bd71d1fa5e5749587613037b172e0b3b23159d1c00ef2fc920da6f470e6f0", size = 6491824, upload-time = "2026-01-02T09:12:10.488Z" }, - { url = "https://files.pythonhosted.org/packages/a4/44/80e46611b288d51b115826f136fb3465653c28f491068a72d3da49b54cd4/pillow-12.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:277518bf4fe74aa91489e1b20577473b19ee70fb97c374aa50830b279f25841b", size = 7190911, upload-time = "2026-01-02T09:12:12.772Z" }, - { url = "https://files.pythonhosted.org/packages/86/77/eacc62356b4cf81abe99ff9dbc7402750044aed02cfd6a503f7c6fc11f3e/pillow-12.1.0-cp313-cp313t-win32.whl", hash = "sha256:7315f9137087c4e0ee73a761b163fc9aa3b19f5f606a7fc08d83fd3e4379af65", size = 6336445, upload-time = "2026-01-02T09:12:14.775Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3c/57d81d0b74d218706dafccb87a87ea44262c43eef98eb3b164fd000e0491/pillow-12.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:0ddedfaa8b5f0b4ffbc2fa87b556dc59f6bb4ecb14a53b33f9189713ae8053c0", size = 7045354, upload-time = "2026-01-02T09:12:16.599Z" }, - { url = "https://files.pythonhosted.org/packages/ac/82/8b9b97bba2e3576a340f93b044a3a3a09841170ab4c1eb0d5c93469fd32f/pillow-12.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:80941e6d573197a0c28f394753de529bb436b1ca990ed6e765cf42426abc39f8", size = 2454547, upload-time = "2026-01-02T09:12:18.704Z" }, + { url = "https://files.pythonhosted.org/packages/07/d3/8df65da0d4df36b094351dce696f2989bec731d4f10e743b1c5f4da4d3bf/pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052", size = 5262803, upload-time = "2026-02-11T04:20:47.653Z" }, + { url = "https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984", size = 4657601, upload-time = "2026-02-11T04:20:49.328Z" }, + { url = "https://files.pythonhosted.org/packages/b1/2e/1001613d941c67442f745aff0f7cc66dd8df9a9c084eb497e6a543ee6f7e/pillow-12.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79", size = 6234995, upload-time = "2026-02-11T04:20:51.032Z" }, + { url = "https://files.pythonhosted.org/packages/07/26/246ab11455b2549b9233dbd44d358d033a2f780fa9007b61a913c5b2d24e/pillow-12.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293", size = 8045012, upload-time = "2026-02-11T04:20:52.882Z" }, + { url = "https://files.pythonhosted.org/packages/b2/8b/07587069c27be7535ac1fe33874e32de118fbd34e2a73b7f83436a88368c/pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397", size = 6349638, upload-time = "2026-02-11T04:20:54.444Z" }, + { url = "https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0", size = 7041540, upload-time = "2026-02-11T04:20:55.97Z" }, + { url = "https://files.pythonhosted.org/packages/2c/5e/2ba19e7e7236d7529f4d873bdaf317a318896bac289abebd4bb00ef247f0/pillow-12.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3", size = 6462613, upload-time = "2026-02-11T04:20:57.542Z" }, + { url = "https://files.pythonhosted.org/packages/03/03/31216ec124bb5c3dacd74ce8efff4cc7f52643653bad4825f8f08c697743/pillow-12.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35", size = 7166745, upload-time = "2026-02-11T04:20:59.196Z" }, + { url = "https://files.pythonhosted.org/packages/1f/e7/7c4552d80052337eb28653b617eafdef39adfb137c49dd7e831b8dc13bc5/pillow-12.1.1-cp312-cp312-win32.whl", hash = "sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a", size = 6328823, upload-time = "2026-02-11T04:21:01.385Z" }, + { url = "https://files.pythonhosted.org/packages/3d/17/688626d192d7261bbbf98846fc98995726bddc2c945344b65bec3a29d731/pillow-12.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6", size = 7033367, upload-time = "2026-02-11T04:21:03.536Z" }, + { url = "https://files.pythonhosted.org/packages/ed/fe/a0ef1f73f939b0eca03ee2c108d0043a87468664770612602c63266a43c4/pillow-12.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523", size = 2453811, upload-time = "2026-02-11T04:21:05.116Z" }, + { url = "https://files.pythonhosted.org/packages/d5/11/6db24d4bd7685583caeae54b7009584e38da3c3d4488ed4cd25b439de486/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e", size = 4062689, upload-time = "2026-02-11T04:21:06.804Z" }, + { url = "https://files.pythonhosted.org/packages/33/c0/ce6d3b1fe190f0021203e0d9b5b99e57843e345f15f9ef22fcd43842fd21/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9", size = 4138535, upload-time = "2026-02-11T04:21:08.452Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c6/d5eb6a4fb32a3f9c21a8c7613ec706534ea1cf9f4b3663e99f0d83f6fca8/pillow-12.1.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6", size = 3601364, upload-time = "2026-02-11T04:21:10.194Z" }, + { url = "https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60", size = 5262561, upload-time = "2026-02-11T04:21:11.742Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2", size = 4657460, upload-time = "2026-02-11T04:21:13.786Z" }, + { url = "https://files.pythonhosted.org/packages/9e/1b/f1a4ea9a895b5732152789326202a82464d5254759fbacae4deea3069334/pillow-12.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850", size = 6232698, upload-time = "2026-02-11T04:21:15.949Z" }, + { url = "https://files.pythonhosted.org/packages/95/f4/86f51b8745070daf21fd2e5b1fe0eb35d4db9ca26e6d58366562fb56a743/pillow-12.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289", size = 8041706, upload-time = "2026-02-11T04:21:17.723Z" }, + { url = "https://files.pythonhosted.org/packages/29/9b/d6ecd956bb1266dd1045e995cce9b8d77759e740953a1c9aad9502a0461e/pillow-12.1.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e", size = 6346621, upload-time = "2026-02-11T04:21:19.547Z" }, + { url = "https://files.pythonhosted.org/packages/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717", size = 7038069, upload-time = "2026-02-11T04:21:21.378Z" }, + { url = "https://files.pythonhosted.org/packages/94/0e/58cb1a6bc48f746bc4cb3adb8cabff73e2742c92b3bf7a220b7cf69b9177/pillow-12.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a", size = 6460040, upload-time = "2026-02-11T04:21:23.148Z" }, + { url = "https://files.pythonhosted.org/packages/6c/57/9045cb3ff11eeb6c1adce3b2d60d7d299d7b273a2e6c8381a524abfdc474/pillow-12.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029", size = 7164523, upload-time = "2026-02-11T04:21:25.01Z" }, + { url = "https://files.pythonhosted.org/packages/73/f2/9be9cb99f2175f0d4dbadd6616ce1bf068ee54a28277ea1bf1fbf729c250/pillow-12.1.1-cp313-cp313-win32.whl", hash = "sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b", size = 6332552, upload-time = "2026-02-11T04:21:27.238Z" }, + { url = "https://files.pythonhosted.org/packages/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1", size = 7040108, upload-time = "2026-02-11T04:21:29.462Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7d/fc09634e2aabdd0feabaff4a32f4a7d97789223e7c2042fd805ea4b4d2c2/pillow-12.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a", size = 2453712, upload-time = "2026-02-11T04:21:31.072Z" }, + { url = "https://files.pythonhosted.org/packages/19/2a/b9d62794fc8a0dd14c1943df68347badbd5511103e0d04c035ffe5cf2255/pillow-12.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da", size = 5264880, upload-time = "2026-02-11T04:21:32.865Z" }, + { url = "https://files.pythonhosted.org/packages/26/9d/e03d857d1347fa5ed9247e123fcd2a97b6220e15e9cb73ca0a8d91702c6e/pillow-12.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc", size = 4660616, upload-time = "2026-02-11T04:21:34.97Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ec/8a6d22afd02570d30954e043f09c32772bfe143ba9285e2fdb11284952cd/pillow-12.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c", size = 6269008, upload-time = "2026-02-11T04:21:36.623Z" }, + { url = "https://files.pythonhosted.org/packages/3d/1d/6d875422c9f28a4a361f495a5f68d9de4a66941dc2c619103ca335fa6446/pillow-12.1.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8", size = 8073226, upload-time = "2026-02-11T04:21:38.585Z" }, + { url = "https://files.pythonhosted.org/packages/a1/cd/134b0b6ee5eda6dc09e25e24b40fdafe11a520bc725c1d0bbaa5e00bf95b/pillow-12.1.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20", size = 6380136, upload-time = "2026-02-11T04:21:40.562Z" }, + { url = "https://files.pythonhosted.org/packages/7a/a9/7628f013f18f001c1b98d8fffe3452f306a70dc6aba7d931019e0492f45e/pillow-12.1.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13", size = 7067129, upload-time = "2026-02-11T04:21:42.521Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f8/66ab30a2193b277785601e82ee2d49f68ea575d9637e5e234faaa98efa4c/pillow-12.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf", size = 6491807, upload-time = "2026-02-11T04:21:44.22Z" }, + { url = "https://files.pythonhosted.org/packages/da/0b/a877a6627dc8318fdb84e357c5e1a758c0941ab1ddffdafd231983788579/pillow-12.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524", size = 7190954, upload-time = "2026-02-11T04:21:46.114Z" }, + { url = "https://files.pythonhosted.org/packages/83/43/6f732ff85743cf746b1361b91665d9f5155e1483817f693f8d57ea93147f/pillow-12.1.1-cp313-cp313t-win32.whl", hash = "sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986", size = 6336441, upload-time = "2026-02-11T04:21:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/3b/44/e865ef3986611bb75bfabdf94a590016ea327833f434558801122979cd0e/pillow-12.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c", size = 7045383, upload-time = "2026-02-11T04:21:50.015Z" }, + { url = "https://files.pythonhosted.org/packages/a8/c6/f4fb24268d0c6908b9f04143697ea18b0379490cb74ba9e8d41b898bd005/pillow-12.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3", size = 2456104, upload-time = "2026-02-11T04:21:51.633Z" }, ] [[package]] @@ -2624,11 +2639,11 @@ wheels = [ [[package]] name = "platformdirs" -version = "4.5.1" +version = "4.9.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/04/fea538adf7dbbd6d186f551d595961e564a3b6715bdf276b477460858672/platformdirs-4.9.2.tar.gz", hash = "sha256:9a33809944b9db043ad67ca0db94b14bf452cc6aeaac46a88ea55b26e2e9d291", size = 28394, upload-time = "2026-02-16T03:56:10.574Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, + { url = "https://files.pythonhosted.org/packages/48/31/05e764397056194206169869b50cf2fee4dbbbc71b344705b9c0d878d4d8/platformdirs-4.9.2-py3-none-any.whl", hash = "sha256:9170634f126f8efdae22fb58ae8a0eaa86f38365bc57897a6c4f781d1f5875bd", size = 21168, upload-time = "2026-02-16T03:56:08.891Z" }, ] [[package]] @@ -2766,15 +2781,15 @@ wheels = [ [[package]] name = "psycopg" -version = "3.3.2" +version = "3.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.13'" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e0/1a/7d9ef4fdc13ef7f15b934c393edc97a35c281bb7d3c3329fbfcbe915a7c2/psycopg-3.3.2.tar.gz", hash = "sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7", size = 165630, upload-time = "2025-12-06T17:34:53.899Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/b6/379d0a960f8f435ec78720462fd94c4863e7a31237cf81bf76d0af5883bf/psycopg-3.3.3.tar.gz", hash = "sha256:5e9a47458b3c1583326513b2556a2a9473a1001a56c9efe9e587245b43148dd9", size = 165624, upload-time = "2026-02-18T16:52:16.546Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/51/2779ccdf9305981a06b21a6b27e8547c948d85c41c76ff434192784a4c93/psycopg-3.3.2-py3-none-any.whl", hash = "sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b", size = 212774, upload-time = "2025-12-06T17:31:41.414Z" }, + { url = "https://files.pythonhosted.org/packages/c8/5b/181e2e3becb7672b502f0ed7f16ed7352aca7c109cfb94cf3878a9186db9/psycopg-3.3.3-py3-none-any.whl", hash = "sha256:f96525a72bcfade6584ab17e89de415ff360748c766f0106959144dcbb38c698", size = 212768, upload-time = "2026-02-18T16:46:27.365Z" }, ] [package.optional-dependencies] @@ -2784,31 +2799,31 @@ binary = [ [[package]] name = "psycopg-binary" -version = "3.3.2" +version = "3.3.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/1e/8614b01c549dd7e385dacdcd83fe194f6b3acb255a53cc67154ee6bf00e7/psycopg_binary-3.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a9387ab615f929e71ef0f4a8a51e986fa06236ccfa9f3ec98a88f60fbf230634", size = 4579832, upload-time = "2025-12-06T17:33:01.388Z" }, - { url = "https://files.pythonhosted.org/packages/26/97/0bb093570fae2f4454d42c1ae6000f15934391867402f680254e4a7def54/psycopg_binary-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3ff7489df5e06c12d1829544eaec64970fe27fe300f7cf04c8495fe682064688", size = 4658786, upload-time = "2025-12-06T17:33:05.022Z" }, - { url = "https://files.pythonhosted.org/packages/61/20/1d9383e3f2038826900a14137b0647d755f67551aab316e1021443105ed5/psycopg_binary-3.3.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:9742580ecc8e1ac45164e98d32ca6df90da509c2d3ff26be245d94c430f92db4", size = 5454896, upload-time = "2025-12-06T17:33:09.023Z" }, - { url = "https://files.pythonhosted.org/packages/a6/62/513c80ad8bbb545e364f7737bf2492d34a4c05eef4f7b5c16428dc42260d/psycopg_binary-3.3.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d45acedcaa58619355f18e0f42af542fcad3fd84ace4b8355d3a5dea23318578", size = 5132731, upload-time = "2025-12-06T17:33:12.519Z" }, - { url = "https://files.pythonhosted.org/packages/f3/28/ddf5f5905f088024bccb19857949467407c693389a14feb527d6171d8215/psycopg_binary-3.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d88f32ff8c47cb7f4e7e7a9d1747dcee6f3baa19ed9afa9e5694fd2fb32b61ed", size = 6724495, upload-time = "2025-12-06T17:33:16.624Z" }, - { url = "https://files.pythonhosted.org/packages/6e/93/a1157ebcc650960b264542b547f7914d87a42ff0cc15a7584b29d5807e6b/psycopg_binary-3.3.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:59d0163c4617a2c577cb34afbed93d7a45b8c8364e54b2bd2020ff25d5f5f860", size = 4964979, upload-time = "2025-12-06T17:33:20.179Z" }, - { url = "https://files.pythonhosted.org/packages/0e/27/65939ba6798f9c5be4a5d9cd2061ebaf0851798525c6811d347821c8132d/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e750afe74e6c17b2c7046d2c3e3173b5a3f6080084671c8aa327215323df155b", size = 4493648, upload-time = "2025-12-06T17:33:23.464Z" }, - { url = "https://files.pythonhosted.org/packages/8a/c4/5e9e4b9b1c1e27026e43387b0ba4aaf3537c7806465dd3f1d5bde631752a/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f26f113013c4dcfbfe9ced57b5bad2035dda1a7349f64bf726021968f9bccad3", size = 4173392, upload-time = "2025-12-06T17:33:26.88Z" }, - { url = "https://files.pythonhosted.org/packages/c6/81/cf43fb76993190cee9af1cbcfe28afb47b1928bdf45a252001017e5af26e/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8309ee4569dced5e81df5aa2dcd48c7340c8dee603a66430f042dfbd2878edca", size = 3909241, upload-time = "2025-12-06T17:33:30.092Z" }, - { url = "https://files.pythonhosted.org/packages/9d/20/c6377a0d17434674351627489deca493ea0b137c522b99c81d3a106372c8/psycopg_binary-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c6464150e25b68ae3cb04c4e57496ea11ebfaae4d98126aea2f4702dd43e3c12", size = 4219746, upload-time = "2025-12-06T17:33:33.097Z" }, - { url = "https://files.pythonhosted.org/packages/25/32/716c57b28eefe02a57a4c9d5bf956849597f5ea476c7010397199e56cfde/psycopg_binary-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:716a586f99bbe4f710dc58b40069fcb33c7627e95cc6fc936f73c9235e07f9cf", size = 3537494, upload-time = "2025-12-06T17:33:35.82Z" }, - { url = "https://files.pythonhosted.org/packages/14/73/7ca7cb22b9ac7393fb5de7d28ca97e8347c375c8498b3bff2c99c1f38038/psycopg_binary-3.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fc5a189e89cbfff174588665bb18d28d2d0428366cc9dae5864afcaa2e57380b", size = 4579068, upload-time = "2025-12-06T17:33:39.303Z" }, - { url = "https://files.pythonhosted.org/packages/f5/42/0cf38ff6c62c792fc5b55398a853a77663210ebd51ed6f0c4a05b06f95a6/psycopg_binary-3.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:083c2e182be433f290dc2c516fd72b9b47054fcd305cce791e0a50d9e93e06f2", size = 4657520, upload-time = "2025-12-06T17:33:42.536Z" }, - { url = "https://files.pythonhosted.org/packages/3b/60/df846bc84cbf2231e01b0fff48b09841fe486fa177665e50f4995b1bfa44/psycopg_binary-3.3.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:ac230e3643d1c436a2dfb59ca84357dfc6862c9f372fc5dbd96bafecae581f9f", size = 5452086, upload-time = "2025-12-06T17:33:46.54Z" }, - { url = "https://files.pythonhosted.org/packages/ab/85/30c846a00db86b1b53fd5bfd4b4edfbd0c00de8f2c75dd105610bd7568fc/psycopg_binary-3.3.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d8c899a540f6c7585cee53cddc929dd4d2db90fd828e37f5d4017b63acbc1a5d", size = 5131125, upload-time = "2025-12-06T17:33:50.413Z" }, - { url = "https://files.pythonhosted.org/packages/6d/15/9968732013373f36f8a2a3fb76104dffc8efd9db78709caa5ae1a87b1f80/psycopg_binary-3.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50ff10ab8c0abdb5a5451b9315538865b50ba64c907742a1385fdf5f5772b73e", size = 6722914, upload-time = "2025-12-06T17:33:54.544Z" }, - { url = "https://files.pythonhosted.org/packages/b2/ba/29e361fe02143ac5ff5a1ca3e45697344cfbebe2eaf8c4e7eec164bff9a0/psycopg_binary-3.3.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:23d2594af848c1fd3d874a9364bef50730124e72df7bb145a20cb45e728c50ed", size = 4966081, upload-time = "2025-12-06T17:33:58.477Z" }, - { url = "https://files.pythonhosted.org/packages/99/45/1be90c8f1a1a237046903e91202fb06708745c179f220b361d6333ed7641/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea4fe6b4ead3bbbe27244ea224fcd1f53cb119afc38b71a2f3ce570149a03e30", size = 4493332, upload-time = "2025-12-06T17:34:02.011Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b5/bbdc07d5f0a5e90c617abd624368182aa131485e18038b2c6c85fc054aed/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:742ce48cde825b8e52fb1a658253d6d1ff66d152081cbc76aa45e2986534858d", size = 4170781, upload-time = "2025-12-06T17:34:05.298Z" }, - { url = "https://files.pythonhosted.org/packages/d1/2a/0d45e4f4da2bd78c3237ffa03475ef3751f69a81919c54a6e610eb1a7c96/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e22bf6b54df994aff37ab52695d635f1ef73155e781eee1f5fa75bc08b58c8da", size = 3910544, upload-time = "2025-12-06T17:34:08.251Z" }, - { url = "https://files.pythonhosted.org/packages/3a/62/a8e0f092f4dbef9a94b032fb71e214cf0a375010692fbe7493a766339e47/psycopg_binary-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8db9034cde3bcdafc66980f0130813f5c5d19e74b3f2a19fb3cfbc25ad113121", size = 4220070, upload-time = "2025-12-06T17:34:11.392Z" }, - { url = "https://files.pythonhosted.org/packages/09/e6/5fc8d8aff8afa114bb4a94a0341b9309311e8bf3ab32d816032f8b984d4e/psycopg_binary-3.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:df65174c7cf6b05ea273ce955927d3270b3a6e27b0b12762b009ce6082b8d3fc", size = 3540922, upload-time = "2025-12-06T17:34:14.88Z" }, + { url = "https://files.pythonhosted.org/packages/90/15/021be5c0cbc5b7c1ab46e91cc3434eb42569f79a0592e67b8d25e66d844d/psycopg_binary-3.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6698dbab5bcef8fdb570fc9d35fd9ac52041771bfcfe6fd0fc5f5c4e36f1e99d", size = 4591170, upload-time = "2026-02-18T16:48:55.594Z" }, + { url = "https://files.pythonhosted.org/packages/f1/54/a60211c346c9a2f8c6b272b5f2bbe21f6e11800ce7f61e99ba75cf8b63e1/psycopg_binary-3.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:329ff393441e75f10b673ae99ab45276887993d49e65f141da20d915c05aafd8", size = 4670009, upload-time = "2026-02-18T16:49:03.608Z" }, + { url = "https://files.pythonhosted.org/packages/c1/53/ac7c18671347c553362aadbf65f92786eef9540676ca24114cc02f5be405/psycopg_binary-3.3.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:eb072949b8ebf4082ae24289a2b0fd724da9adc8f22743409d6fd718ddb379df", size = 5469735, upload-time = "2026-02-18T16:49:10.128Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c3/4f4e040902b82a344eff1c736cde2f2720f127fe939c7e7565706f96dd44/psycopg_binary-3.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:263a24f39f26e19ed7fc982d7859a36f17841b05bebad3eb47bb9cd2dd785351", size = 5152919, upload-time = "2026-02-18T16:49:16.335Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/d929679c6a5c212bcf738806c7c89f5b3d0919f2e1685a0e08d6ff877945/psycopg_binary-3.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5152d50798c2fa5bd9b68ec68eb68a1b71b95126c1d70adaa1a08cd5eefdc23d", size = 6738785, upload-time = "2026-02-18T16:49:22.687Z" }, + { url = "https://files.pythonhosted.org/packages/69/b0/09703aeb69a9443d232d7b5318d58742e8ca51ff79f90ffe6b88f1db45e7/psycopg_binary-3.3.3-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9d6a1e56dd267848edb824dbeb08cf5bac649e02ee0b03ba883ba3f4f0bd54f2", size = 4979008, upload-time = "2026-02-18T16:49:27.313Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a6/e662558b793c6e13a7473b970fee327d635270e41eded3090ef14045a6a5/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73eaaf4bb04709f545606c1db2f65f4000e8a04cdbf3e00d165a23004692093e", size = 4508255, upload-time = "2026-02-18T16:49:31.575Z" }, + { url = "https://files.pythonhosted.org/packages/5f/7f/0f8b2e1d5e0093921b6f324a948a5c740c1447fbb45e97acaf50241d0f39/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:162e5675efb4704192411eaf8e00d07f7960b679cd3306e7efb120bb8d9456cc", size = 4189166, upload-time = "2026-02-18T16:49:35.801Z" }, + { url = "https://files.pythonhosted.org/packages/92/ec/ce2e91c33bc8d10b00c87e2f6b0fb570641a6a60042d6a9ae35658a3a797/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:fab6b5e37715885c69f5d091f6ff229be71e235f272ebaa35158d5a46fd548a0", size = 3924544, upload-time = "2026-02-18T16:49:41.129Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2f/7718141485f73a924205af60041c392938852aa447a94c8cbd222ff389a1/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a4aab31bd6d1057f287c96c0effca3a25584eb9cc702f282ecb96ded7814e830", size = 4235297, upload-time = "2026-02-18T16:49:46.726Z" }, + { url = "https://files.pythonhosted.org/packages/57/f9/1add717e2643a003bbde31b1b220172e64fbc0cb09f06429820c9173f7fc/psycopg_binary-3.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:59aa31fe11a0e1d1bcc2ce37ed35fe2ac84cd65bb9036d049b1a1c39064d0f14", size = 3547659, upload-time = "2026-02-18T16:49:52.999Z" }, + { url = "https://files.pythonhosted.org/packages/03/0a/cac9fdf1df16a269ba0e5f0f06cac61f826c94cadb39df028cdfe19d3a33/psycopg_binary-3.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05f32239aec25c5fb15f7948cffdc2dc0dac098e48b80a140e4ba32b572a2e7d", size = 4590414, upload-time = "2026-02-18T16:50:01.441Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c0/d8f8508fbf440edbc0099b1abff33003cd80c9e66eb3a1e78834e3fb4fb9/psycopg_binary-3.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c84f9d214f2d1de2fafebc17fa68ac3f6561a59e291553dfc45ad299f4898c1", size = 4669021, upload-time = "2026-02-18T16:50:08.803Z" }, + { url = "https://files.pythonhosted.org/packages/04/05/097016b77e343b4568feddf12c72171fc513acef9a4214d21b9478569068/psycopg_binary-3.3.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e77957d2ba17cada11be09a5066d93026cdb61ada7c8893101d7fe1c6e1f3925", size = 5467453, upload-time = "2026-02-18T16:50:14.985Z" }, + { url = "https://files.pythonhosted.org/packages/91/23/73244e5feb55b5ca109cede6e97f32ef45189f0fdac4c80d75c99862729d/psycopg_binary-3.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:42961609ac07c232a427da7c87a468d3c82fee6762c220f38e37cfdacb2b178d", size = 5151135, upload-time = "2026-02-18T16:50:24.82Z" }, + { url = "https://files.pythonhosted.org/packages/11/49/5309473b9803b207682095201d8708bbc7842ddf3f192488a69204e36455/psycopg_binary-3.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae07a3114313dd91fce686cab2f4c44af094398519af0e0f854bc707e1aeedf1", size = 6737315, upload-time = "2026-02-18T16:50:35.106Z" }, + { url = "https://files.pythonhosted.org/packages/d4/5d/03abe74ef34d460b33c4d9662bf6ec1dd38888324323c1a1752133c10377/psycopg_binary-3.3.3-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d257c58d7b36a621dcce1d01476ad8b60f12d80eb1406aee4cf796f88b2ae482", size = 4979783, upload-time = "2026-02-18T16:50:42.067Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6c/3fbf8e604e15f2f3752900434046c00c90bb8764305a1b81112bff30ba24/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:07c7211f9327d522c9c47560cae00a4ecf6687f4e02d779d035dd3177b41cb12", size = 4509023, upload-time = "2026-02-18T16:50:50.116Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6b/1a06b43b7c7af756c80b67eac8bfaa51d77e68635a8a8d246e4f0bb7604a/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8e7e9eca9b363dbedeceeadd8be97149d2499081f3c52d141d7cd1f395a91f83", size = 4185874, upload-time = "2026-02-18T16:50:55.97Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d3/bf49e3dcaadba510170c8d111e5e69e5ae3f981c1554c5bb71c75ce354bb/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cb85b1d5702877c16f28d7b92ba030c1f49ebcc9b87d03d8c10bf45a2f1c7508", size = 3925668, upload-time = "2026-02-18T16:51:03.299Z" }, + { url = "https://files.pythonhosted.org/packages/f8/92/0aac830ed6a944fe334404e1687a074e4215630725753f0e3e9a9a595b62/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d4606c84d04b80f9138d72f1e28c6c02dc5ae0c7b8f3f8aaf89c681ce1cd1b1", size = 4234973, upload-time = "2026-02-18T16:51:09.097Z" }, + { url = "https://files.pythonhosted.org/packages/2e/96/102244653ee5a143ece5afe33f00f52fe64e389dfce8dbc87580c6d70d3d/psycopg_binary-3.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:74eae563166ebf74e8d950ff359be037b85723d99ca83f57d9b244a871d6c13b", size = 3551342, upload-time = "2026-02-18T16:51:13.892Z" }, ] [[package]] @@ -2955,14 +2970,14 @@ wheels = [ [[package]] name = "pytest-django" -version = "4.11.1" +version = "4.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pytest" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/fb/55d580352db26eb3d59ad50c64321ddfe228d3d8ac107db05387a2fadf3a/pytest_django-4.11.1.tar.gz", hash = "sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991", size = 86202, upload-time = "2025-04-03T18:56:09.338Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/2b/db9a193df89e5660137f5428063bcc2ced7ad790003b26974adf5c5ceb3b/pytest_django-4.12.0.tar.gz", hash = "sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758", size = 91156, upload-time = "2026-02-14T18:40:49.235Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl", hash = "sha256:1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10", size = 25281, upload-time = "2025-04-03T18:56:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/83/a5/41d091f697c09609e7ef1d5d61925494e0454ebf51de7de05f0f0a728f1d/pytest_django-4.12.0-py3-none-any.whl", hash = "sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85", size = 26123, upload-time = "2026-02-14T18:40:47.381Z" }, ] [[package]] @@ -3093,11 +3108,11 @@ wheels = [ [[package]] name = "redis" -version = "7.1.0" +version = "7.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/c8/983d5c6579a411d8a99bc5823cc5712768859b5ce2c8afe1a65b37832c81/redis-7.1.0.tar.gz", hash = "sha256:b1cc3cfa5a2cb9c2ab3ba700864fb0ad75617b41f01352ce5779dabf6d5f9c3c", size = 4796669, upload-time = "2025-11-19T15:54:39.961Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/32/6fac13a11e73e1bc67a2ae821a72bfe4c2d8c4c48f0267e4a952be0f1bae/redis-7.2.0.tar.gz", hash = "sha256:4dd5bf4bd4ae80510267f14185a15cba2a38666b941aff68cccf0256b51c1f26", size = 4901247, upload-time = "2026-02-16T17:16:22.797Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl", hash = "sha256:23c52b208f92b56103e17c5d06bdc1a6c2c0b3106583985a76a18f83b265de2b", size = 354159, upload-time = "2025-11-19T15:54:38.064Z" }, + { url = "https://files.pythonhosted.org/packages/86/cf/f6180b67f99688d83e15c84c5beda831d1d341e95872d224f87ccafafe61/redis-7.2.0-py3-none-any.whl", hash = "sha256:01f591f8598e483f1842d429e8ae3a820804566f1c73dca1b80e23af9fba0497", size = 394898, upload-time = "2026-02-16T17:16:20.693Z" }, ] [[package]] @@ -3240,27 +3255,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.15.0" +version = "0.15.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c8/39/5cee96809fbca590abea6b46c6d1c586b49663d1d2830a751cc8fc42c666/ruff-0.15.0.tar.gz", hash = "sha256:6bdea47cdbea30d40f8f8d7d69c0854ba7c15420ec75a26f463290949d7f7e9a", size = 4524893, upload-time = "2026-02-03T17:53:35.357Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/04/eab13a954e763b0606f460443fcbf6bb5a0faf06890ea3754ff16523dce5/ruff-0.15.2.tar.gz", hash = "sha256:14b965afee0969e68bb871eba625343b8673375f457af4abe98553e8bbb98342", size = 4558148, upload-time = "2026-02-19T22:32:20.271Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/88/3fd1b0aa4b6330d6aaa63a285bc96c9f71970351579152d231ed90914586/ruff-0.15.0-py3-none-linux_armv6l.whl", hash = "sha256:aac4ebaa612a82b23d45964586f24ae9bc23ca101919f5590bdb368d74ad5455", size = 10354332, upload-time = "2026-02-03T17:52:54.892Z" }, - { url = "https://files.pythonhosted.org/packages/72/f6/62e173fbb7eb75cc29fe2576a1e20f0a46f671a2587b5f604bfb0eaf5f6f/ruff-0.15.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:dcd4be7cc75cfbbca24a98d04d0b9b36a270d0833241f776b788d59f4142b14d", size = 10767189, upload-time = "2026-02-03T17:53:19.778Z" }, - { url = "https://files.pythonhosted.org/packages/99/e4/968ae17b676d1d2ff101d56dc69cf333e3a4c985e1ec23803df84fc7bf9e/ruff-0.15.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d747e3319b2bce179c7c1eaad3d884dc0a199b5f4d5187620530adf9105268ce", size = 10075384, upload-time = "2026-02-03T17:53:29.241Z" }, - { url = "https://files.pythonhosted.org/packages/a2/bf/9843c6044ab9e20af879c751487e61333ca79a2c8c3058b15722386b8cae/ruff-0.15.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:650bd9c56ae03102c51a5e4b554d74d825ff3abe4db22b90fd32d816c2e90621", size = 10481363, upload-time = "2026-02-03T17:52:43.332Z" }, - { url = "https://files.pythonhosted.org/packages/55/d9/4ada5ccf4cd1f532db1c8d44b6f664f2208d3d93acbeec18f82315e15193/ruff-0.15.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6664b7eac559e3048223a2da77769c2f92b43a6dfd4720cef42654299a599c9", size = 10187736, upload-time = "2026-02-03T17:53:00.522Z" }, - { url = "https://files.pythonhosted.org/packages/86/e2/f25eaecd446af7bb132af0a1d5b135a62971a41f5366ff41d06d25e77a91/ruff-0.15.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f811f97b0f092b35320d1556f3353bf238763420ade5d9e62ebd2b73f2ff179", size = 10968415, upload-time = "2026-02-03T17:53:15.705Z" }, - { url = "https://files.pythonhosted.org/packages/e7/dc/f06a8558d06333bf79b497d29a50c3a673d9251214e0d7ec78f90b30aa79/ruff-0.15.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761ec0a66680fab6454236635a39abaf14198818c8cdf691e036f4bc0f406b2d", size = 11809643, upload-time = "2026-02-03T17:53:23.031Z" }, - { url = "https://files.pythonhosted.org/packages/dd/45/0ece8db2c474ad7df13af3a6d50f76e22a09d078af63078f005057ca59eb/ruff-0.15.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:940f11c2604d317e797b289f4f9f3fa5555ffe4fb574b55ed006c3d9b6f0eb78", size = 11234787, upload-time = "2026-02-03T17:52:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/8a/d9/0e3a81467a120fd265658d127db648e4d3acfe3e4f6f5d4ea79fac47e587/ruff-0.15.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcbca3d40558789126da91d7ef9a7c87772ee107033db7191edefa34e2c7f1b4", size = 11112797, upload-time = "2026-02-03T17:52:49.274Z" }, - { url = "https://files.pythonhosted.org/packages/b2/cb/8c0b3b0c692683f8ff31351dfb6241047fa873a4481a76df4335a8bff716/ruff-0.15.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9a121a96db1d75fa3eb39c4539e607f628920dd72ff1f7c5ee4f1b768ac62d6e", size = 11033133, upload-time = "2026-02-03T17:53:33.105Z" }, - { url = "https://files.pythonhosted.org/packages/f8/5e/23b87370cf0f9081a8c89a753e69a4e8778805b8802ccfe175cc410e50b9/ruff-0.15.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:5298d518e493061f2eabd4abd067c7e4fb89e2f63291c94332e35631c07c3662", size = 10442646, upload-time = "2026-02-03T17:53:06.278Z" }, - { url = "https://files.pythonhosted.org/packages/e1/9a/3c94de5ce642830167e6d00b5c75aacd73e6347b4c7fc6828699b150a5ee/ruff-0.15.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:afb6e603d6375ff0d6b0cee563fa21ab570fd15e65c852cb24922cef25050cf1", size = 10195750, upload-time = "2026-02-03T17:53:26.084Z" }, - { url = "https://files.pythonhosted.org/packages/30/15/e396325080d600b436acc970848d69df9c13977942fb62bb8722d729bee8/ruff-0.15.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:77e515f6b15f828b94dc17d2b4ace334c9ddb7d9468c54b2f9ed2b9c1593ef16", size = 10676120, upload-time = "2026-02-03T17:53:09.363Z" }, - { url = "https://files.pythonhosted.org/packages/8d/c9/229a23d52a2983de1ad0fb0ee37d36e0257e6f28bfd6b498ee2c76361874/ruff-0.15.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:6f6e80850a01eb13b3e42ee0ebdf6e4497151b48c35051aab51c101266d187a3", size = 11201636, upload-time = "2026-02-03T17:52:57.281Z" }, - { url = "https://files.pythonhosted.org/packages/6f/b0/69adf22f4e24f3677208adb715c578266842e6e6a3cc77483f48dd999ede/ruff-0.15.0-py3-none-win32.whl", hash = "sha256:238a717ef803e501b6d51e0bdd0d2c6e8513fe9eec14002445134d3907cd46c3", size = 10465945, upload-time = "2026-02-03T17:53:12.591Z" }, - { url = "https://files.pythonhosted.org/packages/51/ad/f813b6e2c97e9b4598be25e94a9147b9af7e60523b0cb5d94d307c15229d/ruff-0.15.0-py3-none-win_amd64.whl", hash = "sha256:dd5e4d3301dc01de614da3cdffc33d4b1b96fb89e45721f1598e5532ccf78b18", size = 11564657, upload-time = "2026-02-03T17:52:51.893Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b0/2d823f6e77ebe560f4e397d078487e8d52c1516b331e3521bc75db4272ca/ruff-0.15.0-py3-none-win_arm64.whl", hash = "sha256:c480d632cc0ca3f0727acac8b7d053542d9e114a462a145d0b00e7cd658c515a", size = 10865753, upload-time = "2026-02-03T17:53:03.014Z" }, + { url = "https://files.pythonhosted.org/packages/2f/70/3a4dc6d09b13cb3e695f28307e5d889b2e1a66b7af9c5e257e796695b0e6/ruff-0.15.2-py3-none-linux_armv6l.whl", hash = "sha256:120691a6fdae2f16d65435648160f5b81a9625288f75544dc40637436b5d3c0d", size = 10430565, upload-time = "2026-02-19T22:32:41.824Z" }, + { url = "https://files.pythonhosted.org/packages/71/0b/bb8457b56185ece1305c666dc895832946d24055be90692381c31d57466d/ruff-0.15.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a89056d831256099658b6bba4037ac6dd06f49d194199215befe2bb10457ea5e", size = 10820354, upload-time = "2026-02-19T22:32:07.366Z" }, + { url = "https://files.pythonhosted.org/packages/2d/c1/e0532d7f9c9e0b14c46f61b14afd563298b8b83f337b6789ddd987e46121/ruff-0.15.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e36dee3a64be0ebd23c86ffa3aa3fd3ac9a712ff295e192243f814a830b6bd87", size = 10170767, upload-time = "2026-02-19T22:32:13.188Z" }, + { url = "https://files.pythonhosted.org/packages/47/e8/da1aa341d3af017a21c7a62fb5ec31d4e7ad0a93ab80e3a508316efbcb23/ruff-0.15.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9fb47b6d9764677f8c0a193c0943ce9a05d6763523f132325af8a858eadc2b9", size = 10529591, upload-time = "2026-02-19T22:32:02.547Z" }, + { url = "https://files.pythonhosted.org/packages/93/74/184fbf38e9f3510231fbc5e437e808f0b48c42d1df9434b208821efcd8d6/ruff-0.15.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f376990f9d0d6442ea9014b19621d8f2aaf2b8e39fdbfc79220b7f0c596c9b80", size = 10260771, upload-time = "2026-02-19T22:32:36.938Z" }, + { url = "https://files.pythonhosted.org/packages/05/ac/605c20b8e059a0bc4b42360414baa4892ff278cec1c91fff4be0dceedefd/ruff-0.15.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2dcc987551952d73cbf5c88d9fdee815618d497e4df86cd4c4824cc59d5dd75f", size = 11045791, upload-time = "2026-02-19T22:32:31.642Z" }, + { url = "https://files.pythonhosted.org/packages/fd/52/db6e419908f45a894924d410ac77d64bdd98ff86901d833364251bd08e22/ruff-0.15.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:42a47fd785cbe8c01b9ff45031af875d101b040ad8f4de7bbb716487c74c9a77", size = 11879271, upload-time = "2026-02-19T22:32:29.305Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d8/7992b18f2008bdc9231d0f10b16df7dda964dbf639e2b8b4c1b4e91b83af/ruff-0.15.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbe9f49354866e575b4c6943856989f966421870e85cd2ac94dccb0a9dcb2fea", size = 11303707, upload-time = "2026-02-19T22:32:22.492Z" }, + { url = "https://files.pythonhosted.org/packages/d7/02/849b46184bcfdd4b64cde61752cc9a146c54759ed036edd11857e9b8443b/ruff-0.15.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7a672c82b5f9887576087d97be5ce439f04bbaf548ee987b92d3a7dede41d3a", size = 11149151, upload-time = "2026-02-19T22:32:44.234Z" }, + { url = "https://files.pythonhosted.org/packages/70/04/f5284e388bab60d1d3b99614a5a9aeb03e0f333847e2429bebd2aaa1feec/ruff-0.15.2-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:72ecc64f46f7019e2bcc3cdc05d4a7da958b629a5ab7033195e11a438403d956", size = 11091132, upload-time = "2026-02-19T22:32:24.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/ae/88d844a21110e14d92cf73d57363fab59b727ebeabe78009b9ccb23500af/ruff-0.15.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:8dcf243b15b561c655c1ef2f2b0050e5d50db37fe90115507f6ff37d865dc8b4", size = 10504717, upload-time = "2026-02-19T22:32:26.75Z" }, + { url = "https://files.pythonhosted.org/packages/64/27/867076a6ada7f2b9c8292884ab44d08fd2ba71bd2b5364d4136f3cd537e1/ruff-0.15.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dab6941c862c05739774677c6273166d2510d254dac0695c0e3f5efa1b5585de", size = 10263122, upload-time = "2026-02-19T22:32:10.036Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ef/faf9321d550f8ebf0c6373696e70d1758e20ccdc3951ad7af00c0956be7c/ruff-0.15.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1b9164f57fc36058e9a6806eb92af185b0697c9fe4c7c52caa431c6554521e5c", size = 10735295, upload-time = "2026-02-19T22:32:39.227Z" }, + { url = "https://files.pythonhosted.org/packages/2f/55/e8089fec62e050ba84d71b70e7834b97709ca9b7aba10c1a0b196e493f97/ruff-0.15.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:80d24fcae24d42659db7e335b9e1531697a7102c19185b8dc4a028b952865fd8", size = 11241641, upload-time = "2026-02-19T22:32:34.617Z" }, + { url = "https://files.pythonhosted.org/packages/23/01/1c30526460f4d23222d0fabd5888868262fd0e2b71a00570ca26483cd993/ruff-0.15.2-py3-none-win32.whl", hash = "sha256:fd5ff9e5f519a7e1bd99cbe8daa324010a74f5e2ebc97c6242c08f26f3714f6f", size = 10507885, upload-time = "2026-02-19T22:32:15.635Z" }, + { url = "https://files.pythonhosted.org/packages/5c/10/3d18e3bbdf8fc50bbb4ac3cc45970aa5a9753c5cb51bf9ed9a3cd8b79fa3/ruff-0.15.2-py3-none-win_amd64.whl", hash = "sha256:d20014e3dfa400f3ff84830dfb5755ece2de45ab62ecea4af6b7262d0fb4f7c5", size = 11623725, upload-time = "2026-02-19T22:32:04.947Z" }, + { url = "https://files.pythonhosted.org/packages/6d/78/097c0798b1dab9f8affe73da9642bb4500e098cb27fd8dc9724816ac747b/ruff-0.15.2-py3-none-win_arm64.whl", hash = "sha256:cabddc5822acdc8f7b5527b36ceac55cc51eec7b1946e60181de8fe83ca8876e", size = 10941649, upload-time = "2026-02-19T22:32:18.108Z" }, ] [[package]] @@ -3363,7 +3378,7 @@ worker = [ [package.metadata] requires-dist = [ - { name = "aiogram", specifier = "==3.24.0" }, + { name = "aiogram", specifier = "==3.25.0" }, { name = "aiosmtpd", specifier = "==1.4.6" }, { name = "celery", marker = "extra == 'worker'", specifier = "==5.6.2" }, { name = "celery-types", marker = "extra == 'linting'", specifier = "==0.24.0" }, @@ -3371,19 +3386,19 @@ requires-dist = [ { name = "channels-redis", specifier = "==4.3.0" }, { name = "click", specifier = "==8.3.1" }, { name = "colorlog", specifier = "==6.10.1" }, - { name = "coverage", specifier = "==7.13.3" }, - { name = "cryptography", specifier = "==46.0.4" }, + { name = "coverage", specifier = "==7.13.4" }, + { name = "cryptography", specifier = "==46.0.5" }, { name = "django", specifier = "==5.2.11" }, { name = "django-cacheops", specifier = "==7.2" }, { name = "django-celery-beat", marker = "extra == 'worker'", specifier = "==2.8.1" }, { name = "django-celery-results", marker = "extra == 'worker'", specifier = "==2.6.0" }, { name = "django-constance", specifier = "==4.3.4" }, { name = "django-cors-headers", specifier = "==4.9.0" }, - { name = "django-dbbackup", specifier = "==5.1.2" }, + { name = "django-dbbackup", specifier = "==5.2.0" }, { name = "django-elasticsearch-dsl", specifier = "==8.2" }, { name = "django-extensions", specifier = "==4.1" }, { name = "django-filter", specifier = "==25.2" }, - { name = "django-health-check", specifier = "==3.23.3" }, + { name = "django-health-check", specifier = "==4.0.4" }, { name = "django-import-export", extras = ["all"], specifier = "==4.4.0" }, { name = "django-json-widget", specifier = "==2.1.1" }, { name = "django-md-field", specifier = "==0.1.0" }, @@ -3395,7 +3410,7 @@ requires-dist = [ { name = "django-redis", specifier = "==6.0.0" }, { name = "django-storages", specifier = "==1.14.6" }, { name = "django-stubs", marker = "extra == 'linting'", specifier = "==5.2.9" }, - { name = "django-unfold", specifier = "==0.78.1" }, + { name = "django-unfold", specifier = "==0.80.2" }, { name = "django-widget-tweaks", specifier = "==1.5.1" }, { name = "djangoql", specifier = "==0.19.1" }, { name = "djangorestframework", specifier = "==3.16.1" }, @@ -3409,30 +3424,30 @@ requires-dist = [ { name = "drf-spectacular", specifier = "==0.29.0" }, { name = "drf-spectacular-websocket", specifier = "==1.3.1" }, { name = "elasticsearch-dsl", specifier = "==8.18.0" }, - { name = "filelock", specifier = "==3.20.3" }, + { name = "filelock", specifier = "==3.24.3" }, { name = "filetype", specifier = "==1.2.0" }, { name = "graphene-django", specifier = "==3.2.3" }, { name = "graphene-file-upload", specifier = "==1.3.0" }, { name = "httpx", specifier = "==0.28.1" }, { name = "jupyter", marker = "extra == 'jupyter'", specifier = "==1.1.1" }, - { name = "openai", marker = "extra == 'openai'", specifier = "==2.16.0" }, + { name = "openai", marker = "extra == 'openai'", specifier = "==2.21.0" }, { name = "paramiko", specifier = "==4.0.0" }, - { name = "pillow", specifier = "==12.1.0" }, + { name = "pillow", specifier = "==12.1.1" }, { name = "pip", specifier = "==26.0.1" }, { name = "polib", specifier = "==1.2.0" }, { name = "psutil", specifier = "==7.2.2" }, - { name = "psycopg", extras = ["binary"], specifier = "==3.3.2" }, + { name = "psycopg", extras = ["binary"], specifier = "==3.3.3" }, { name = "pyjwt", specifier = "==2.11.0" }, { name = "pytest", specifier = "==9.0.2" }, - { name = "pytest-django", specifier = "==4.11.1" }, + { name = "pytest-django", specifier = "==4.12.0" }, { name = "python-slugify", specifier = "==8.0.4" }, - { name = "redis", specifier = "==7.1.0" }, + { name = "redis", specifier = "==7.2.0" }, { name = "requests", specifier = "==2.32.5" }, - { name = "ruff", marker = "extra == 'linting'", specifier = "==0.15.0" }, - { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.52.0" }, + { name = "ruff", marker = "extra == 'linting'", specifier = "==0.15.2" }, + { name = "sentry-sdk", extras = ["django", "celery", "opentelemetry"], specifier = "==2.53.0" }, { name = "six", specifier = "==1.17.0" }, { name = "swapper", specifier = "==1.4.0" }, - { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.15" }, + { name = "ty", marker = "extra == 'linting'", specifier = "==0.0.18" }, { name = "types-docutils", marker = "extra == 'linting'", specifier = "==0.22.3.20251115" }, { name = "types-paramiko", marker = "extra == 'linting'", specifier = "==4.0.0.20250822" }, { name = "types-pillow", marker = "extra == 'linting'", specifier = "==10.2.0.20240822" }, @@ -3440,7 +3455,7 @@ requires-dist = [ { name = "types-redis", marker = "extra == 'linting'", specifier = "==4.6.0.20241004" }, { name = "types-requests", marker = "extra == 'linting'", specifier = "==2.32.4.20260107" }, { name = "types-six", marker = "extra == 'linting'", specifier = "==1.17.0.20251009" }, - { name = "uvicorn", specifier = "==0.40.0" }, + { name = "uvicorn", specifier = "==0.41.0" }, { name = "websockets", specifier = "==16.0" }, { name = "whitenoise", specifier = "==6.11.0" }, { name = "zeep", specifier = "==4.3.2" }, @@ -3458,15 +3473,15 @@ wheels = [ [[package]] name = "sentry-sdk" -version = "2.52.0" +version = "2.53.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/59/eb/1b497650eb564701f9a7b8a95c51b2abe9347ed2c0b290ba78f027ebe4ea/sentry_sdk-2.52.0.tar.gz", hash = "sha256:fa0bec872cfec0302970b2996825723d67390cdd5f0229fb9efed93bd5384899", size = 410273, upload-time = "2026-02-04T15:03:54.706Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/06/66c8b705179bc54087845f28fd1b72f83751b6e9a195628e2e9af9926505/sentry_sdk-2.53.0.tar.gz", hash = "sha256:6520ef2c4acd823f28efc55e43eb6ce2e6d9f954a95a3aa96b6fd14871e92b77", size = 412369, upload-time = "2026-02-16T11:11:14.743Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/63/2c6daf59d86b1c30600bff679d039f57fd1932af82c43c0bde1cbc55e8d4/sentry_sdk-2.52.0-py2.py3-none-any.whl", hash = "sha256:931c8f86169fc6f2752cb5c4e6480f0d516112e78750c312e081ababecbaf2ed", size = 435547, upload-time = "2026-02-04T15:03:51.567Z" }, + { url = "https://files.pythonhosted.org/packages/47/d4/2fdf854bc3b9c7f55219678f812600a20a138af2dd847d99004994eada8f/sentry_sdk-2.53.0-py2.py3-none-any.whl", hash = "sha256:46e1ed8d84355ae54406c924f6b290c3d61f4048625989a723fd622aab838899", size = 437908, upload-time = "2026-02-16T11:11:13.227Z" }, ] [package.optional-dependencies] @@ -3482,11 +3497,11 @@ opentelemetry = [ [[package]] name = "setuptools" -version = "80.10.2" +version = "82.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/f3/748f4d6f65d1756b9ae577f329c951cda23fb900e4de9f70900ced962085/setuptools-82.0.0.tar.gz", hash = "sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb", size = 1144893, upload-time = "2026-02-08T15:08:40.206Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173", size = 1064234, upload-time = "2026-01-25T22:38:15.216Z" }, + { url = "https://files.pythonhosted.org/packages/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl", hash = "sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0", size = 1003468, upload-time = "2026-02-08T15:08:38.723Z" }, ] [[package]] @@ -3654,26 +3669,26 @@ wheels = [ [[package]] name = "ty" -version = "0.0.15" +version = "0.0.18" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4e/25/257602d316b9333089b688a7a11b33ebc660b74e8dacf400dc3dfdea1594/ty-0.0.15.tar.gz", hash = "sha256:4f9a5b8df208c62dba56e91b93bed8b5bb714839691b8cff16d12c983bfa1174", size = 5101936, upload-time = "2026-02-05T01:06:34.922Z" } +sdist = { url = "https://files.pythonhosted.org/packages/74/15/9682700d8d60fdca7afa4febc83a2354b29cdcd56e66e19c92b521db3b39/ty-0.0.18.tar.gz", hash = "sha256:04ab7c3db5dcbcdac6ce62e48940d3a0124f377c05499d3f3e004e264ae94b83", size = 5214774, upload-time = "2026-02-20T21:51:31.173Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/c5/35626e732b79bf0e6213de9f79aff59b5f247c0a1e3ce0d93e675ab9b728/ty-0.0.15-py3-none-linux_armv6l.whl", hash = "sha256:68e092458516c61512dac541cde0a5e4e5842df00b4e81881ead8f745ddec794", size = 10138374, upload-time = "2026-02-05T01:07:03.804Z" }, - { url = "https://files.pythonhosted.org/packages/d5/8a/48fd81664604848f79d03879b3ca3633762d457a069b07e09fb1b87edd6e/ty-0.0.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:79f2e75289eae3cece94c51118b730211af4ba5762906f52a878041b67e54959", size = 9947858, upload-time = "2026-02-05T01:06:47.453Z" }, - { url = "https://files.pythonhosted.org/packages/b6/85/c1ac8e97bcd930946f4c94db85b675561d590b4e72703bf3733419fc3973/ty-0.0.15-py3-none-macosx_11_0_arm64.whl", hash = "sha256:112a7b26e63e48cc72c8c5b03227d1db280cfa57a45f2df0e264c3a016aa8c3c", size = 9443220, upload-time = "2026-02-05T01:06:44.98Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d9/244bc02599d950f7a4298fbc0c1b25cc808646b9577bdf7a83470b2d1cec/ty-0.0.15-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71f62a2644972975a657d9dc867bf901235cde51e8d24c20311067e7afd44a56", size = 9949976, upload-time = "2026-02-05T01:07:01.515Z" }, - { url = "https://files.pythonhosted.org/packages/7e/ab/3a0daad66798c91a33867a3ececf17d314ac65d4ae2bbbd28cbfde94da63/ty-0.0.15-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9e48b42be2d257317c85b78559233273b655dd636fc61e7e1d69abd90fd3cba4", size = 9965918, upload-time = "2026-02-05T01:06:54.283Z" }, - { url = "https://files.pythonhosted.org/packages/39/4e/e62b01338f653059a7c0cd09d1a326e9a9eedc351a0f0de9db0601658c3d/ty-0.0.15-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27dd5b52a421e6871c5bfe9841160331b60866ed2040250cb161886478ab3e4f", size = 10424943, upload-time = "2026-02-05T01:07:08.777Z" }, - { url = "https://files.pythonhosted.org/packages/65/b5/7aa06655ce69c0d4f3e845d2d85e79c12994b6d84c71699cfb437e0bc8cf/ty-0.0.15-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76b85c9ec2219e11c358a7db8e21b7e5c6674a1fb9b6f633836949de98d12286", size = 10964692, upload-time = "2026-02-05T01:06:37.103Z" }, - { url = "https://files.pythonhosted.org/packages/13/04/36fdfe1f3c908b471e246e37ce3d011175584c26d3853e6c5d9a0364564c/ty-0.0.15-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e8204c61d8ede4f21f2975dce74efdb80fafb2fae1915c666cceb33ea3c90b", size = 10692225, upload-time = "2026-02-05T01:06:49.714Z" }, - { url = "https://files.pythonhosted.org/packages/13/41/5bf882649bd8b64ded5fbce7fb8d77fb3b868de1a3b1a6c4796402b47308/ty-0.0.15-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af87c3be7c944bb4d6609d6c63e4594944b0028c7bd490a525a82b88fe010d6d", size = 10516776, upload-time = "2026-02-05T01:06:52.047Z" }, - { url = "https://files.pythonhosted.org/packages/56/75/66852d7e004f859839c17ffe1d16513c1e7cc04bcc810edb80ca022a9124/ty-0.0.15-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:50dccf7398505e5966847d366c9e4c650b8c225411c2a68c32040a63b9521eea", size = 9928828, upload-time = "2026-02-05T01:06:56.647Z" }, - { url = "https://files.pythonhosted.org/packages/65/72/96bc16c7b337a3ef358fd227b3c8ef0c77405f3bfbbfb59ee5915f0d9d71/ty-0.0.15-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:bd797b8f231a4f4715110259ad1ad5340a87b802307f3e06d92bfb37b858a8f3", size = 9978960, upload-time = "2026-02-05T01:06:29.567Z" }, - { url = "https://files.pythonhosted.org/packages/a0/18/d2e316a35b626de2227f832cd36d21205e4f5d96fd036a8af84c72ecec1b/ty-0.0.15-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9deb7f20e18b25440a9aa4884f934ba5628ef456dbde91819d5af1a73da48af3", size = 10135903, upload-time = "2026-02-05T01:06:59.256Z" }, - { url = "https://files.pythonhosted.org/packages/02/d3/b617a79c9dad10c888d7c15cd78859e0160b8772273637b9c4241a049491/ty-0.0.15-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7b31b3de031255b90a5f4d9cb3d050feae246067c87130e5a6861a8061c71754", size = 10615879, upload-time = "2026-02-05T01:07:06.661Z" }, - { url = "https://files.pythonhosted.org/packages/fb/b0/2652a73c71c77296a6343217063f05745da60c67b7e8a8e25f2064167fce/ty-0.0.15-py3-none-win32.whl", hash = "sha256:9362c528ceb62c89d65c216336d28d500bc9f4c10418413f63ebc16886e16cc1", size = 9578058, upload-time = "2026-02-05T01:06:42.928Z" }, - { url = "https://files.pythonhosted.org/packages/84/6e/08a4aedebd2a6ce2784b5bc3760e43d1861f1a184734a78215c2d397c1df/ty-0.0.15-py3-none-win_amd64.whl", hash = "sha256:4db040695ae67c5524f59cb8179a8fa277112e69042d7dfdac862caa7e3b0d9c", size = 10457112, upload-time = "2026-02-05T01:06:39.885Z" }, - { url = "https://files.pythonhosted.org/packages/b3/be/1991f2bc12847ae2d4f1e3ac5dcff8bb7bc1261390645c0755bb55616355/ty-0.0.15-py3-none-win_arm64.whl", hash = "sha256:e5a98d4119e77d6136461e16ae505f8f8069002874ab073de03fbcb1a5e8bf25", size = 9937490, upload-time = "2026-02-05T01:06:32.388Z" }, + { url = "https://files.pythonhosted.org/packages/ae/d8/920460d4c22ea68fcdeb0b2fb53ea2aeb9c6d7875bde9278d84f2ac767b6/ty-0.0.18-py3-none-linux_armv6l.whl", hash = "sha256:4e5e91b0a79857316ef893c5068afc4b9872f9d257627d9bc8ac4d2715750d88", size = 10280825, upload-time = "2026-02-20T21:51:25.03Z" }, + { url = "https://files.pythonhosted.org/packages/83/56/62587de582d3d20d78fcdddd0594a73822ac5a399a12ef512085eb7a4de6/ty-0.0.18-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ee0e578b3f8416e2d5416da9553b78fd33857868aa1384cb7fefeceee5ff102d", size = 10118324, upload-time = "2026-02-20T21:51:22.27Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2d/dbdace8d432a0755a7417f659bfd5b8a4261938ecbdfd7b42f4c454f5aa9/ty-0.0.18-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3f7a0487d36b939546a91d141f7fc3dbea32fab4982f618d5b04dc9d5b6da21e", size = 9605861, upload-time = "2026-02-20T21:51:16.066Z" }, + { url = "https://files.pythonhosted.org/packages/6b/d9/de11c0280f778d5fc571393aada7fe9b8bc1dd6a738f2e2c45702b8b3150/ty-0.0.18-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5e2fa8d45f57ca487a470e4bf66319c09b561150e98ae2a6b1a97ef04c1a4eb", size = 10092701, upload-time = "2026-02-20T21:51:26.862Z" }, + { url = "https://files.pythonhosted.org/packages/0f/94/068d4d591d791041732171e7b63c37a54494b2e7d28e88d2167eaa9ad875/ty-0.0.18-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d75652e9e937f7044b1aca16091193e7ef11dac1c7ec952b7fb8292b7ba1f5f2", size = 10109203, upload-time = "2026-02-20T21:51:11.59Z" }, + { url = "https://files.pythonhosted.org/packages/34/e4/526a4aa56dc0ca2569aaa16880a1ab105c3b416dd70e87e25a05688999f3/ty-0.0.18-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:563c868edceb8f6ddd5e91113c17d3676b028f0ed380bdb3829b06d9beb90e58", size = 10614200, upload-time = "2026-02-20T21:51:20.298Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/b68ab20a34122a395880922587fbfc3adf090d22e0fb546d4d20fe8c2621/ty-0.0.18-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502e2a1f948bec563a0454fc25b074bf5cf041744adba8794d024277e151d3b0", size = 11153232, upload-time = "2026-02-20T21:51:14.121Z" }, + { url = "https://files.pythonhosted.org/packages/68/ea/678243c042343fcda7e6af36036c18676c355878dcdcd517639586d2cf9e/ty-0.0.18-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc881dea97021a3aa29134a476937fd8054775c4177d01b94db27fcfb7aab65b", size = 10832934, upload-time = "2026-02-20T21:51:32.92Z" }, + { url = "https://files.pythonhosted.org/packages/d8/bd/7f8d647cef8b7b346c0163230a37e903c7461c7248574840b977045c77df/ty-0.0.18-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:421fcc3bc64cab56f48edb863c7c1c43649ec4d78ff71a1acb5366ad723b6021", size = 10700888, upload-time = "2026-02-20T21:51:09.673Z" }, + { url = "https://files.pythonhosted.org/packages/6e/06/cb3620dc48c5d335ba7876edfef636b2f4498eff4a262ff90033b9e88408/ty-0.0.18-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0fe5038a7136a0e638a2fb1ad06e3d3c4045314c6ba165c9c303b9aeb4623d6c", size = 10078965, upload-time = "2026-02-20T21:51:07.678Z" }, + { url = "https://files.pythonhosted.org/packages/60/27/c77a5a84533fa3b685d592de7b4b108eb1f38851c40fac4e79cc56ec7350/ty-0.0.18-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d123600a52372677613a719bbb780adeb9b68f47fb5f25acb09171de390e0035", size = 10134659, upload-time = "2026-02-20T21:51:18.311Z" }, + { url = "https://files.pythonhosted.org/packages/43/6e/60af6b88c73469e628ba5253a296da6984e0aa746206f3034c31f1a04ed1/ty-0.0.18-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb4bc11d32a1bf96a829bf6b9696545a30a196ac77bbc07cc8d3dfee35e03723", size = 10297494, upload-time = "2026-02-20T21:51:39.631Z" }, + { url = "https://files.pythonhosted.org/packages/33/90/612dc0b68224c723faed6adac2bd3f930a750685db76dfe17e6b9e534a83/ty-0.0.18-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:dda2efbf374ba4cd704053d04e32f2f784e85c2ddc2400006b0f96f5f7e4b667", size = 10791944, upload-time = "2026-02-20T21:51:37.13Z" }, + { url = "https://files.pythonhosted.org/packages/0d/da/f4ada0fd08a9e4138fe3fd2bcd3797753593f423f19b1634a814b9b2a401/ty-0.0.18-py3-none-win32.whl", hash = "sha256:c5768607c94977dacddc2f459ace6a11a408a0f57888dd59abb62d28d4fee4f7", size = 9677964, upload-time = "2026-02-20T21:51:42.039Z" }, + { url = "https://files.pythonhosted.org/packages/5e/fa/090ed9746e5c59fc26d8f5f96dc8441825171f1f47752f1778dad690b08b/ty-0.0.18-py3-none-win_amd64.whl", hash = "sha256:b78d0fa1103d36fc2fce92f2092adace52a74654ab7884d54cdaec8eb5016a4d", size = 10636576, upload-time = "2026-02-20T21:51:29.159Z" }, + { url = "https://files.pythonhosted.org/packages/92/4f/5dd60904c8105cda4d0be34d3a446c180933c76b84ae0742e58f02133713/ty-0.0.18-py3-none-win_arm64.whl", hash = "sha256:01770c3c82137c6b216aa3251478f0b197e181054ee92243772de553d3586398", size = 10095449, upload-time = "2026-02-20T21:51:34.914Z" }, ] [[package]] @@ -3776,11 +3791,11 @@ wheels = [ [[package]] name = "types-setuptools" -version = "80.10.0.20260124" +version = "82.0.0.20260210" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/7e/116539b9610585e34771611e33c88a4c706491fa3565500f5a63139f8731/types_setuptools-80.10.0.20260124.tar.gz", hash = "sha256:1b86d9f0368858663276a0cbe5fe5a9722caf94b5acde8aba0399a6e90680f20", size = 43299, upload-time = "2026-01-24T03:18:39.527Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/90/796ac8c774a7f535084aacbaa6b7053d16fff5c630eff87c3ecff7896c37/types_setuptools-82.0.0.20260210.tar.gz", hash = "sha256:d9719fbbeb185254480ade1f25327c4654f8c00efda3fec36823379cebcdee58", size = 44768, upload-time = "2026-02-10T04:22:02.107Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2b/7f/016dc5cc718ec6ccaa84fb73ed409ef1c261793fd5e637cdfaa18beb40a9/types_setuptools-80.10.0.20260124-py3-none-any.whl", hash = "sha256:efed7e044f01adb9c2806c7a8e1b6aa3656b8e382379b53d5f26ee3db24d4c01", size = 64333, upload-time = "2026-01-24T03:18:38.344Z" }, + { url = "https://files.pythonhosted.org/packages/3e/54/3489432b1d9bc713c9d8aa810296b8f5b0088403662959fb63a8acdbd4fc/types_setuptools-82.0.0.20260210-py3-none-any.whl", hash = "sha256:5124a7daf67f195c6054e0f00f1d97c69caad12fdcf9113eba33eff0bce8cd2b", size = 68433, upload-time = "2026-02-10T04:22:00.876Z" }, ] [[package]] @@ -3863,15 +3878,15 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.40.0" +version = "0.41.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c3/d1/8f3c683c9561a4e6689dd3b1d345c815f10f86acd044ee1fb9a4dcd0b8c5/uvicorn-0.40.0.tar.gz", hash = "sha256:839676675e87e73694518b5574fd0f24c9d97b46bea16df7b8c05ea1a51071ea", size = 81761, upload-time = "2025-12-21T14:16:22.45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/32/ce/eeb58ae4ac36fe09e3842eb02e0eb676bf2c53ae062b98f1b2531673efdd/uvicorn-0.41.0.tar.gz", hash = "sha256:09d11cf7008da33113824ee5a1c6422d89fbc2ff476540d69a34c87fab8b571a", size = 82633, upload-time = "2026-02-16T23:07:24.1Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/d8/2083a1daa7439a66f3a48589a57d576aa117726762618f6bb09fe3798796/uvicorn-0.40.0-py3-none-any.whl", hash = "sha256:c6c8f55bc8bf13eb6fa9ff87ad62308bbbc33d0b67f84293151efe87e0d5f2ee", size = 68502, upload-time = "2025-12-21T14:16:21.041Z" }, + { url = "https://files.pythonhosted.org/packages/83/e4/d04a086285c20886c0daad0e026f250869201013d18f81d9ff5eada73a88/uvicorn-0.41.0-py3-none-any.whl", hash = "sha256:29e35b1d2c36a04b9e180d4007ede3bcb32a85fbdfd6c6aeb3f26839de088187", size = 68783, upload-time = "2026-02-16T23:07:22.357Z" }, ] [[package]] @@ -3885,11 +3900,11 @@ wheels = [ [[package]] name = "wcwidth" -version = "0.5.3" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c2/62/a7c072fbfefb2980a00f99ca994279cb9ecf310cb2e6b2a4d2a28fe192b3/wcwidth-0.5.3.tar.gz", hash = "sha256:53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091", size = 157587, upload-time = "2026-01-31T03:52:10.92Z" } +sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684, upload-time = "2026-02-06T19:19:40.919Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/c1/d73f12f8cdb1891334a2ccf7389eed244d3941e74d80dd220badb937f3fb/wcwidth-0.5.3-py3-none-any.whl", hash = "sha256:d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e", size = 92981, upload-time = "2026-01-31T03:52:09.14Z" }, + { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189, upload-time = "2026-02-06T19:19:39.646Z" }, ] [[package]] From f8f051f4e907d9908eb7d81c0e24c085a94a7826 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Sat, 21 Feb 2026 19:52:28 +0300 Subject: [PATCH 17/30] feat(admin-docs): add base structure and templates for admin documentation Introduce templates for admin documentation, including model details, views, template tags, filters, and bookmarklets. This enhances the admin interface by providing detailed documentation directly within the application. --- .../templates/admin_doc/bookmarklets.html | 34 +++++++ engine/core/templates/admin_doc/index.html | 58 ++++++++++++ .../templates/admin_doc/missing_docutils.html | 25 +++++ .../templates/admin_doc/model_detail.html | 91 +++++++++++++++++++ .../core/templates/admin_doc/model_index.html | 55 +++++++++++ .../templates/admin_doc/template_detail.html | 42 +++++++++ .../admin_doc/template_filter_index.html | 63 +++++++++++++ .../admin_doc/template_tag_index.html | 63 +++++++++++++ .../core/templates/admin_doc/view_detail.html | 43 +++++++++ .../core/templates/admin_doc/view_index.html | 66 ++++++++++++++ .../unfold/helpers/fieldsets_tabs.html | 35 +++++++ 11 files changed, 575 insertions(+) create mode 100644 engine/core/templates/admin_doc/bookmarklets.html create mode 100644 engine/core/templates/admin_doc/index.html create mode 100644 engine/core/templates/admin_doc/missing_docutils.html create mode 100644 engine/core/templates/admin_doc/model_detail.html create mode 100644 engine/core/templates/admin_doc/model_index.html create mode 100644 engine/core/templates/admin_doc/template_detail.html create mode 100644 engine/core/templates/admin_doc/template_filter_index.html create mode 100644 engine/core/templates/admin_doc/template_tag_index.html create mode 100644 engine/core/templates/admin_doc/view_detail.html create mode 100644 engine/core/templates/admin_doc/view_index.html create mode 100644 engine/core/templates/unfold/helpers/fieldsets_tabs.html diff --git a/engine/core/templates/admin_doc/bookmarklets.html b/engine/core/templates/admin_doc/bookmarklets.html new file mode 100644 index 00000000..33d3822c --- /dev/null +++ b/engine/core/templates/admin_doc/bookmarklets.html @@ -0,0 +1,34 @@ +{% extends "admin/base_site.html" %} +{% load i18n %} + +{% block title %}{% translate "Documentation bookmarklets" %}{% endblock %} + +{% block breadcrumbs %} +