From 046fdcba264258974c0592fb2ebe8158bd9422e4 Mon Sep 17 00:00:00 2001 From: Val Date: Fri, 27 Feb 2026 11:12:11 +0100 Subject: [PATCH 01/27] first poc --- lightbug_http/__init__.mojo | 2 +- lightbug_http/cookie/cookie.mojo | 46 +- lightbug_http/cookie/response_cookie_jar.mojo | 18 +- lightbug_http/http/__init__.mojo | 1 + lightbug_http/http/json.mojo | 82 + lightbug_http/service.mojo | 4 +- pixi.lock | 1708 +++++++++-------- pixi.toml | 22 +- test.mojo | 20 + tests/lightbug_http/http/test_json.mojo | 49 + 10 files changed, 1086 insertions(+), 866 deletions(-) create mode 100644 lightbug_http/http/json.mojo create mode 100644 test.mojo create mode 100644 tests/lightbug_http/http/test_json.mojo diff --git a/lightbug_http/__init__.mojo b/lightbug_http/__init__.mojo index 65fed45f..d7fee55e 100644 --- a/lightbug_http/__init__.mojo +++ b/lightbug_http/__init__.mojo @@ -4,4 +4,4 @@ from lightbug_http.service import Counter, HTTPService, Welcome from lightbug_http.uri import URI from lightbug_http.cookie import Cookie, RequestCookieJar, ResponseCookieJar -from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, SeeOther, StatusCode +from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, SeeOther, StatusCode, JsonOK, json_decode, JsonError, JsonSerializable, JsonDeserializable diff --git a/lightbug_http/cookie/cookie.mojo b/lightbug_http/cookie/cookie.mojo index dbc38378..c70d7794 100644 --- a/lightbug_http/cookie/cookie.mojo +++ b/lightbug_http/cookie/cookie.mojo @@ -100,29 +100,29 @@ struct Cookie(Copyable): fn __str__(self) -> String: return String.write("Name: ", self.name, " Value: ", self.value) - fn __copyinit__(out self: Cookie, existing: Cookie): - self.name = existing.name - self.value = existing.value - self.max_age = existing.max_age - self.expires = existing.expires.copy() - self.domain = existing.domain - self.path = existing.path - self.secure = existing.secure - self.http_only = existing.http_only - self.same_site = existing.same_site - self.partitioned = existing.partitioned - - fn __moveinit__(out self: Cookie, deinit existing: Cookie): - self.name = existing.name^ - self.value = existing.value^ - self.max_age = existing.max_age^ - self.expires = existing.expires.copy() - self.domain = existing.domain^ - self.path = existing.path^ - self.secure = existing.secure - self.http_only = existing.http_only - self.same_site = existing.same_site^ - self.partitioned = existing.partitioned + fn __copyinit__(out self: Cookie, copy: Cookie): + self.name = copy.name + self.value = copy.value + self.max_age = copy.max_age + self.expires = copy.expires.copy() + self.domain = copy.domain + self.path = copy.path + self.secure = copy.secure + self.http_only = copy.http_only + self.same_site = copy.same_site + self.partitioned = copy.partitioned + + fn __moveinit__(out self: Cookie, deinit take: Cookie): + self.name = take.name + self.value = take.value + self.max_age = take.max_age + self.expires = take.expires.copy() + self.domain = take.domain + self.path = take.path + self.secure = take.secure + self.http_only = take.http_only + self.same_site = take.same_site + self.partitioned = take.partitioned fn clear_cookie(mut self): self.max_age = Optional[Duration](None) diff --git a/lightbug_http/cookie/response_cookie_jar.mojo b/lightbug_http/cookie/response_cookie_jar.mojo index cf17cba1..1e184274 100644 --- a/lightbug_http/cookie/response_cookie_jar.mojo +++ b/lightbug_http/cookie/response_cookie_jar.mojo @@ -42,15 +42,15 @@ struct ResponseCookieKey(ImplicitlyCopyable, KeyElement): fn __eq__(self: Self, other: Self) -> Bool: return self.name == other.name and self.domain == other.domain and self.path == other.path - fn __moveinit__(out self: Self, deinit existing: Self): - self.name = existing.name - self.domain = existing.domain - self.path = existing.path - - fn __copyinit__(out self: Self, existing: Self): - self.name = existing.name - self.domain = existing.domain - self.path = existing.path + fn __moveinit__(out self: ResponseCookieKey, deinit take: ResponseCookieKey): + self.name = take.name + self.domain = take.domain + self.path = take.path + + fn __copyinit__(out self: ResponseCookieKey, copy: ResponseCookieKey): + self.name = copy.name + self.domain = copy.domain + self.path = copy.path fn __hash__[H: Hasher](self: Self, mut hasher: H): hasher.update(self.name + "~" + self.domain + "~" + self.path) diff --git a/lightbug_http/http/__init__.mojo b/lightbug_http/http/__init__.mojo index 8ddd77fd..d21df412 100644 --- a/lightbug_http/http/__init__.mojo +++ b/lightbug_http/http/__init__.mojo @@ -1,4 +1,5 @@ from .common_response import * +from .json import * from .request import * from .response import * diff --git a/lightbug_http/http/json.mojo b/lightbug_http/http/json.mojo new file mode 100644 index 00000000..7476072f --- /dev/null +++ b/lightbug_http/http/json.mojo @@ -0,0 +1,82 @@ +from emberjson import ( + parse, + to_string, + serialize, + deserialize, + try_deserialize, + JSON, + JsonSerializable, + JsonDeserializable, +) +from lightbug_http.header import Header, HeaderKey, Headers +from lightbug_http.http.common_response import OK +from lightbug_http.http.response import HTTPResponse +from lightbug_http.http.request import HTTPRequest + + +fn JsonOK(body: String) -> HTTPResponse: + """Return a 200 OK response with JSON content type. + + Args: + body: A pre-serialized JSON string. + """ + return OK(body, "application/json") + + +fn JsonOK[T: JsonSerializable](value: T) -> HTTPResponse: + """Return a 200 OK response, serializing the value to JSON. + + Parameters: + T: A type that implements JsonSerializable. + + Args: + value: The value to serialize to JSON. + """ + return OK(serialize(value), "application/json") + + +fn json_decode(req: HTTPRequest) raises -> JSON: + """Parse the request body as untyped JSON. + + Args: + req: The HTTP request to extract JSON from. + + Returns: + A parsed JSON value. + + Raises: + An error if the body is not valid JSON. + """ + return parse(req.get_body()) + + +fn json_decode[T: JsonDeserializable](req: HTTPRequest) raises -> T: + """Deserialize the request body into a typed struct. + + Parameters: + T: A type that implements JsonDeserializable (must also be Defaultable). + + Args: + req: The HTTP request to deserialize JSON from. + + Returns: + The deserialized value. + + Raises: + An error if the body is not valid JSON or doesn't match the expected schema. + """ + return deserialize[T](String(req.get_body())) + + +fn JsonError(message: String) -> HTTPResponse: + """Return a 400 Bad Request response with a JSON error body. + + Args: + message: The error message to include. + """ + return HTTPResponse( + String('{"error": "', message, '"}').as_bytes(), + headers=Headers(Header(HeaderKey.CONTENT_TYPE, "application/json")), + status_code=400, + status_text="Bad Request", + ) diff --git a/lightbug_http/service.mojo b/lightbug_http/service.mojo index c3a2bb4a..3ec244fd 100644 --- a/lightbug_http/service.mojo +++ b/lightbug_http/service.mojo @@ -1,7 +1,7 @@ from lightbug_http.header import HeaderKey from lightbug_http.io.bytes import Bytes -from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound +from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, JsonOK trait HTTPService: @@ -58,7 +58,7 @@ struct TechEmpowerRouter(HTTPService): if req.uri.path == "/plaintext": return OK("Hello, World!", "text/plain") elif req.uri.path == "/json": - return OK('{"message": "Hello, World!"}', "application/json") + return JsonOK('{"message": "Hello, World!"}') return OK("Hello world!") # text/plain is the default diff --git a/pixi.lock b/pixi.lock index 15bc6f08..d2fc9c3a 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,57 +3,60 @@ environments: bench: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ - - url: https://repo.prefix.dev/mojo-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda @@ -62,52 +65,55 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ./small-time + build: hb0f4dca_0 linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda @@ -116,44 +122,47 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ./small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda @@ -161,60 +170,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ./small-time + build: h60d57d3_0 default: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ - - url: https://repo.prefix.dev/mojo-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda @@ -223,52 +237,55 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ./small-time + build: hb0f4dca_0 linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda @@ -277,44 +294,47 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ./small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda @@ -322,48 +342,54 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ./small-time + build: h60d57d3_0 integration-tests: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ - - url: https://repo.prefix.dev/mojo-community/ indexes: - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.4-py313heb322e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.20-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -383,18 +409,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.3-h6548e54_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda @@ -402,30 +428,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.1-py313hf6604e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -433,32 +459,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.17.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -467,57 +492,59 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.40.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.40.0-h4cd5af1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ./small-time + build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.4-py313h2e85185_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.20-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -537,18 +564,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.3-hf53f6bf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda @@ -556,30 +583,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.1-py313h11e5ff7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -587,32 +614,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.17.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda @@ -621,24 +647,24 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.40.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.40.0-h4cd5af1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ./small-time + build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -648,28 +674,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.20-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -689,13 +717,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda @@ -704,25 +732,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.8-h4a912ad_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.1-py313h16eae64_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -730,31 +758,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h7d74516_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.17.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -763,18 +790,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.40.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.40.0-h4cd5af1_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda @@ -782,61 +807,66 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: ./small-time + build: h60d57d3_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl unit-tests: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ - - url: https://repo.prefix.dev/mojo-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda @@ -845,52 +875,55 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ./small-time + build: hb0f4dca_0 linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda @@ -899,44 +932,47 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ./small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda @@ -944,21 +980,27 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ./small-time + build: h60d57d3_0 util: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ - - url: https://repo.prefix.dev/mojo-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit packages: linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -966,39 +1008,38 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda @@ -1007,13 +1048,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ./small-time + build: hb0f4dca_0 linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1021,39 +1066,38 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda @@ -1062,45 +1106,48 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ./small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda @@ -1108,41 +1155,36 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ./small-time + build: h60d57d3_0 packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 - md5: d7c89558ba9fa0495403155b64376d81 - license: None - purls: [] - size: 2562 - timestamp: 1578324546067 -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 - md5: 73aaf86a425cc6e73fcf236a5a46396d - depends: - - _libgcc_mutex 0.1 conda_forge +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 - libgomp >=7.5.0 constrains: - - openmp_impl 9999 + - openmp_impl <0.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 23621 - timestamp: 1650670423406 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - build_number: 16 - sha256: 3702bef2f0a4d38bd8288bbe54aace623602a1343c2cfbefd3fa188e015bebf0 - md5: 6168d71addc746e8f2b8d57dfd2edcea + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 + md5: 468fd3bb9e1f671d36c2cbc677e56f1d depends: - libgomp >=7.5.0 constrains: - - openmp_impl 9999 + - openmp_impl <0.0a0 license: BSD-3-Clause license_family: BSD purls: [] - size: 23712 - timestamp: 1650670790230 + size: 28926 + timestamp: 1770939656741 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda build_number: 7 sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd @@ -1315,46 +1357,46 @@ packages: - pkg:pypi/brotli?source=hash-mapping size: 359568 timestamp: 1764018359470 -- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda - sha256: c30daba32ddebbb7ded490f0e371eae90f51e72db620554089103b4a6934b0d5 - md5: 51a19bba1b8ebfb60df25cde030b7ebc +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 260341 - timestamp: 1757437258798 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda - sha256: d2a296aa0b5f38ed9c264def6cf775c0ccb0f110ae156fcde322f3eccebf2e01 - md5: 2921ac0b541bf37c69e66bd6d9a43bca + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c + md5: 840d8fc0d7b3209be93080bc20e07f2d depends: - libgcc >=14 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 192536 - timestamp: 1757437302703 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_8.conda - sha256: b456200636bd5fecb2bec63f7e0985ad2097cf1b83d60ce0b6968dffa6d02aa1 - md5: 58fd217444c2a5701a44244faf518206 + size: 192412 + timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 depends: - __osx >=11.0 license: bzip2-1.0.6 license_family: BSD purls: [] - size: 125061 - timestamp: 1757437486465 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda - sha256: b5974ec9b50e3c514a382335efa81ed02b05906849827a34061c496f4defa0b2 - md5: bddacf101bb4dd0e51811cb69c7790e2 + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d depends: - __unix license: ISC purls: [] - size: 146519 - timestamp: 1767500828366 + size: 147413 + timestamp: 1772006283803 - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda sha256: ec791bb6f1ef504411f87b28946a7ae63ed1f3681cefc462cf1dfdaf0790b6a9 md5: 241ef6e3db47a143ac34c21bfba510f1 @@ -1380,16 +1422,16 @@ packages: purls: [] size: 7203 timestamp: 1746103018780 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda - sha256: 110338066d194a715947808611b763857c15458f8b3b97197387356844af9450 - md5: eacc711330cd46939f66cd401ff9c44b +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 depends: - python >=3.10 license: ISC purls: - pkg:pypi/certifi?source=compressed-mapping - size: 150969 - timestamp: 1767500900768 + size: 151445 + timestamp: 1772001170301 - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda sha256: 2162a91819945c826c6ef5efe379e88b1df0fe9a387eeba23ddcf7ebeacd5bd6 md5: d0616e7935acab407d1543b28c446f6f @@ -1485,17 +1527,17 @@ packages: - pkg:pypi/colorama?source=hash-mapping size: 27011 timestamp: 1733218222191 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.11-py313hd8ed1ab_101.conda +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda noarch: generic - sha256: f851800da77f360e39235383d685b6e3be4edf28fe233f3bcf09c45293f39ae1 - md5: c74a6b9e8694e5122949f611d1552df5 + sha256: 7636809bda35add7af66cda1fee156136fcba0a1e24bbef1d591ee859df755a8 + md5: 9a4b8a37303b933b847c14a310f0557b depends: - python >=3.13,<3.14.0a0 - python_abi * *_cp313 license: Python-2.0 purls: [] - size: 48249 - timestamp: 1769471321757 + size: 48648 + timestamp: 1770270374831 - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda sha256: af1622b15f8c7411d9c14b8adf970cec16fec8a28b98069fdf42b1cd2259ccc9 md5: e036e2f76d9c9aebc12510ed23352b6c @@ -1507,9 +1549,9 @@ packages: - pkg:pypi/crashtest?source=hash-mapping size: 11619 timestamp: 1733564888371 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.4-py313heb322e3_0.conda - sha256: f92d767380fa956d1d0e5d3e454463fb104cd85e1315c626948ba3f4c0dc8c40 - md5: 8831066b7226ee1c5c75e8d0832517e6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda + sha256: 553f4ee18ad755d690ad63fa8e00d89598ecc4945ec046a8af808ddee5bb1ca0 + md5: 964f25e322b16cae073da8f5b7adf123 depends: - __glibc >=2.17,<3.0.a0 - cffi >=1.14 @@ -1522,12 +1564,12 @@ packages: license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT license_family: BSD purls: - - pkg:pypi/cryptography?source=hash-mapping - size: 1718294 - timestamp: 1769650497266 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.4-py313h2e85185_0.conda - sha256: 3eb24431c0d1d6a368481d61352a156601967e8d283f074abc0a6ccf0e04317f - md5: 227e5e1ede4a2856e99dd0c25b4ac926 + - pkg:pypi/cryptography?source=compressed-mapping + size: 1718868 + timestamp: 1770772833949 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda + sha256: f799fc4ceb2b20bce5b7bbe4038c4fc273fb49d8ccc5d4bd7d34b434fd790ed0 + md5: 9f017a0f98d0efb83e04a5ce9f01598e depends: - cffi >=1.14 - libgcc >=14 @@ -1541,8 +1583,8 @@ packages: license_family: BSD purls: - pkg:pypi/cryptography?source=hash-mapping - size: 1709772 - timestamp: 1769650456870 + size: 1710168 + timestamp: 1770772502541 - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 md5: ce96f2f470d39bd96ce03945af92e280 @@ -1668,6 +1710,36 @@ packages: purls: [] size: 7077 timestamp: 1756221480651 +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: h60d57d3_0 + subdir: osx-arm64 + variants: + target_platform: osx-arm64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: hb0f4dca_0 + subdir: linux-64 + variants: + target_platform: linux-64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: he8cfe8b_0 + subdir: linux-aarch64 + variants: + target_platform: linux-aarch64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 md5: 8e662bd460bda79b1ea39194e3c4c9ab @@ -1676,7 +1748,7 @@ packages: - typing_extensions >=4.6.0 license: MIT and PSF-2.0 purls: - - pkg:pypi/exceptiongroup?source=compressed-mapping + - pkg:pypi/exceptiongroup?source=hash-mapping size: 21333 timestamp: 1763918099466 - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda @@ -1697,9 +1769,9 @@ packages: purls: [] size: 4807 timestamp: 1766768870506 -- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.20-pyhcf101f3_0.conda - sha256: 284cae62b2061a9f423b468f720deeff98783eccff6bf3b32965afb21a53e349 - md5: e2b464522fa49c5948c4da6c8d8ea9b3 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda + sha256: cb60fc8c96dcd2a6335914d4d6d7d5f5549c9e1ff4533be28ba699e648babf37 + md5: 442ec6511754418c87a84bc1dc0c5384 depends: - python >=3.10 - rich-toolkit >=0.14.8 @@ -1710,9 +1782,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/fastapi-cli?source=compressed-mapping - size: 18993 - timestamp: 1766435117562 + - pkg:pypi/fastapi-cli?source=hash-mapping + size: 18920 + timestamp: 1771293215825 - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda sha256: f9059587f6161f0cbd62c600f17d9164aa1e6062fda2f7a68f010dbf257b7c56 md5: 8d9e16861f5a037242d78e194c8d0b57 @@ -1738,16 +1810,16 @@ packages: - pkg:pypi/fastapi?source=hash-mapping size: 89283 timestamp: 1766768870504 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.20.3-pyhd8ed1ab_0.conda - sha256: 8b90dc21f00167a7e58abb5141a140bdb31a7c5734fe1361b5f98f4a4183fd32 - md5: 2cfaaccf085c133a477f0a7a8657afe9 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + sha256: 6d576ed3bd0e7c57b1144f0b2014de9ea3fab9786316bc3e748105d44e0140a0 + md5: 9dbb20eec24beb026291c20a35ce1ff9 depends: - python >=3.10 license: Unlicense purls: - - pkg:pypi/filelock?source=hash-mapping - size: 18661 - timestamp: 1768022315929 + - pkg:pypi/filelock?source=compressed-mapping + size: 24808 + timestamp: 1771468713029 - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb md5: b8993c19b0c32a2f7b66cbb58ca27069 @@ -1758,7 +1830,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/h11?source=hash-mapping + - pkg:pypi/h11?source=compressed-mapping size: 39069 timestamp: 1767729720872 - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda @@ -2121,31 +2193,31 @@ packages: purls: [] size: 1155530 timestamp: 1719463474401 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45-default_hbd61a6d_105.conda - sha256: 1027bd8aa0d5144e954e426ab6218fd5c14e54a98f571985675468b339c808ca - md5: 3ec0aa5037d39b06554109a01e6fb0c6 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 + md5: 12bd9a3f089ee6c9266a37dab82afabd depends: - __glibc >=2.17,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 constrains: - - binutils_impl_linux-64 2.45 + - binutils_impl_linux-64 2.45.1 license: GPL-3.0-only license_family: GPL purls: [] - size: 730831 - timestamp: 1766513089214 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_105.conda - sha256: 12e7341b89e9ea319a3b4de03d02cd988fa02b8a678f4e46779515009b5e475c - md5: 849c4cbbf8dd1d71e66c13afed1d2f12 + size: 725507 + timestamp: 1770267139900 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 + md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 depends: - zstd >=1.5.7,<1.6.0a0 constrains: - - binutils_impl_linux-aarch64 2.45 + - binutils_impl_linux-aarch64 2.45.1 license: GPL-3.0-only license_family: GPL purls: [] - size: 876257 - timestamp: 1766513180236 + size: 875924 + timestamp: 1770267209884 - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda build_number: 5 sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c @@ -2245,16 +2317,16 @@ packages: purls: [] size: 18548 timestamp: 1765819108956 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-21.1.8-hf598326_1.conda - sha256: 3a924cbce92b0dceb5d392036e692bac1e60ae90d85c7c78264c672a205c007b - md5: cd7367d0c0f49853f8f3560bfb4456ab +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb + md5: e9c56daea841013e7774b5cd46f41564 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 570705 - timestamp: 1769754656112 + size: 568910 + timestamp: 1772001095642 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -2292,43 +2364,43 @@ packages: purls: [] size: 107691 timestamp: 1738479560845 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda - sha256: 1e1b08f6211629cbc2efe7a5bca5953f8f6b3cae0eeb04ca4dacee1bd4e2db2f - md5: 8b09ae86839581147ef2e5c5e229d164 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 + md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - expat 2.7.3.* + - expat 2.7.4.* license: MIT license_family: MIT purls: [] - size: 76643 - timestamp: 1763549731408 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - sha256: cc2581a78315418cc2e0bb2a273d37363203e79cefe78ba6d282fed546262239 - md5: b414e36fbb7ca122030276c75fa9c34a + size: 76798 + timestamp: 1771259418166 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 + md5: 57f3b3da02a50a1be2a6fe847515417d depends: - libgcc >=14 constrains: - - expat 2.7.3.* + - expat 2.7.4.* license: MIT license_family: MIT purls: [] - size: 76201 - timestamp: 1763549910086 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.3-haf25636_0.conda - sha256: fce22610ecc95e6d149e42a42fbc3cc9d9179bd4eb6232639a60f06e080eec98 - md5: b79875dbb5b1db9a4a22a4520f918e1a + size: 76564 + timestamp: 1771259530958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf + md5: a92e310ae8dfc206ff449f362fc4217f depends: - __osx >=11.0 constrains: - - expat 2.7.3.* + - expat 2.7.4.* license: MIT license_family: MIT purls: [] - size: 67800 - timestamp: 1763549994166 + size: 68199 + timestamp: 1771260020767 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -2360,105 +2432,105 @@ packages: purls: [] size: 40979 timestamp: 1769456747661 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_16.conda - sha256: 6eed58051c2e12b804d53ceff5994a350c61baf117ec83f5f10c953a3f311451 - md5: 6d0363467e6ed84f11435eb309f2ff06 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 depends: - __glibc >=2.17,<3.0.a0 - _openmp_mutex >=4.5 constrains: - - libgcc-ng ==15.2.0=*_16 - - libgomp 15.2.0 he0feb66_16 + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1042798 - timestamp: 1765256792743 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_16.conda - sha256: 44bfc6fe16236babb271e0c693fe7fd978f336542e23c9c30e700483796ed30b - md5: cf9cd6739a3b694dcf551d898e112331 + size: 1041788 + timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 + md5: 552567ea2b61e3a3035759b2fdb3f9a6 depends: - _openmp_mutex >=4.5 constrains: - - libgomp 15.2.0 h8acb6b2_16 - - libgcc-ng ==15.2.0=*_16 + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 h8acb6b2_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 620637 - timestamp: 1765256938043 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_16.conda - sha256: 646c91dbc422fe92a5f8a3a5409c9aac66549f4ce8f8d1cab7c2aa5db789bb69 - md5: 8b216bac0de7a9d60f3ddeba2515545c + size: 622900 + timestamp: 1771378128706 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e + md5: 92df6107310b1fff92c4cc84f0de247b depends: - _openmp_mutex constrains: - - libgcc-ng ==15.2.0=*_16 - - libgomp 15.2.0 16 + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 402197 - timestamp: 1765258985740 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_16.conda - sha256: 5f07f9317f596a201cc6e095e5fc92621afca64829785e483738d935f8cab361 - md5: 5a68259fac2da8f2ee6f7bfe49c9eb8b + size: 401974 + timestamp: 1771378877463 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 depends: - - libgcc 15.2.0 he0feb66_16 + - libgcc 15.2.0 he0feb66_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27256 - timestamp: 1765256804124 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_16.conda - sha256: 22d7e63a00c880bd14fbbc514ec6f553b9325d705f08582e9076c7e73c93a2e1 - md5: 3e54a6d0f2ff0172903c0acfda9efc0e + size: 27526 + timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f + md5: 4feebd0fbf61075a1a9c2e9b3936c257 depends: - - libgcc 15.2.0 h8acb6b2_16 + - libgcc 15.2.0 h8acb6b2_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27356 - timestamp: 1765256948637 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_16.conda - sha256: 8a7b01e1ee1c462ad243524d76099e7174ebdd94ff045fe3e9b1e58db196463b - md5: 40d9b534410403c821ff64f00d0adc22 + size: 27568 + timestamp: 1771378136019 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e depends: - - libgfortran5 15.2.0 h68bc16d_16 + - libgfortran5 15.2.0 h68bc16d_18 constrains: - - libgfortran-ng ==15.2.0=*_16 + - libgfortran-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27215 - timestamp: 1765256845586 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_16.conda - sha256: 02fa489a333ee4bb5483ae6bf221386b67c25d318f2f856237821a7c9333d5be - md5: 776cca322459d09aad229a49761c0654 + size: 27523 + timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda + sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 + md5: 41f261f5e4e2e8cbd236c2f1f15dae1b depends: - - libgfortran5 15.2.0 h1b7bec0_16 + - libgfortran5 15.2.0 h1b7bec0_18 constrains: - - libgfortran-ng ==15.2.0=*_16 + - libgfortran-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27314 - timestamp: 1765256989755 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_16.conda - sha256: 68a6c1384d209f8654112c4c57c68c540540dd8e09e17dd1facf6cf3467798b5 - md5: 11e09edf0dde4c288508501fe621bab4 + size: 27587 + timestamp: 1771378169244 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 + md5: 26981599908ed2205366e8fc91b37fc6 depends: - - libgfortran5 15.2.0 hdae7583_16 + - libgfortran5 15.2.0 hdae7583_18 constrains: - - libgfortran-ng ==15.2.0=*_16 + - libgfortran-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 138630 - timestamp: 1765259217400 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_16.conda - sha256: d0e974ebc937c67ae37f07a28edace978e01dc0f44ee02f29ab8a16004b8148b - md5: 39183d4e0c05609fd65f130633194e37 + size: 138973 + timestamp: 1771379054939 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=15.2.0 @@ -2467,11 +2539,11 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 2480559 - timestamp: 1765256819588 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_16.conda - sha256: bde541944566254147aab746e66014682e37a259c9a57a0516cf5d05ec343d14 - md5: 87b4ffedaba8b4d675479313af74f612 + size: 2482475 + timestamp: 1771378241063 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda + sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 + md5: 574d88ce3348331e962cfa5ed451b247 depends: - libgcc >=15.2.0 constrains: @@ -2479,11 +2551,11 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 1485817 - timestamp: 1765256963205 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_16.conda - sha256: 9fb7f4ff219e3fb5decbd0ee90a950f4078c90a86f5d8d61ca608c913062f9b0 - md5: 265a9d03461da24884ecc8eb58396d57 + size: 1486341 + timestamp: 1771378148102 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e + md5: c4a6f7989cffb0544bfd9207b6789971 depends: - libgcc >=15.2.0 constrains: @@ -2491,11 +2563,11 @@ packages: license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 598291 - timestamp: 1765258993165 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.3-h6548e54_0.conda - sha256: 82d6c2ee9f548c84220fb30fb1b231c64a53561d6e485447394f0a0eeeffe0e6 - md5: 034bea55a4feef51c98e8449938e9cee + size: 598634 + timestamp: 1771378886363 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce + md5: bb26456332b07f68bf3b7622ed71c0da depends: - __glibc >=2.17,<3.0.a0 - libffi >=3.5.2,<3.6.0a0 @@ -2504,14 +2576,14 @@ packages: - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.47,<10.48.0a0 constrains: - - glib 2.86.3 *_0 + - glib 2.86.4 *_1 license: LGPL-2.1-or-later purls: [] - size: 3946542 - timestamp: 1765221858705 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.3-hf53f6bf_0.conda - sha256: 35f4262131e4d42514787fdc3d45c836e060e18fcb2441abd9dd8ecd386214f4 - md5: f226b9798c6c176d2a94eea1350b3b6b + size: 4398701 + timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec + md5: 4ac4372fc4d7f20630a91314cdac8afd depends: - libffi >=3.5.2,<3.6.0a0 - libgcc >=14 @@ -2519,29 +2591,29 @@ packages: - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.47,<10.48.0a0 constrains: - - glib 2.86.3 *_0 + - glib 2.86.4 *_1 license: LGPL-2.1-or-later purls: [] - size: 4041779 - timestamp: 1765221790843 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_16.conda - sha256: 5b3e5e4e9270ecfcd48f47e3a68f037f5ab0f529ccb223e8e5d5ac75a58fc687 - md5: 26c46f90d0e727e95c6c9498a33a09f3 + size: 4512186 + timestamp: 1771863220969 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 + md5: 239c5e9546c38a1e884d69effcf4c882 depends: - __glibc >=2.17,<3.0.a0 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 603284 - timestamp: 1765256703881 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_16.conda - sha256: 0a9d77c920db691eb42b78c734d70c5a1d00b3110c0867cfff18e9dd69bc3c29 - md5: 4d2f224e8186e7881d53e3aead912f6c + size: 603262 + timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 + md5: 4faa39bf919939602e594253bd673958 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 587924 - timestamp: 1765256821307 + size: 588060 + timestamp: 1771378040807 - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f md5: 915f5995e94f60e9a4826e0b0920ee88 @@ -2776,51 +2848,51 @@ packages: purls: [] size: 909777 timestamp: 1768148320535 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_16.conda - sha256: 813427918316a00c904723f1dfc3da1bbc1974c5cfe1ed1e704c6f4e0798cbc6 - md5: 68f68355000ec3f1d6f26ea13e8f525f +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb depends: - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_16 + - libgcc 15.2.0 he0feb66_18 constrains: - - libstdcxx-ng ==15.2.0=*_16 + - libstdcxx-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5856456 - timestamp: 1765256838573 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_16.conda - sha256: 4db11a903707068ae37aa6909511c68e9af6a2e97890d1b73b0a8d87cb74aba9 - md5: 52d9df8055af3f1665ba471cce77da48 + size: 5852330 + timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 + md5: f56573d05e3b735cb03efeb64a15f388 depends: - - libgcc 15.2.0 h8acb6b2_16 + - libgcc 15.2.0 h8acb6b2_18 constrains: - - libstdcxx-ng ==15.2.0=*_16 + - libstdcxx-ng ==15.2.0=*_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 5541149 - timestamp: 1765256980783 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_16.conda - sha256: 81f2f246c7533b41c5e0c274172d607829019621c4a0823b5c0b4a8c7028ee84 - md5: 1b3152694d236cf233b76b8c56bf0eae + size: 5541411 + timestamp: 1771378162499 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 + md5: 6235adb93d064ecdf3d44faee6f468de depends: - - libstdcxx 15.2.0 h934c35e_16 + - libstdcxx 15.2.0 h934c35e_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27300 - timestamp: 1765256885128 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_16.conda - sha256: dd5c813ae5a4dac6fa946352674e0c21b1847994a717ef67bd6cc77bc15920be - md5: 20b7f96f58ccbe8931c3a20778fb3b32 + size: 27575 + timestamp: 1771378314494 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 + md5: 699d294376fe18d80b7ce7876c3a875d depends: - - libstdcxx 15.2.0 hef695bb_16 + - libstdcxx 15.2.0 hef695bb_18 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] - size: 27376 - timestamp: 1765257033344 + size: 27645 + timestamp: 1771378204663 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -2910,19 +2982,19 @@ packages: purls: [] size: 46438 timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-21.1.8-h4a912ad_0.conda - sha256: 56bcd20a0a44ddd143b6ce605700fdf876bcf5c509adc50bf27e76673407a070 - md5: 206ad2df1b5550526e386087bef543c7 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda + sha256: 0daeedb3872ad0fdd6f0d7e7165c63488e8a315d7057907434145fba0c1e7b3d + md5: ff0820b5588b20be3b858552ecf8ffae depends: - __osx >=11.0 constrains: - - openmp 21.1.8|21.1.8.* + - openmp 22.1.0|22.1.0.* - intel-openmp <0.0a0 license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 285974 - timestamp: 1765964756583 + size: 285558 + timestamp: 1772028716784 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e md5: 5b5203189eb668f042ac2b0826244964 @@ -2982,9 +3054,10 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 25778 timestamp: 1759055530601 -- conda: https://conda.modular.com/max/noarch/mblack-26.1.0-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda noarch: python - sha256: 6ccec52fe7354f44be93a41a122d2214ecdb030e6362afe8e7876eab35472e62 + sha256: 72a2887ef8e4c7b4a5ab9e3e6d6db8238a2145540c8120fc98973bec75ac07b1 + md5: f3069aa55ebfcd5b63263547fe49a579 depends: - python >=3.10 - click >=8.0.0 @@ -2993,10 +3066,9 @@ packages: - pathspec >=0.9.0 - platformdirs >=2 - tomli >=1.1.0 - - python license: MIT - size: 135743 - timestamp: 1769478151312 + size: 136290 + timestamp: 1772084669702 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -3008,65 +3080,72 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max/linux-64/mojo-0.26.1.0-release.conda - sha256: e945e8fbff0fdd2064ea193b26fb4ba95ab782367cfd2a2c4522350066434494 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda + sha256: b968bc6386709d2c062470902fe009da07f99d277512fab1675611c4d2384a78 + md5: d31cdc59e710e52b0ec100b4598fe153 depends: - python >=3.10 - - mojo-compiler ==0.26.1.0 release - - mblack ==26.1.0 release + - mojo-compiler ==0.26.2.0.dev2026022605 release + - mblack ==26.2.0.dev2026022605 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 89061870 - timestamp: 1769478151312 -- conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.1.0-release.conda - sha256: c005fee1f6973692f2902b425396eb54ab3fced145844b37757403b3a66ad977 + size: 89023627 + timestamp: 1772084669702 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda + sha256: 301a00270ad91b2aa6b6ea7b79dfa9405878da8cbe8a151c280a791c57ac6a28 + md5: 045a30ff84c0f499edf9e9ccca11c4b0 depends: - python >=3.10 - - mojo-compiler ==0.26.1.0 release - - mblack ==26.1.0 release + - mojo-compiler ==0.26.2.0.dev2026022605 release + - mblack ==26.2.0.dev2026022605 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 87625190 - timestamp: 1769478094501 -- conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.1.0-release.conda - sha256: ba205a5bb4fafc47abee5db87fd58dee091b104d20651363f3dc1e6ca60e1d21 + size: 87684193 + timestamp: 1772084699131 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda + sha256: 82fe87a17a1758f9fb9948cc7c1f59ad1c6a71f090f1422302ce75846e44dab6 + md5: 53e3f6c9501c7e7abe0f44a6e63598f0 depends: - python >=3.10 - - mojo-compiler ==0.26.1.0 release - - mblack ==26.1.0 release + - mojo-compiler ==0.26.2.0.dev2026022605 release + - mblack ==26.2.0.dev2026022605 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 75217574 - timestamp: 1769480882531 -- conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.1.0-release.conda - sha256: aad6cf9e55824ada1147acaee8b37c68ef1973b208a4a4182f7ac85bc20e690c + size: 75770079 + timestamp: 1772084832467 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + sha256: d31a30758b53d35a49a81606f08a64bf55913add7bb977a39511712f55291bd9 + md5: b9d7bf26f6dbf7e99b62bb655e49fe5b depends: - - mojo-python ==0.26.1.0 release + - mojo-python ==0.26.2.0.dev2026022605 release license: LicenseRef-Modular-Proprietary - size: 85722183 - timestamp: 1769478151311 -- conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.1.0-release.conda - sha256: 5c1271c8bab4bafbc25053a2344b3a76b2b0cc0287999a7a43a2675db5f3a948 + size: 87873800 + timestamp: 1772084669701 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + sha256: 471fbb3b0efde86db363d43f288464f8ee65be6c67654abaa05432bfe1cbe3cf + md5: 20c9c528358a53c5ac3f384ba6c96dd7 depends: - - mojo-python ==0.26.1.0 release + - mojo-python ==0.26.2.0.dev2026022605 release license: LicenseRef-Modular-Proprietary - size: 83633893 - timestamp: 1769478094500 -- conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.1.0-release.conda - sha256: 335323a29c632adaf75958366a93352082f2e6a8bee43353269e86eefa86a2cf + size: 85060013 + timestamp: 1772084699128 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda + sha256: dca0f02e5b4b2e87cb9758818b9df4505dcc9fe5656094db2a21819665591141 + md5: 9cc35db97e78d9dd7dcbb44adb967981 depends: - - mojo-python ==0.26.1.0 release + - mojo-python ==0.26.2.0.dev2026022605 release license: LicenseRef-Modular-Proprietary - size: 65952232 - timestamp: 1769480882531 -- conda: https://conda.modular.com/max/noarch/mojo-python-0.26.1.0-release.conda + size: 66366050 + timestamp: 1772084832441 +- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda noarch: python - sha256: 9bccbc9045984961426038832c8657198f8ef238d95e00d9bdcff2dd139b7fdf + sha256: da7930a203f5ec0b0c15be58b0ee8c93e38e8c145dcb981c5adc1e700d9060d6 + md5: bf9d5a959d25f122867fee4201fada98 depends: - python license: LicenseRef-Modular-Proprietary - size: 24169 - timestamp: 1769478151311 + size: 678729 + timestamp: 1772084669698 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a md5: 32f78e9d06e8593bc4bbf1338da06f5f @@ -3163,37 +3242,37 @@ packages: purls: [] size: 797030 timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.1-py313hf6604e3_0.conda - sha256: 4333872cc068f1ba559026ce805a25a91c2ae4e4f804691cf7fa0f43682e9b3a - md5: 7d51e3bef1a4b00bde1861d85ba2f874 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda + sha256: 2eb8be25a7504f058a153a84be70471e0ebbf6bd0411ae2b6d34904b89d86fe3 + md5: ca9c6ba4beac38cb3d0a85afde27f94c depends: - python - libgcc >=14 - - libstdcxx >=14 - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 - liblapack >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - - python_abi 3.13.* *_cp313 - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 8854901 - timestamp: 1768085657805 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.1-py313h11e5ff7_0.conda - sha256: 7f31df32fa82a51c9274a381b6c8c77eaec07daf2a812b6e9c1444b86ab3d699 - md5: 55c6ff5b0ce94eec9869e268ea6f640f + - pkg:pypi/numpy?source=hash-mapping + size: 8857152 + timestamp: 1770098515258 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda + sha256: 7acd65fef10bb9bb6385e154e3a55c60b3320b0886005bf93ef14f3ea027d4e9 + md5: b40ed3c04212930574f77fc500436106 depends: - python - - python 3.13.* *_cp313 - - libstdcxx >=14 - libgcc >=14 - - liblapack >=3.9.0,<4.0a0 + - libstdcxx >=14 + - python 3.13.* *_cp313 - python_abi 3.13.* *_cp313 - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 @@ -3201,28 +3280,28 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7929057 - timestamp: 1768085735194 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.1-py313h16eae64_0.conda - sha256: 409a1f254ff025f0567d3444f2a82cd65c10d403f27a66f219f51a082b2a7699 - md5: 527abeb3c3f65345d9c337fb49e32d51 + size: 7931090 + timestamp: 1770098524373 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda + sha256: 3e23ed9eb63d9ce4dc585aad6b65e0197d7e9f28877acf7114cc64f33763a420 + md5: e34e9c58a0ee3eca3def3bb477797621 depends: - python - __osx >=11.0 - - libcxx >=19 - python 3.13.* *_cp313 - - libcblas >=3.9.0,<4.0a0 + - libcxx >=19 - liblapack >=3.9.0,<4.0a0 - - python_abi 3.13.* *_cp313 - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 6925404 - timestamp: 1768085588288 + - pkg:pypi/numpy?source=hash-mapping + size: 6925963 + timestamp: 1770098439599 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -3277,7 +3356,7 @@ packages: license: MPL-2.0 license_family: MOZILLA purls: - - pkg:pypi/pathspec?source=compressed-mapping + - pkg:pypi/pathspec?source=hash-mapping size: 53739 timestamp: 1769677743677 - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda @@ -3327,18 +3406,18 @@ packages: - pkg:pypi/pkginfo?source=hash-mapping size: 30536 timestamp: 1739984682585 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.5.1-pyhcf101f3_0.conda - sha256: 04c64fb78c520e5c396b6e07bc9082735a5cc28175dbe23138201d0a9441800b - md5: 1bd2e65c8c7ef24f4639ae6e850dacc2 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa + md5: 4fefefb892ce9cc1539405bec2f1a6cd depends: - python >=3.10 - python license: MIT license_family: MIT purls: - - pkg:pypi/platformdirs?source=hash-mapping - size: 23922 - timestamp: 1764950726246 + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25643 + timestamp: 1771233827084 - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda sha256: c5ab8a98f25d6416ef40761db1d8f5cea3ea67a28051d3d17829347c63dede67 md5: 669f9224d31f304bc632f346734d987a @@ -3526,29 +3605,30 @@ packages: - pkg:pypi/pydantic-core?source=hash-mapping size: 1778337 timestamp: 1762989007829 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhd8ed1ab_0.conda - sha256: e984052b8922b8996add05d595b68430e4f28b7d93846693b2729dc1e0504685 - md5: b74145c95d910d3dd4195cf7d7567c35 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + sha256: 6a25f3b7a92833534eb9d09e3b4ba00195fbf459ec608d15dc9e31f81b67e972 + md5: 83984e3edee8f7312c0aa860682ee145 depends: - - pydantic >=2.5.2 - python >=3.10 + - pydantic >=2.5.2 + - python constrains: - - python-ulid >=1,<3 - phonenumbers >=8,<9 - - pytz >=2024.1 - pycountry >=23 - - tzdata >=2024a - - pendulum >=3.0.0,<4.0.0 - semver >=3.0.2,<4 + - python-ulid >=1,<4 + - pendulum >=3.0.0,<4.0.0 + - pytz >=2024.1 + - tzdata >=2024a license: MIT license_family: MIT purls: - - pkg:pypi/pydantic-extra-types?source=compressed-mapping - size: 64099 - timestamp: 1767221123687 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.12.0-pyh3cfb1c2_0.conda - sha256: 17d552dd19501909d626ff50cd23753d56e03ab670ce9096f1c4068e1eb90f2a - md5: 0a3042ce18b785982c64a8567cc3e512 + - pkg:pypi/pydantic-extra-types?source=hash-mapping + size: 68665 + timestamp: 1770023146886 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda + sha256: 343988d65c08477a87268d4fbeba59d0295514143965d2755ac4519b73155479 + md5: cc0da73801948100ae97383b8da12993 depends: - pydantic >=2.7.0 - python >=3.10 @@ -3557,9 +3637,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pydantic-settings?source=hash-mapping - size: 43752 - timestamp: 1762786342653 + - pkg:pypi/pydantic-settings?source=compressed-mapping + size: 49319 + timestamp: 1771527313149 - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a md5: 6b6ece66ebcae2d5f326c77ef2c5a066 @@ -3595,10 +3675,10 @@ packages: - pkg:pypi/pysocks?source=hash-mapping size: 21085 timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.11-hc97d973_101_cp313.conda - build_number: 101 - sha256: c9625638f32f4ee27a506e8cefc56a78110c4c54867663f56d91dc721df9dc7f - md5: aa23b675b860f2566af2dfb3ffdf3b8c +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + build_number: 100 + sha256: 8a08fe5b7cb5a28aa44e2994d18dbf77f443956990753a4ca8173153ffb6eb56 + md5: 4c875ed0e78c2d407ec55eadffb8cf3d depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -3612,20 +3692,20 @@ packages: - libuuid >=2.41.3,<3.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - python_abi 3.13.* *_cp313 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata license: Python-2.0 purls: [] - size: 37170676 - timestamp: 1769473304794 + size: 37364553 + timestamp: 1770272309861 python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.11-h4c0d347_101_cp313.conda - build_number: 101 - sha256: f702bf51730c4c2235fb36e52937da11385e801558db9beb8b4fbcf9be21eec1 - md5: 6299d23cea618a9ac10bbc126d8d04f5 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + build_number: 100 + sha256: a6bdf48a245d70526b4e6a277a4b344ec3f7c787b358e5377d544ac9a303c111 + md5: 732a86d6786402b95e1dc68c32022500 depends: - bzip2 >=1.0.8,<2.0a0 - ld_impl_linux-aarch64 >=2.36.1 @@ -3638,20 +3718,20 @@ packages: - libuuid >=2.41.3,<3.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - python_abi 3.13.* *_cp313 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata license: Python-2.0 purls: [] - size: 33898728 - timestamp: 1769471851659 + size: 33986700 + timestamp: 1770270924894 python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.11-hfc2f54d_101_cp313.conda - build_number: 101 - sha256: 8565d451dff3cda5e55fabdbae2751033c2b08b3fd3833526f8dbf3c08bcb3cf - md5: 8f2ac152fe98c22af0f4b479cf11c845 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + build_number: 100 + sha256: 9a4f16a64def0853f0a7b6a7beb40d498fd6b09bee10b90c3d6069b664156817 + md5: 179c0f5ae4f22bc3be567298ed0b17b9 depends: - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 @@ -3662,15 +3742,15 @@ packages: - libsqlite >=3.51.2,<4.0a0 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - - openssl >=3.5.4,<4.0a0 + - openssl >=3.5.5,<4.0a0 - python_abi 3.13.* *_cp313 - readline >=8.3,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata license: Python-2.0 purls: [] - size: 12806076 - timestamp: 1769472806227 + size: 12770674 + timestamp: 1770272314517 python_site_packages_path: lib/python3.13/site-packages - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda sha256: 195e483a12bcec40b817f4001d4d4b8ea1cb2de66a62aeabfff6e32e29b3f407 @@ -3727,16 +3807,16 @@ packages: - pkg:pypi/fastjsonschema?source=hash-mapping size: 244628 timestamp: 1755304154927 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.11-h4df99d1_101.conda - sha256: c17676be5479d9032b54fea09024fc2cdeb689639070b25fa9bd85b32c531a7a - md5: 4af7a72062bddcb57dea6b236e1b245e +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + sha256: f306304235197434494355351ac56020a65b7c5c56ff10ca1ed53356d575557a + md5: 3d92938d5b83c49162ade038aab58a59 depends: - - cpython 3.13.11.* + - cpython 3.13.12.* - python_abi * *_cp313 license: Python-2.0 purls: [] - size: 48231 - timestamp: 1769471383908 + size: 48618 + timestamp: 1770270436560 - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda sha256: f1fc3e9561b6d3bee2f738f5b1818b51124f45a2b28b3bf6c2174d629276e069 md5: e27480eebcdf247209e90da706ebef8d @@ -3771,9 +3851,9 @@ packages: purls: [] size: 7002 timestamp: 1752805902938 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_0.conda - sha256: 40dcd6718dce5fbee8aabdd0519f23d456d8feb2e15ac352eaa88bbfd3a881af - md5: 4794ea0adaebd9f844414e594b142cb2 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda + sha256: ef7df29b38ef04ec67a8888a4aa039973eaa377e8c4b59a7be0a1c50cd7e4ac6 + md5: f256753e840c3cd3766488c9437a8f8b depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -3783,12 +3863,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=hash-mapping - size: 207109 - timestamp: 1758892173548 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_0.conda - sha256: 4aca079224068d1a7fa2d2cbdb6efe11eec76737472c01f02d9e147c5237c37d - md5: cd0891668088a005cb45b344d84a3955 + - pkg:pypi/pyyaml?source=compressed-mapping + size: 201616 + timestamp: 1770223543730 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda + sha256: 9dbfdb53af5d27ac2eec5db4995979fdaaea76766d4f01cd3524dd7d24f79fb9 + md5: 14b86e046b0c5c5508602165287dd01c depends: - libgcc >=14 - python >=3.13,<3.14.0a0 @@ -3798,12 +3878,12 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=hash-mapping - size: 198001 - timestamp: 1758891959168 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h7d74516_0.conda - sha256: f5be0d84f72a567b7333b9efa74a65bfa44a25658cf107ffa3fc65d3ae6660d7 - md5: 0e8e3235217b4483a7461b63dca5826b + - pkg:pypi/pyyaml?source=compressed-mapping + size: 194182 + timestamp: 1770223431084 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda + sha256: 950725516f67c9691d81bb8dde8419581c5332c5da3da10c9ba8cbb1698b825d + md5: 5d0c8b92128c93027632ca8f8dc1190f depends: - __osx >=11.0 - python >=3.13,<3.14.0a0 @@ -3813,31 +3893,31 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=hash-mapping - size: 191630 - timestamp: 1758892258120 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hfb55c3c_0.conda + - pkg:pypi/pyyaml?source=compressed-mapping + size: 188763 + timestamp: 1770224094408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda noarch: python - sha256: a00a41b66c12d9c60e66b391e9a4832b7e28743348cf4b48b410b91927cd7819 - md5: 3399d43f564c905250c1aea268ebb935 + sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 + md5: 082985717303dab433c976986c674b35 depends: - python - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - zeromq >=4.3.5,<4.4.0a0 - _python_abi3_support 1.* - cpython >=3.12 - - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=hash-mapping - size: 212218 - timestamp: 1757387023399 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312h4552c38_0.conda + - pkg:pypi/pyzmq?source=compressed-mapping + size: 211567 + timestamp: 1771716961404 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda noarch: python - sha256: 54e4ce37719ae513c199b8ab06ca89f8c4a0945b0c51d60ec952f5866ae1687e - md5: c9aadf2edd39b56ad34dc5f775626d5b + sha256: afdff66cb54e22d0d2c682731e08bb8f319dfd93f3cdcff4a4640cb5a8ae2460 + md5: 130d781798bb24a0b86290e65acd50d8 depends: - python - libstdcxx >=14 @@ -3848,26 +3928,26 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=hash-mapping - size: 213723 - timestamp: 1757387032833 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312hd65ceae_0.conda + - pkg:pypi/pyzmq?source=compressed-mapping + size: 212585 + timestamp: 1771716963309 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda noarch: python - sha256: ef33812c71eccf62ea171906c3e7fc1c8921f31e9cc1fbc3f079f3f074702061 - md5: bbd22b0f0454a5972f68a5f200643050 + sha256: 2f31f799a46ed75518fae0be75ecc8a1b84360dbfd55096bc2fe8bd9c797e772 + md5: 2f6b79700452ef1e91f45a99ab8ffe5a depends: - python - - __osx >=11.0 - libcxx >=19 + - __osx >=11.0 - _python_abi3_support 1.* - cpython >=3.12 - zeromq >=4.3.5,<4.4.0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=hash-mapping - size: 191115 - timestamp: 1757387128258 + - pkg:pypi/pyzmq?source=compressed-mapping + size: 191641 + timestamp: 1771717073430 - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda sha256: 010b7b1a9d05583c9a5e025247308c2fdb990f413367fc1414846d94b630e553 md5: 87ec3a86d3c910b1d64ec7116e156d40 @@ -3980,9 +4060,9 @@ packages: - pkg:pypi/requests-toolbelt?source=hash-mapping size: 44285 timestamp: 1733734886897 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.1-pyhcf101f3_0.conda - sha256: 8d9c9c52bb4d3684d467a6e31814d8c9fccdacc8c50eb1e3e5025e88d6d57cb4 - md5: 83d94f410444da5e2f96e5742b7a4973 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 + md5: 7a6289c50631d620652f5045a63eb573 depends: - markdown-it-py >=2.2.0 - pygments >=2.13.0,<3.0.0 @@ -3993,11 +4073,11 @@ packages: license_family: MIT purls: - pkg:pypi/rich?source=compressed-mapping - size: 208244 - timestamp: 1769302653091 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.17.2-pyhcf101f3_0.conda - sha256: f554f07756524948d85399403e7fd6da90e872f7d6760f124c6e62225aabdb57 - md5: 088fca8d836cc7cbefeaed39064aac4f + size: 208472 + timestamp: 1771572730357 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda + sha256: 9cf3b9a083ebdee70ef5a48fbe409d91d2a8c4eed3c581a7b33b4d5ca7c813be + md5: 8b1a4d854f9a4ea1e4abc93ccab0ded9 depends: - python >=3.10 - rich >=13.7.1 @@ -4008,8 +4088,8 @@ packages: license_family: MIT purls: - pkg:pypi/rich-toolkit?source=compressed-mapping - size: 31488 - timestamp: 1769737531318 + size: 32484 + timestamp: 1771977622605 - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda sha256: 43ea89b53cbede879e57ac9dd20153c5cd2bb9575228e7faf5a8764aa6c201b7 md5: 013a7d73eaef154f0dc5e415ffa8ff87 @@ -4063,24 +4143,33 @@ packages: - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 -- conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.1.0-hb0f4dca_0.conda - sha256: 5151a9d2519c977783e16534ae83020cffa9faf673e19ff8ad6452b204e06bca - depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - size: 1353910 - timestamp: 1769803061847 -- conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.1.0-he8cfe8b_0.conda - sha256: 606c115b3635005abeed7316353f48e4356e30930776593f7a291d00de44c9e5 - depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - size: 1352700 - timestamp: 1769803067312 -- conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.1.0-h60d57d3_0.conda - sha256: acf22a5360837bb01c60398fda7d9c2e69e5288877c0727b2da711442d5a52ae - depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - size: 1353357 - timestamp: 1769803155962 +- conda: ./small-time + name: small_time + version: 26.1.0 + build: h60d57d3_0 + subdir: osx-arm64 + variants: + target_platform: osx-arm64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 +- conda: ./small-time + name: small_time + version: 26.1.0 + build: hb0f4dca_0 + subdir: linux-64 + variants: + target_platform: linux-64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 +- conda: ./small-time + name: small_time + version: 26.1.0 + build: he8cfe8b_0 + subdir: linux-aarch64 + variants: + target_platform: linux-aarch64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad md5: 03fe290994c5e4ec17293cfb6bdce520 @@ -4089,7 +4178,7 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/sniffio?source=compressed-mapping + - pkg:pypi/sniffio?source=hash-mapping size: 15698 timestamp: 1762941572482 - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda @@ -4164,7 +4253,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/tomlkit?source=compressed-mapping + - pkg:pypi/tomlkit?source=hash-mapping size: 39224 timestamp: 1768476626454 - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda @@ -4227,52 +4316,25 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/trove-classifiers?source=compressed-mapping + - pkg:pypi/trove-classifiers?source=hash-mapping size: 19707 timestamp: 1768550221435 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.21.1-pyhf8876ea_0.conda - sha256: 62b359b76ae700ef4a4f074a196bc8953f2188a2784222029d0b3d19cdea59f9 - md5: 7f66f45c1bb6eb774abf6d2f02ccae9d +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda + sha256: e1116d08e6a55b2b42a090130c268f75211ad8e6a8e7749e977924de3864d487 + md5: 10870929f587540c5802cd9b071cba5c depends: - - typer-slim-standard ==0.21.1 h378290b_0 + - annotated-doc >=0.0.2 + - click >=8.2.1 - python >=3.10 + - rich >=12.3.0 + - shellingham >=1.3.0 - python license: MIT license_family: MIT purls: - pkg:pypi/typer?source=hash-mapping - size: 82073 - timestamp: 1767711188310 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-0.21.1-pyhcf101f3_0.conda - sha256: 9ef3c1b5ea2b355904b94323fc3fc95a37584ef09c6c86aafe472da156aa4d70 - md5: 3f64f1c7f9a23bead591884648949622 - depends: - - python >=3.10 - - click >=8.0.0 - - typing_extensions >=3.7.4.3 - - python - constrains: - - typer 0.21.1.* - - rich >=10.11.0 - - shellingham >=1.3.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer-slim?source=compressed-mapping - size: 48131 - timestamp: 1767711188309 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-slim-standard-0.21.1-h378290b_0.conda - sha256: 6a300a4e8d1e30b7926a966e805201ec08d4a5ab97c03a7d0f927996413249d7 - md5: f08a1f489c4d07cfd4a9983963073480 - depends: - - typer-slim ==0.21.1 pyhcf101f3_0 - - rich - - shellingham - license: MIT - license_family: MIT - purls: [] - size: 5322 - timestamp: 1767711188310 + size: 117860 + timestamp: 1771292312899 - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c md5: edd329d7d3a4ab45dcf905899a7a6115 @@ -4292,7 +4354,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/typing-inspection?source=compressed-mapping + - pkg:pypi/typing-inspection?source=hash-mapping size: 18923 timestamp: 1764158430324 - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda @@ -4329,9 +4391,9 @@ packages: - pkg:pypi/urllib3?source=hash-mapping size: 103172 timestamp: 1767817860341 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.40.0-pyhc90fa1f_0.conda - sha256: 9cb6777bc67d43184807f8c57bdf8c917830240dd95e66fa9dbb7d65fa81f68e - md5: eb8fdfa0a193cfe804970d1a5470246d +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + sha256: 199731b8a86d18d89a9236225cf3e618aef467f628bc6f6bb2875a28f24f3dd4 + md5: 10d80692c8c9c05b7d4b0a1531208ad7 depends: - __unix - click >=7.0 @@ -4343,25 +4405,25 @@ packages: license_family: BSD purls: - pkg:pypi/uvicorn?source=hash-mapping - size: 54972 - timestamp: 1766332899903 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.40.0-h4cd5af1_0.conda - sha256: 0476363e52d50f7c6075d06f309a54a9dc9b8828c00b4ed572b78d5f1374fccb - md5: 8c7fcf5c22f9342caf554be590f6fee9 + size: 54913 + timestamp: 1771328143244 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + sha256: 034d62c37fadadafe8b5c923beaed2279d0f4ad8df731f3e86d12760fa33ccbc + md5: 2ada177289a251ffcfeae37e9f28dc3a depends: - __unix - - uvicorn ==0.40.0 pyhc90fa1f_0 + - uvicorn ==0.41.0 pyhc90fa1f_0 - websockets >=10.4 - httptools >=0.6.3 - - watchfiles >=0.13 + - watchfiles >=0.20 - python-dotenv >=0.13 - pyyaml >=5.1 - - uvloop >=0.14.0,!=0.15.0,!=0.15.1 + - uvloop >=0.15.1 license: BSD-3-Clause license_family: BSD purls: [] - size: 4119 - timestamp: 1766332899904 + size: 4145 + timestamp: 1771328143246 - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda sha256: 77a220ecf6c1467f94d6adda5fb1296f558f3f3044842dc0a52881eab5908dc0 md5: 266caaa8701a13482ea924a77897b1e4 @@ -4404,21 +4466,23 @@ packages: - pkg:pypi/uvloop?source=hash-mapping size: 487912 timestamp: 1762473054199 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.36.1-pyhd8ed1ab_0.conda - sha256: fa0a21fdcd0a8e6cf64cc8cd349ed6ceb373f09854fd3c4365f0bc4586dccf9a - md5: 6b0259cea8ffa6b66b35bae0ca01c447 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + sha256: de93eed364f14f08f78ff41994dfe22ff018521c4702e432630d10c0eb0eff6b + md5: e73db224203e56b25e040446fa1584db depends: + - python >=3.10 - distlib >=0.3.7,<1 - - filelock >=3.20.1,<4 - platformdirs >=3.9.1,<5 - - python >=3.10 - typing_extensions >=4.13.2 + - importlib-metadata >=6.6 + - filelock >=3.24.2,<4 + - python license: MIT license_family: MIT purls: - pkg:pypi/virtualenv?source=hash-mapping - size: 4404318 - timestamp: 1768069793682 + size: 4657721 + timestamp: 1771967166128 - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda sha256: 11a07764137af9bcf29e9e26671c1be1ea1302f7dd7075a4d41481489883eaff md5: 9373034735566df29779429f0c0de511 @@ -4509,7 +4573,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/websockets?source=compressed-mapping + - pkg:pypi/websockets?source=hash-mapping size: 371508 timestamp: 1768087394531 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda @@ -4608,7 +4672,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/zipp?source=compressed-mapping + - pkg:pypi/zipp?source=hash-mapping size: 24194 timestamp: 1764460141901 - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda diff --git a/pixi.toml b/pixi.toml index 210df9a4..b580926b 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,6 +1,6 @@ [workspace] authors = ["saviorand"] -channels = ["conda-forge", "https://conda.modular.com/max", "https://repo.prefix.dev/modular-community", "https://repo.prefix.dev/mojo-community"] +channels = ["conda-forge", "https://repo.prefix.dev/mojo-community", "https://conda.modular.com/max-nightly/", "https://conda.modular.com/max", "https://repo.prefix.dev/modular-community"] description = "Simple and fast HTTP framework for Mojo!" platforms = ["osx-arm64", "linux-64", "linux-aarch64"] license = "MIT" @@ -40,20 +40,24 @@ version = "0.26.1.2" backend = { name = "pixi-build-mojo", version = "*" } [dependencies] -mojo = ">=0.26.1.0,<0.26.2.0" -small_time = ">=26.1.0,<26.2.0" +mojo = ">=0.26.2.0.dev2026020205,<0.27" +small_time = {path = "./small-time"} +emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.host-dependencies] -mojo-compiler = ">=0.26.1.0,<0.26.2.0" -small_time = ">=26.1.0,<26.2.0" +mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" +small_time = {path = "./small-time"} +emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.build-dependencies] -mojo-compiler = ">=0.26.1.0,<0.26.2.0" -small_time = ">=26.1.0,<26.2.0" +mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" +small_time = {path = "./small-time"} +emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.run-dependencies] -mojo-compiler = ">=0.26.1.0,<0.26.2.0" -small_time = ">=26.1.0,<26.2.0" +mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" +small_time = {path = "./small-time"} +emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [feature.util.dependencies] isort = ">=7.0.0,<8" diff --git a/test.mojo b/test.mojo new file mode 100644 index 00000000..da1ee8b8 --- /dev/null +++ b/test.mojo @@ -0,0 +1,20 @@ +from lightbug_http.http.json import JsonOK, json_decode, JsonError, JsonSerializable, JsonDeserializable +from emberjson import serialize, deserialize + +@fieldwise_init +struct Message(JsonSerializable, Defaultable, Movable): + var message: String + + fn __init__(out self): + self.message = "" + +fn main() raises: + # Test serialization via JsonOK + var msg = Message("Hello, World!") + var res = JsonOK(msg) + print("status:", res.status_code) + print("body:", String(res.get_body())) + + # Test deserialization + var parsed = deserialize[Message]('{"message": "from JSON"}') + print("deserialized:", parsed.message) \ No newline at end of file diff --git a/tests/lightbug_http/http/test_json.mojo b/tests/lightbug_http/http/test_json.mojo new file mode 100644 index 00000000..ac550fac --- /dev/null +++ b/tests/lightbug_http/http/test_json.mojo @@ -0,0 +1,49 @@ +climport testing +from testing import assert_equal, assert_true + +from emberjson import parse +from lightbug_http.header import HeaderKey +from lightbug_http.http.json import JsonOK, JsonError + + +def test_json_ok_status_and_content_type(): + var res = JsonOK('{"message": "hello"}') + assert_equal(res.status_code, 200) + assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") + + +def test_json_ok_preserves_body(): + var body = '{"key": "value", "num": 42}' + var res = JsonOK(body) + assert_equal(String(res.get_body()), body) + + +def test_json_ok_empty_object(): + var res = JsonOK("{}") + assert_equal(String(res.get_body()), "{}") + assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") + + +def test_json_error_status_and_content_type(): + var res = JsonError("invalid input") + assert_equal(res.status_code, 400) + assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") + + +def test_json_error_contains_message(): + var res = JsonError("bad request") + var body = String(res.get_body()) + assert_true("bad request" in body, "error body should contain the message") + assert_true("error" in body, "error body should contain 'error' key") + + +def test_json_error_is_valid_json(): + var res = JsonError("something went wrong") + var body = String(res.get_body()) + # Verify the error response body is parseable JSON + var json = parse(body) + assert_equal(String(json["error"]), '"something went wrong"') + + +def main(): + testing.TestSuite.discover_tests[__functions_in_module()]().run() From 3c1acc9b2a9991f13ffcdc0fe16e38923e8d6c1b Mon Sep 17 00:00:00 2001 From: Val Date: Fri, 27 Feb 2026 13:45:29 +0100 Subject: [PATCH 02/27] remove pixi.lock --- pixi.lock | 4709 ----------------------------------------------------- 1 file changed, 4709 deletions(-) delete mode 100644 pixi.lock diff --git a/pixi.lock b/pixi.lock deleted file mode 100644 index d2fc9c3a..00000000 --- a/pixi.lock +++ /dev/null @@ -1,4709 +0,0 @@ -version: 6 -environments: - bench: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - - url: https://conda.modular.com/max/ - - url: https://repo.prefix.dev/modular-community/ - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ./small-time - build: hb0f4dca_0 - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ./small-time - build: he8cfe8b_0 - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ./small-time - build: h60d57d3_0 - default: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - - url: https://conda.modular.com/max/ - - url: https://repo.prefix.dev/modular-community/ - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ./small-time - build: hb0f4dca_0 - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ./small-time - build: he8cfe8b_0 - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ./small-time - build: h60d57d3_0 - integration-tests: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - - url: https://conda.modular.com/max/ - - url: https://repo.prefix.dev/modular-community/ - indexes: - - https://pypi.org/simple - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.7.1-py313h07c4f96_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ./small-time - build: hb0f4dca_0 - - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.7.1-py313h6194ac5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ./small-time - build: he8cfe8b_0 - - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.7.1-py313h6535dbc_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyh534df25_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda: ./small-time - build: h60d57d3_0 - - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl - unit-tests: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - - url: https://conda.modular.com/max/ - - url: https://repo.prefix.dev/modular-community/ - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ./small-time - build: hb0f4dca_0 - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ./small-time - build: he8cfe8b_0 - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ./small-time - build: h60d57d3_0 - util: - channels: - - url: https://conda.anaconda.org/conda-forge/ - - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - - url: https://conda.modular.com/max/ - - url: https://repo.prefix.dev/modular-community/ - options: - pypi-prerelease-mode: if-necessary-or-explicit - packages: - linux-64: - - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ./small-time - build: hb0f4dca_0 - linux-aarch64: - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ./small-time - build: he8cfe8b_0 - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ./small-time - build: h60d57d3_0 -packages: -- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda - build_number: 20 - sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 - md5: a9f577daf3de00bca7c3c76c0ecbd1de - depends: - - __glibc >=2.17,<3.0.a0 - - libgomp >=7.5.0 - constrains: - - openmp_impl <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 28948 - timestamp: 1770939786096 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - build_number: 20 - sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 - md5: 468fd3bb9e1f671d36c2cbc677e56f1d - depends: - - libgomp >=7.5.0 - constrains: - - openmp_impl <0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 28926 - timestamp: 1770939656741 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - build_number: 7 - sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd - md5: a44032f282e7d2acdeb1c240308052dd - depends: - - llvm-openmp >=9.0.1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 8325 - timestamp: 1764092507920 -- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 - md5: aaa2a381ccc56eac91d63b6c1240312f - depends: - - cpython - - python-gil - license: MIT - license_family: MIT - purls: [] - size: 8191 - timestamp: 1744137672556 -- pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl - name: abnf - version: 2.4.1 - sha256: c9918b6aa9fe93c531ab245d99b47fc2ccf56407e005a598b279f384397d1df1 - requires_dist: - - check-manifest==0.51 ; extra == 'dev' - - pre-commit==4.3.0 ; extra == 'dev' - - pyright[nodejs]==1.1.407 ; extra == 'dev' - - pytest==8.4.2 ; extra == 'dev' - - pytest-cov==7.0.0 ; extra == 'dev' - - ruff==0.14.2 ; extra == 'dev' - - setuptools==80.9.0 ; extra == 'dev' - - setuptools-scm==9.2.2 ; extra == 'dev' - - tox==4.31.0 ; extra == 'dev' - requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - sha256: cc9fbc50d4ee7ee04e49ee119243e6f1765750f0fd0b4d270d5ef35461b643b1 - md5: 52be5139047efadaeeb19c6a5103f92a - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/annotated-doc?source=hash-mapping - size: 14222 - timestamp: 1762868213144 -- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 - md5: 2934f256a8acfe48f6ebb4fce6cde29c - depends: - - python >=3.9 - - typing-extensions >=4.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/annotated-types?source=hash-mapping - size: 18074 - timestamp: 1733247158254 -- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - sha256: eb0c4e2b24f1fbefaf96ce6c992c6bd64340bc3c06add4d7415ab69222b201da - md5: 11a2b8c732d215d977998ccd69a9d5e8 - depends: - - exceptiongroup >=1.0.2 - - idna >=2.8 - - python >=3.10 - - typing_extensions >=4.5 - - python - constrains: - - trio >=0.32.0 - - uvloop >=0.21 - license: MIT - license_family: MIT - purls: - - pkg:pypi/anyio?source=compressed-mapping - size: 145175 - timestamp: 1767719033569 -- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda - sha256: 9552afbec37c4d8d0e83a5c4c6b3c7f4b8785f935094ce3881e0a249045909ce - md5: d9e90792551a527200637e23a915dd79 - depends: - - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.13.* *_cp313 - - zstd >=1.5.7,<1.6.0a0 - license: BSD-3-Clause AND MIT AND EPL-2.0 - purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 240943 - timestamp: 1767044981366 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda - sha256: 61e4757233111133b64125706c9c5dc2d36818eec0cc1894784a08e615a87b37 - md5: c0fd0009041efedb247ba54df0f423ee - depends: - - python - - python 3.13.* *_cp313 - - libgcc >=14 - - python_abi 3.13.* *_cp313 - - zstd >=1.5.7,<1.6.0a0 - license: BSD-3-Clause AND MIT AND EPL-2.0 - purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 247081 - timestamp: 1767045002495 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda - sha256: f3047ca3b41bb444b4b5a71a6eee182623192c77019746dd4685fd260becb249 - md5: 54008c5cc8928e5cb5a0f9206b829451 - depends: - - python - - python 3.13.* *_cp313 - - __osx >=11.0 - - zstd >=1.5.7,<1.6.0a0 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause AND MIT AND EPL-2.0 - purls: - - pkg:pypi/backports-zstd?source=hash-mapping - size: 244371 - timestamp: 1767045003420 -- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda - sha256: dadec2879492adede0a9af0191203f9b023f788c18efd45ecac676d424c458ae - md5: 6c4d3597cf43f3439a51b2b13e29a4ba - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - libbrotlicommon 1.2.0 hb03c661_1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 367721 - timestamp: 1764017371123 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda - sha256: 5fe27389162240ab9a5cd8d112d51bdd9019f9a68c5593b5298e54f0437f714f - md5: 523c55147ba15d3e0e0cdb9f67cda339 - depends: - - libgcc >=14 - - libstdcxx >=14 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - libbrotlicommon 1.2.0 he30d5cf_1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 372678 - timestamp: 1764017653333 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda - sha256: 2e21dccccd68bedd483300f9ab87a425645f6776e6e578e10e0dd98c946e1be9 - md5: b03732afa9f4f54634d94eb920dfb308 - depends: - - __osx >=11.0 - - libcxx >=19 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - libbrotlicommon 1.2.0 hc919400_1 - license: MIT - license_family: MIT - purls: - - pkg:pypi/brotli?source=hash-mapping - size: 359568 - timestamp: 1764018359470 -- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda - sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 - md5: d2ffd7602c02f2b316fd921d39876885 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 260182 - timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda - sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c - md5: 840d8fc0d7b3209be93080bc20e07f2d - depends: - - libgcc >=14 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 192412 - timestamp: 1771350241232 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df - md5: 620b85a3f45526a8bc4d23fd78fc22f0 - depends: - - __osx >=11.0 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 124834 - timestamp: 1771350416561 -- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc - md5: 4492fd26db29495f0ba23f146cd5638d - depends: - - __unix - license: ISC - purls: [] - size: 147413 - timestamp: 1772006283803 -- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda - sha256: ec791bb6f1ef504411f87b28946a7ae63ed1f3681cefc462cf1dfdaf0790b6a9 - md5: 241ef6e3db47a143ac34c21bfba510f1 - depends: - - msgpack-python >=0.5.2,<2.0.0 - - python >=3.9 - - requests >=2.16.0 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/cachecontrol?source=hash-mapping - size: 23868 - timestamp: 1746103006628 -- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - sha256: 4ba4d08fba095556b7f1e06ec1dca068b367e68aadab0aca73115d02ddfcd518 - md5: b4af8c1b61929b1bcb001c2953882149 - depends: - - cachecontrol 0.14.3 pyha770c72_0 - - filelock >=3.8.0 - - python >=3.9 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 7203 - timestamp: 1746103018780 -- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 - md5: 765c4d97e877cdbbb88ff33152b86125 - depends: - - python >=3.10 - license: ISC - purls: - - pkg:pypi/certifi?source=compressed-mapping - size: 151445 - timestamp: 1772001170301 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda - sha256: 2162a91819945c826c6ef5efe379e88b1df0fe9a387eeba23ddcf7ebeacd5bd6 - md5: d0616e7935acab407d1543b28c446f6f - depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - pycparser - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 298357 - timestamp: 1761202966461 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda - sha256: 10f6ca0e48bbed90b252fca49b188df0016b7033a9fcb472479585056fd38433 - md5: 59837145ebd94715f75b0f0aef732d5c - depends: - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - pycparser - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 316294 - timestamp: 1761203943693 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda - sha256: 1fa69651f5e81c25d48ac42064db825ed1a3e53039629db69f86b952f5ce603c - md5: 050374657d1c7a4f2ea443c0d0cbd9a0 - depends: - - __osx >=11.0 - - libffi >=3.5.2,<3.6.0a0 - - pycparser - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cffi?source=hash-mapping - size: 291376 - timestamp: 1761203583358 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59 - md5: a22d1fd9bf98827e280a02875d9a007a - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/charset-normalizer?source=hash-mapping - size: 50965 - timestamp: 1760437331772 -- conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - sha256: efed3fcc0cf751b27d7f493654c5f2fba664a263664bcde9bc3a7424c080c20a - md5: 0bbf06825d478dc823a7cea431b9108c - depends: - - crashtest >=0.4.1,<0.5.0 - - python >=3.9 - - rapidfuzz >=3.0.0,<4.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/cleo?source=hash-mapping - size: 60988 - timestamp: 1734693824408 -- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 - md5: ea8a6c3256897cc31263de9f455e25d9 - depends: - - python >=3.10 - - __unix - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/click?source=hash-mapping - size: 97676 - timestamp: 1764518652276 -- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 - md5: 962b9857ee8e7018c22f2776ffa0b2d7 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/colorama?source=hash-mapping - size: 27011 - timestamp: 1733218222191 -- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - noarch: generic - sha256: 7636809bda35add7af66cda1fee156136fcba0a1e24bbef1d591ee859df755a8 - md5: 9a4b8a37303b933b847c14a310f0557b - depends: - - python >=3.13,<3.14.0a0 - - python_abi * *_cp313 - license: Python-2.0 - purls: [] - size: 48648 - timestamp: 1770270374831 -- conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda - sha256: af1622b15f8c7411d9c14b8adf970cec16fec8a28b98069fdf42b1cd2259ccc9 - md5: e036e2f76d9c9aebc12510ed23352b6c - depends: - - python >=3.9,<4.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/crashtest?source=hash-mapping - size: 11619 - timestamp: 1733564888371 -- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda - sha256: 553f4ee18ad755d690ad63fa8e00d89598ecc4945ec046a8af808ddee5bb1ca0 - md5: 964f25e322b16cae073da8f5b7adf123 - depends: - - __glibc >=2.17,<3.0.a0 - - cffi >=1.14 - - libgcc >=14 - - openssl >=3.5.5,<4.0a0 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT - license_family: BSD - purls: - - pkg:pypi/cryptography?source=compressed-mapping - size: 1718868 - timestamp: 1770772833949 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda - sha256: f799fc4ceb2b20bce5b7bbe4038c4fc273fb49d8ccc5d4bd7d34b434fd790ed0 - md5: 9f017a0f98d0efb83e04a5ce9f01598e - depends: - - cffi >=1.14 - - libgcc >=14 - - openssl >=3.5.5,<4.0a0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT - license_family: BSD - purls: - - pkg:pypi/cryptography?source=hash-mapping - size: 1710168 - timestamp: 1770772502541 -- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda - sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 - md5: ce96f2f470d39bd96ce03945af92e280 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - libglib >=2.86.2,<3.0a0 - - libexpat >=2.7.3,<3.0a0 - license: AFL-2.1 OR GPL-2.0-or-later - purls: [] - size: 447649 - timestamp: 1764536047944 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda - sha256: 3af801577431af47c0b72a82bb93c654f03072dece0a2a6f92df8a6802f52a22 - md5: a4b6b82427d15f0489cef0df2d82f926 - depends: - - libstdcxx >=14 - - libgcc >=14 - - libglib >=2.86.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - license: AFL-2.1 OR GPL-2.0-or-later - purls: [] - size: 480416 - timestamp: 1764536098891 -- conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda - sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e - md5: 003b8ba0a94e2f1e117d0bd46aebc901 - depends: - - python >=3.9 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/distlib?source=hash-mapping - size: 275642 - timestamp: 1752823081585 -- conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda - sha256: ef1e7b8405997ed3d6e2b6722bd7088d4a8adf215e7c88335582e65651fb4e05 - md5: d73fdc05f10693b518f52c994d748c19 - depends: - - python >=3.10,<4.0.0 - - sniffio - - python - constrains: - - aioquic >=1.2.0 - - cryptography >=45 - - httpcore >=1.0.0 - - httpx >=0.28.0 - - h2 >=4.2.0 - - idna >=3.10 - - trio >=0.30 - - wmi >=1.5.1 - license: ISC - purls: - - pkg:pypi/dnspython?source=hash-mapping - size: 196500 - timestamp: 1757292856922 -- conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda - sha256: d6954ebd80fba1fdaa8e9e11c9106587eba34c87fb5b2d5ea6a23f000d344d35 - md5: 937c48f60a79d07cd54890a7483e8ba1 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - urllib3 >=1.25 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/dulwich?source=hash-mapping - size: 953624 - timestamp: 1728583364189 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda - sha256: 5f75a587de1f06f3177b6c6675c4d9c1b408600211ce6d3a753c9a1ed90096c9 - md5: 79dec55701f02ad2fc15447cee1cba27 - depends: - - libgcc >=13 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - - urllib3 >=1.25 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/dulwich?source=hash-mapping - size: 954785 - timestamp: 1728583538300 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda - sha256: 543d8ba4b8cd1f39622ac1306e89493af15f29dfe9cf08b2e33fca82e14e29d6 - md5: 0574cb5f1ff2e7fbfedf33d9c16f521c - depends: - - __osx >=11.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - - urllib3 >=1.25 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/dulwich?source=hash-mapping - size: 953265 - timestamp: 1728583634446 -- conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - sha256: c37320864c35ef996b0e02e289df6ee89582d6c8e233e18dc9983375803c46bb - md5: 3bc0ac31178387e8ed34094d9481bfe8 - depends: - - dnspython >=2.0.0 - - idna >=2.0.0 - - python >=3.10 - license: Unlicense - purls: - - pkg:pypi/email-validator?source=hash-mapping - size: 46767 - timestamp: 1756221480106 -- conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - sha256: 6a518e00d040fcad016fb2dde29672aa3476cd9ae33ea5b7b257222e66037d89 - md5: 2452e434747a6b742adc5045f2182a8e - depends: - - email-validator >=2.3.0,<2.3.1.0a0 - license: Unlicense - purls: [] - size: 7077 - timestamp: 1756221480651 -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - name: emberjson - version: 0.3.1 - build: h60d57d3_0 - subdir: osx-arm64 - variants: - target_platform: osx-arm64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - name: emberjson - version: 0.3.1 - build: hb0f4dca_0 - subdir: linux-64 - variants: - target_platform: linux-64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - name: emberjson - version: 0.3.1 - build: he8cfe8b_0 - subdir: linux-aarch64 - variants: - target_platform: linux-aarch64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null -- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 - md5: 8e662bd460bda79b1ea39194e3c4c9ab - depends: - - python >=3.10 - - typing_extensions >=4.6.0 - license: MIT and PSF-2.0 - purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 21333 - timestamp: 1763918099466 -- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - sha256: e8d77c988041d0dd56d6d89c82b5021400992c176341e901d6f7465863db92c4 - md5: 507d65b6f5dfcc13a9cc0ee18b497d09 - depends: - - fastapi-core ==0.127.1 pyhcf101f3_0 - - email_validator - - fastapi-cli - - httpx - - jinja2 - - pydantic-settings - - pydantic-extra-types - - python-multipart - - uvicorn-standard - license: MIT - license_family: MIT - purls: [] - size: 4807 - timestamp: 1766768870506 -- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - sha256: cb60fc8c96dcd2a6335914d4d6d7d5f5549c9e1ff4533be28ba699e648babf37 - md5: 442ec6511754418c87a84bc1dc0c5384 - depends: - - python >=3.10 - - rich-toolkit >=0.14.8 - - tomli >=2.0.0 - - typer >=0.15.1 - - uvicorn-standard >=0.15.0 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/fastapi-cli?source=hash-mapping - size: 18920 - timestamp: 1771293215825 -- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - sha256: f9059587f6161f0cbd62c600f17d9164aa1e6062fda2f7a68f010dbf257b7c56 - md5: 8d9e16861f5a037242d78e194c8d0b57 - depends: - - python >=3.10 - - annotated-doc >=0.0.2 - - starlette >=0.40.0,<0.51.0 - - typing_extensions >=4.8.0 - - pydantic >=2.7.0 - - python - constrains: - - email_validator >=2.0.0 - - fastapi-cli >=0.0.8 - - httpx >=0.23.0,<1.0.0 - - jinja2 >=3.1.5 - - pydantic-extra-types >=2.0.0 - - pydantic-settings >=2.0.0 - - python-multipart >=0.0.18 - - uvicorn-standard >=0.12.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/fastapi?source=hash-mapping - size: 89283 - timestamp: 1766768870504 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - sha256: 6d576ed3bd0e7c57b1144f0b2014de9ea3fab9786316bc3e748105d44e0140a0 - md5: 9dbb20eec24beb026291c20a35ce1ff9 - depends: - - python >=3.10 - license: Unlicense - purls: - - pkg:pypi/filelock?source=compressed-mapping - size: 24808 - timestamp: 1771468713029 -- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb - md5: b8993c19b0c32a2f7b66cbb58ca27069 - depends: - - python >=3.10 - - typing_extensions - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/h11?source=compressed-mapping - size: 39069 - timestamp: 1767729720872 -- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 - md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 - depends: - - python >=3.10 - - hyperframe >=6.1,<7 - - hpack >=4.1,<5 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/h2?source=hash-mapping - size: 95967 - timestamp: 1756364871835 -- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda - sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba - md5: 0a802cb9888dd14eeefc611f05c40b6e - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/hpack?source=hash-mapping - size: 30731 - timestamp: 1737618390337 -- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda - sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b - md5: 4f14640d58e2cc0aa0819d9d8ba125bb - depends: - - python >=3.9 - - h11 >=0.16 - - h2 >=3,<5 - - sniffio 1.* - - anyio >=4.0,<5.0 - - certifi - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/httpcore?source=hash-mapping - size: 49483 - timestamp: 1745602916758 -- conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.7.1-py313h07c4f96_1.conda - sha256: 0d549eca227e015b272c33646cdaed34d4619f6fe6d6196e2fddc31ec5144df9 - md5: 98e227930f49172e4f44ae8063341b0e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/httptools?source=hash-mapping - size: 98479 - timestamp: 1762504150954 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.7.1-py313h6194ac5_1.conda - sha256: 3f626ee931ff4dab97c423575141a5479a0f85359a2a85e40782461d1f300929 - md5: 3bcdc18bbf06931f4d3238551ff8cf23 - depends: - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/httptools?source=hash-mapping - size: 96680 - timestamp: 1762504216568 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.7.1-py313h6535dbc_1.conda - sha256: 96a97f65ebf4944b94a5a7cac5da5b0f63b407de8a896567d1b7374cf2516071 - md5: c5a14118255fb5dea8ca89a330e5a231 - depends: - - __osx >=11.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/httptools?source=hash-mapping - size: 90169 - timestamp: 1762504332321 -- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 - md5: d6989ead454181f4f9bc987d3dc4e285 - depends: - - anyio - - certifi - - httpcore 1.* - - idna - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/httpx?source=hash-mapping - size: 63082 - timestamp: 1733663449209 -- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 - md5: 8e6923fc12f1fe8f8c4e5c9f343256ac - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/hyperframe?source=hash-mapping - size: 17397 - timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 - md5: 186a18e3ba246eccfc7cff00cd19a870 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - purls: [] - size: 12728445 - timestamp: 1767969922681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hb1525cb_0.conda - sha256: 09f7f9213eb68e7e4291cd476e72b37f3ded99ed957528567f32f5ba6b611043 - md5: 15b35dc33e185e7d2aac1cfcd6778627 - depends: - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - purls: [] - size: 12852963 - timestamp: 1767975394622 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-h38cb7af_0.conda - sha256: d4cefbca587429d1192509edc52c88de52bc96c2447771ddc1f8bee928aed5ef - md5: 1e93aca311da0210e660d2247812fa02 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 12358010 - timestamp: 1767970350308 -- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 - md5: 53abe63df7e10a6ba605dc5f9f961d36 - depends: - - python >=3.10 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/idna?source=hash-mapping - size: 50721 - timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 - md5: 63ccfdc3a3ce25b027b8767eb722fca8 - depends: - - python >=3.9 - - zipp >=3.20 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/importlib-metadata?source=hash-mapping - size: 34641 - timestamp: 1747934053147 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 - md5: c85c76dc67d75619a92f51dfbce06992 - depends: - - python >=3.9 - - zipp >=3.1.0 - constrains: - - importlib-resources >=6.5.2,<6.5.3.0a0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/importlib-resources?source=hash-mapping - size: 33781 - timestamp: 1736252433366 -- conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - sha256: 13b0005877f553eb2e5c50447c9d0047e7257124ec2d1569d7dad35697790237 - md5: 55a61979242077b2cc377c74326ea9f0 - depends: - - importlib-metadata >=4.6.0 - - python >=3.10,<4.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/isort?source=hash-mapping - size: 74876 - timestamp: 1760192714356 -- conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - sha256: 3cc991f0f09dfd00d2626e745ba68da03e4f1dcbb7b36dd20f7a7373643cd5d5 - md5: d59568bad316413c89831456e691de29 - depends: - - python >=3.10 - - more-itertools - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/jaraco-classes?source=hash-mapping - size: 14831 - timestamp: 1767294269456 -- conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda - sha256: 00d37d85ca856431c67c8f6e890251e7cc9e5ef3724a0302b8d4a101f22aa27f - md5: b4b91eb14fbe2f850dd2c5fc20676c0d - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/jeepney?source=hash-mapping - size: 40015 - timestamp: 1740828380668 -- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b - md5: 04558c96691bed63104678757beb4f8d - depends: - - markupsafe >=2.0 - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jinja2?source=compressed-mapping - size: 120685 - timestamp: 1764517220861 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a - md5: 4ebae00eae9705b0c3d6d1018a81d047 - depends: - - importlib-metadata >=4.8.3 - - jupyter_core >=4.12,!=5.0.* - - python >=3.9 - - python-dateutil >=2.8.2 - - pyzmq >=23.0 - - tornado >=6.2 - - traitlets >=5.3 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-client?source=hash-mapping - size: 106342 - timestamp: 1733441040958 -- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a - md5: b38fe4e78ee75def7e599843ef4c1ab0 - depends: - - __unix - - python - - platformdirs >=2.5 - - python >=3.10 - - traitlets >=5.3 - - python - constrains: - - pywin32 >=300 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/jupyter-core?source=hash-mapping - size: 65503 - timestamp: 1760643864586 -- conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyh534df25_1.conda - sha256: 45e766c67b5102e786d800f62dcbf0240997d90febcc437fb5566d1a76a5aa0f - md5: 3b82d63a01a6bfe5159f9f287672230b - depends: - - __osx - - importlib-metadata >=4.11.4 - - importlib_resources - - jaraco.classes - - python >=3.8 - license: MIT - license_family: MIT - purls: - - pkg:pypi/keyring?source=hash-mapping - size: 36466 - timestamp: 1728574973482 -- conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - sha256: ce92b6e29a6801ebe6665e731e609ab1b05645bceae8a6efcd8edae44fa82452 - md5: b316b0f73ba0ab970d45b179e0c4c041 - depends: - - __linux - - importlib-metadata >=4.11.4 - - importlib_resources - - jaraco.classes - - jeepney >=0.4.2 - - python >=3.8 - - secretstorage >=3.2 - license: MIT - license_family: MIT - purls: - - pkg:pypi/keyring?source=hash-mapping - size: 36220 - timestamp: 1728574952762 -- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 - md5: b38117a3c920364aff79f870c984b4a3 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: LGPL-2.1-or-later - purls: [] - size: 134088 - timestamp: 1754905959823 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - sha256: 5ce830ca274b67de11a7075430a72020c1fb7d486161a82839be15c2b84e9988 - md5: e7df0aab10b9cbb73ab2a467ebfaf8c7 - depends: - - libgcc >=13 - license: LGPL-2.1-or-later - purls: [] - size: 129048 - timestamp: 1754906002667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 - md5: 3f43953b7d3fb3aaa1d0d0723d91e368 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1370023 - timestamp: 1719463201255 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - sha256: 0ec272afcf7ea7fbf007e07a3b4678384b7da4047348107b2ae02630a570a815 - md5: 29c10432a2ca1472b53f299ffb2ffa37 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1474620 - timestamp: 1719463205834 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b - md5: c6dc8a0fdec13a0565936655c33069a1 - depends: - - __osx >=11.0 - - libcxx >=16 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1155530 - timestamp: 1719463474401 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 - md5: 12bd9a3f089ee6c9266a37dab82afabd - depends: - - __glibc >=2.17,<3.0.a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-64 2.45.1 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 725507 - timestamp: 1770267139900 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 - md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 - depends: - - zstd >=1.5.7,<1.6.0a0 - constrains: - - binutils_impl_linux-aarch64 2.45.1 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 875924 - timestamp: 1770267209884 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - build_number: 5 - sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c - md5: c160954f7418d7b6e87eaf05a8913fa9 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - liblapack 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18213 - timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - build_number: 5 - sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 - md5: 5afcea37a46f76ec1322943b3c4dfdc0 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - mkl <2026 - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18369 - timestamp: 1765818610617 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - build_number: 5 - sha256: 620a6278f194dcabc7962277da6835b1e968e46ad0c8e757736255f5ddbfca8d - md5: bcc025e2bbaf8a92982d20863fe1fb69 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 - constrains: - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - mkl <2026 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18546 - timestamp: 1765819094137 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - build_number: 5 - sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 - md5: 6636a2b6f1a87572df2970d3ebc87cc0 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapack 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18194 - timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - build_number: 5 - sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 - md5: 0b2f1143ae2d0aa4c991959d0daaf256 - depends: - - libblas 3.11.0 5_haddc8a3_openblas - constrains: - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18371 - timestamp: 1765818618899 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - build_number: 5 - sha256: 38809c361bbd165ecf83f7f05fae9b791e1baa11e4447367f38ae1327f402fc0 - md5: efd8bd15ca56e9d01748a3beab8404eb - depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - blas 2.305 openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18548 - timestamp: 1765819108956 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb - md5: e9c56daea841013e7774b5cd46f41564 - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 568910 - timestamp: 1772001095642 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 - md5: c277e0a4d549b03ac1e9d6cbbe3d017b - depends: - - ncurses - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 134676 - timestamp: 1738479519902 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - sha256: c0b27546aa3a23d47919226b3a1635fccdb4f24b94e72e206a751b33f46fd8d6 - md5: fb640d776fc92b682a14e001980825b1 - depends: - - ncurses - - libgcc >=13 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 148125 - timestamp: 1738479808948 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 - md5: 44083d2d2c2025afca315c7a172eab2b - depends: - - ncurses - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 107691 - timestamp: 1738479560845 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 - md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT - purls: [] - size: 76798 - timestamp: 1771259418166 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 - md5: 57f3b3da02a50a1be2a6fe847515417d - depends: - - libgcc >=14 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT - purls: [] - size: 76564 - timestamp: 1771259530958 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf - md5: a92e310ae8dfc206ff449f362fc4217f - depends: - - __osx >=11.0 - constrains: - - expat 2.7.4.* - license: MIT - license_family: MIT - purls: [] - size: 68199 - timestamp: 1771260020767 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 - md5: a360c33a5abe61c07959e449fa1453eb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 58592 - timestamp: 1769456073053 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 - md5: 2f364feefb6a7c00423e80dcb12db62a - depends: - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 55952 - timestamp: 1769456078358 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 - md5: 43c04d9cb46ef176bb2a4c77e324d599 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 40979 - timestamp: 1769456747661 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 - md5: 0aa00f03f9e39fb9876085dee11a85d4 - depends: - - __glibc >=2.17,<3.0.a0 - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 he0feb66_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1041788 - timestamp: 1771378212382 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 - md5: 552567ea2b61e3a3035759b2fdb3f9a6 - depends: - - _openmp_mutex >=4.5 - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 h8acb6b2_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 622900 - timestamp: 1771378128706 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e - md5: 92df6107310b1fff92c4cc84f0de247b - depends: - - _openmp_mutex - constrains: - - libgcc-ng ==15.2.0=*_18 - - libgomp 15.2.0 18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 401974 - timestamp: 1771378877463 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 - md5: d5e96b1ed75ca01906b3d2469b4ce493 - depends: - - libgcc 15.2.0 he0feb66_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27526 - timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f - md5: 4feebd0fbf61075a1a9c2e9b3936c257 - depends: - - libgcc 15.2.0 h8acb6b2_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27568 - timestamp: 1771378136019 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee - md5: 9063115da5bc35fdc3e1002e69b9ef6e - depends: - - libgfortran5 15.2.0 h68bc16d_18 - constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27523 - timestamp: 1771378269450 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 - md5: 41f261f5e4e2e8cbd236c2f1f15dae1b - depends: - - libgfortran5 15.2.0 h1b7bec0_18 - constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27587 - timestamp: 1771378169244 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 - md5: 26981599908ed2205366e8fc91b37fc6 - depends: - - libgfortran5 15.2.0 hdae7583_18 - constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 138973 - timestamp: 1771379054939 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 - md5: 646855f357199a12f02a87382d429b75 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 2482475 - timestamp: 1771378241063 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 - md5: 574d88ce3348331e962cfa5ed451b247 - depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 1486341 - timestamp: 1771378148102 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e - md5: c4a6f7989cffb0544bfd9207b6789971 - depends: - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 598634 - timestamp: 1771378886363 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce - md5: bb26456332b07f68bf3b7622ed71c0da - depends: - - __glibc >=2.17,<3.0.a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - constrains: - - glib 2.86.4 *_1 - license: LGPL-2.1-or-later - purls: [] - size: 4398701 - timestamp: 1771863239578 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec - md5: 4ac4372fc4d7f20630a91314cdac8afd - depends: - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - pcre2 >=10.47,<10.48.0a0 - constrains: - - glib 2.86.4 *_1 - license: LGPL-2.1-or-later - purls: [] - size: 4512186 - timestamp: 1771863220969 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 - md5: 239c5e9546c38a1e884d69effcf4c882 - depends: - - __glibc >=2.17,<3.0.a0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 603262 - timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 - md5: 4faa39bf919939602e594253bd673958 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 588060 - timestamp: 1771378040807 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f - md5: 915f5995e94f60e9a4826e0b0920ee88 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: LGPL-2.1-only - purls: [] - size: 790176 - timestamp: 1754908768807 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - sha256: 1473451cd282b48d24515795a595801c9b65b567fe399d7e12d50b2d6cdb04d9 - md5: 5a86bf847b9b926f3a4f203339748d78 - depends: - - libgcc >=14 - license: LGPL-2.1-only - purls: [] - size: 791226 - timestamp: 1754910975665 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - build_number: 5 - sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 - md5: b38076eb5c8e40d0106beda6f95d7609 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas - constrains: - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18200 - timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - build_number: 5 - sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 - md5: 88d1e4133d1182522b403e9ba7435f04 - depends: - - libblas 3.11.0 5_haddc8a3_openblas - constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - libcblas 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18392 - timestamp: 1765818627104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - build_number: 5 - sha256: 735a6e6f7d7da6f718b6690b7c0a8ae4815afb89138aa5793abe78128e951dbb - md5: ca9d752201b7fa1225bca036ee300f2b - depends: - - libblas 3.11.0 5_h51639a9_openblas - constrains: - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18551 - timestamp: 1765819121855 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb - md5: c7c83eecbb72d88b940c249af56c8b17 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 113207 - timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 - md5: 96944e3c92386a12755b94619bae0b35 - depends: - - libgcc >=14 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 125916 - timestamp: 1768754941722 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e - md5: 009f0d956d7bfb00de86901d16e486c7 - depends: - - __osx >=11.0 - constrains: - - xz 5.8.2.* - license: 0BSD - purls: [] - size: 92242 - timestamp: 1768752982486 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 - md5: 2c21e66f50753a083cbe6b80f38268fa - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 92400 - timestamp: 1769482286018 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 - md5: 7b9813e885482e3ccb1fa212b86d7fd0 - depends: - - libgcc >=14 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 114056 - timestamp: 1769482343003 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 - md5: 57c4be259f5e0b99a5983799a228ae55 - depends: - - __osx >=11.0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 73690 - timestamp: 1769482560514 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 - md5: be43915efc66345cccb3c310b6ed0374 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 5927939 - timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 - md5: 11d7d57b7bdd01da745bbf2b67020b2e - depends: - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4959359 - timestamp: 1763114173544 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - sha256: ebbbc089b70bcde87c4121a083c724330f02a690fb9d7c6cd18c30f1b12504fa - md5: a6f6d3a31bb29e48d37ce65de54e2df0 - depends: - - __osx >=11.0 - - libgfortran - - libgfortran5 >=14.3.0 - - llvm-openmp >=19.1.7 - constrains: - - openblas >=0.3.30,<0.3.31.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4284132 - timestamp: 1768547079205 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 - md5: a587892d3c13b6621a6091be690dbca2 - depends: - - libgcc-ng >=12 - license: ISC - purls: [] - size: 205978 - timestamp: 1716828628198 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - sha256: 448df5ea3c5cf1af785aad46858d7a5be0522f4234a4dc9bb764f4d11ff3b981 - md5: 2e4a8f23bebdcb85ca8e5a0fbe75666a - depends: - - libgcc-ng >=12 - license: ISC - purls: [] - size: 177394 - timestamp: 1716828514515 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 - md5: a7ce36e284c5faaf93c220dfc39e3abd - depends: - - __osx >=11.0 - license: ISC - purls: [] - size: 164972 - timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 - md5: da5be73701eecd0e8454423fd6ffcf30 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 942808 - timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b - md5: 4e3ba0d5d192f99217b85f07a0761e64 - depends: - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 944688 - timestamp: 1768147991301 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 - md5: 4b0bf313c53c3e89692f020fb55d5f2c - depends: - - __osx >=11.0 - - icu >=78.2,<79.0a0 - - libzlib >=1.3.1,<2.0a0 - license: blessing - purls: [] - size: 909777 - timestamp: 1768148320535 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e - md5: 1b08cd684f34175e4514474793d44bcb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc 15.2.0 he0feb66_18 - constrains: - - libstdcxx-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 5852330 - timestamp: 1771378262446 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 - md5: f56573d05e3b735cb03efeb64a15f388 - depends: - - libgcc 15.2.0 h8acb6b2_18 - constrains: - - libstdcxx-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 5541411 - timestamp: 1771378162499 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 - md5: 6235adb93d064ecdf3d44faee6f468de - depends: - - libstdcxx 15.2.0 h934c35e_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27575 - timestamp: 1771378314494 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 - md5: 699d294376fe18d80b7ce7876c3a875d - depends: - - libstdcxx 15.2.0 hef695bb_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27645 - timestamp: 1771378204663 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee - md5: db409b7c1720428638e7c0d509d3e1b5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 40311 - timestamp: 1766271528534 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 - md5: cf2861212053d05f27ec49c3784ff8bb - depends: - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 43453 - timestamp: 1766271546875 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b - md5: 0f03292cc56bf91a077a134ea8747118 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 895108 - timestamp: 1753948278280 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - sha256: 7a0fb5638582efc887a18b7d270b0c4a6f6e681bf401cab25ebafa2482569e90 - md5: 8e62bf5af966325ee416f19c6f14ffa3 - depends: - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 629238 - timestamp: 1753948296190 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 - md5: c0d87c3c8e075daf1daf6c31b53e8083 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 421195 - timestamp: 1753948426421 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 60963 - timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 66657 - timestamp: 1727963199518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 - depends: - - __osx >=11.0 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 46438 - timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - sha256: 0daeedb3872ad0fdd6f0d7e7165c63488e8a315d7057907434145fba0c1e7b3d - md5: ff0820b5588b20be3b858552ecf8ffae - depends: - - __osx >=11.0 - constrains: - - openmp 22.1.0|22.1.0.* - - intel-openmp <0.0a0 - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 285558 - timestamp: 1772028716784 -- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e - md5: 5b5203189eb668f042ac2b0826244964 - depends: - - mdurl >=0.1,<1 - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/markdown-it-py?source=hash-mapping - size: 64736 - timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - sha256: a530a411bdaaf0b1e4de8869dfaca46cb07407bc7dc0702a9e231b0e5ce7ca85 - md5: c14389156310b8ed3520d84f854be1ee - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 25909 - timestamp: 1759055357045 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - sha256: c03eb8f5a4659ce31e698a328372f6b0357644d557ea0dc01fe0c5897c231c48 - md5: 59fc93a010d6e8a08a4fa32424d86a82 - depends: - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 26403 - timestamp: 1759056219797 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - sha256: e06902a1bf370fdd4ada0a8c81c504868fdb7e9971b72c6bd395aa4e5a497bd2 - md5: 3df5979cc0b761dda0053ffdb0bca3ea - depends: - - __osx >=11.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - jinja2 >=3.0.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/markupsafe?source=hash-mapping - size: 25778 - timestamp: 1759055530601 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022605-release.conda - noarch: python - sha256: 72a2887ef8e4c7b4a5ab9e3e6d6db8238a2145540c8120fc98973bec75ac07b1 - md5: f3069aa55ebfcd5b63263547fe49a579 - depends: - - python >=3.10 - - click >=8.0.0 - - mypy_extensions >=0.4.3 - - packaging >=22.0 - - pathspec >=0.9.0 - - platformdirs >=2 - - tomli >=1.1.0 - license: MIT - size: 136290 - timestamp: 1772084669702 -- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 - md5: 592132998493b3ff25fd7479396e8351 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/mdurl?source=hash-mapping - size: 14465 - timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022605-release.conda - sha256: b968bc6386709d2c062470902fe009da07f99d277512fab1675611c4d2384a78 - md5: d31cdc59e710e52b0ec100b4598fe153 - depends: - - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022605 release - - mblack ==26.2.0.dev2026022605 release - - jupyter_client >=8.6.2,<8.7 - license: LicenseRef-Modular-Proprietary - size: 89023627 - timestamp: 1772084669702 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022605-release.conda - sha256: 301a00270ad91b2aa6b6ea7b79dfa9405878da8cbe8a151c280a791c57ac6a28 - md5: 045a30ff84c0f499edf9e9ccca11c4b0 - depends: - - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022605 release - - mblack ==26.2.0.dev2026022605 release - - jupyter_client >=8.6.2,<8.7 - license: LicenseRef-Modular-Proprietary - size: 87684193 - timestamp: 1772084699131 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022605-release.conda - sha256: 82fe87a17a1758f9fb9948cc7c1f59ad1c6a71f090f1422302ce75846e44dab6 - md5: 53e3f6c9501c7e7abe0f44a6e63598f0 - depends: - - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022605 release - - mblack ==26.2.0.dev2026022605 release - - jupyter_client >=8.6.2,<8.7 - license: LicenseRef-Modular-Proprietary - size: 75770079 - timestamp: 1772084832467 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - sha256: d31a30758b53d35a49a81606f08a64bf55913add7bb977a39511712f55291bd9 - md5: b9d7bf26f6dbf7e99b62bb655e49fe5b - depends: - - mojo-python ==0.26.2.0.dev2026022605 release - license: LicenseRef-Modular-Proprietary - size: 87873800 - timestamp: 1772084669701 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - sha256: 471fbb3b0efde86db363d43f288464f8ee65be6c67654abaa05432bfe1cbe3cf - md5: 20c9c528358a53c5ac3f384ba6c96dd7 - depends: - - mojo-python ==0.26.2.0.dev2026022605 release - license: LicenseRef-Modular-Proprietary - size: 85060013 - timestamp: 1772084699128 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022605-release.conda - sha256: dca0f02e5b4b2e87cb9758818b9df4505dcc9fe5656094db2a21819665591141 - md5: 9cc35db97e78d9dd7dcbb44adb967981 - depends: - - mojo-python ==0.26.2.0.dev2026022605 release - license: LicenseRef-Modular-Proprietary - size: 66366050 - timestamp: 1772084832441 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022605-release.conda - noarch: python - sha256: da7930a203f5ec0b0c15be58b0ee8c93e38e8c145dcb981c5adc1e700d9060d6 - md5: bf9d5a959d25f122867fee4201fada98 - depends: - - python - license: LicenseRef-Modular-Proprietary - size: 678729 - timestamp: 1772084669698 -- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a - md5: 32f78e9d06e8593bc4bbf1338da06f5f - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/more-itertools?source=hash-mapping - size: 69210 - timestamp: 1764487059562 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - sha256: fac37e267dd1d07527f0b078ffe000916e80e8c89cfe69d466f5775b88e93df2 - md5: cd1cfde0ea3bca6c805c73ffa988b12a - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 103129 - timestamp: 1762504205590 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - sha256: bb8be63d71f7a060dd69acaade9cc8141302df52a65a538ad3e2ee61d772b3e6 - md5: b55870c4ec681604a65f422cddd755a7 - depends: - - libgcc >=14 - - libstdcxx >=14 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 99460 - timestamp: 1762504133614 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - sha256: b4a7557abb838de3890ceee6c61f78540b4b8ce74f2a03c334d7df5d476f7faa - md5: 78bc73f3c5e84b432cdea463ea4e953e - depends: - - __osx >=11.0 - - libcxx >=19 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/msgpack?source=hash-mapping - size: 91725 - timestamp: 1762504404391 -- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 - md5: e9c622e0d00fa24a6292279af3ab6d06 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/mypy-extensions?source=hash-mapping - size: 11766 - timestamp: 1745776666688 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 - md5: 47e340acb35de30501a76c7c799c41d7 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - license: X11 AND BSD-3-Clause - purls: [] - size: 891641 - timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 - md5: 182afabe009dc78d8b73100255ee6868 - depends: - - libgcc >=13 - license: X11 AND BSD-3-Clause - purls: [] - size: 926034 - timestamp: 1738196018799 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 - md5: 068d497125e4bf8a66bf707254fff5ae - depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause - purls: [] - size: 797030 - timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda - sha256: 2eb8be25a7504f058a153a84be70471e0ebbf6bd0411ae2b6d34904b89d86fe3 - md5: ca9c6ba4beac38cb3d0a85afde27f94c - depends: - - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - liblapack >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.13.* *_cp313 - - libblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 8857152 - timestamp: 1770098515258 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda - sha256: 7acd65fef10bb9bb6385e154e3a55c60b3320b0886005bf93ef14f3ea027d4e9 - md5: b40ed3c04212930574f77fc500436106 - depends: - - python - - libgcc >=14 - - libstdcxx >=14 - - python 3.13.* *_cp313 - - python_abi 3.13.* *_cp313 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 7931090 - timestamp: 1770098524373 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda - sha256: 3e23ed9eb63d9ce4dc585aad6b65e0197d7e9f28877acf7114cc64f33763a420 - md5: e34e9c58a0ee3eca3def3bb477797621 - depends: - - python - - __osx >=11.0 - - python 3.13.* *_cp313 - - libcxx >=19 - - liblapack >=3.9.0,<4.0a0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 6925963 - timestamp: 1770098439599 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c - md5: f61eb8cd60ff9057122a3d338b99c00f - depends: - - __glibc >=2.17,<3.0.a0 - - ca-certificates - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3164551 - timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f - md5: 25f5885f11e8b1f075bccf4a2da91c60 - depends: - - ca-certificates - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3692030 - timestamp: 1769557678657 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 - md5: f4f6ad63f98f64191c3e77c5f5f29d76 - depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache - purls: [] - size: 3104268 - timestamp: 1769556384749 -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 - md5: b76541e68fea4d511b1ac46a28dcd2c6 - depends: - - python >=3.8 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=compressed-mapping - size: 72010 - timestamp: 1769093650580 -- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - sha256: 29ea20d0faf20374fcd61c25f6d32fb8e9a2c786a7f1473a0c3ead359470fbe1 - md5: 2908273ac396d2cd210a8127f5f1c0d6 - depends: - - python >=3.10 - license: MPL-2.0 - license_family: MOZILLA - purls: - - pkg:pypi/pathspec?source=hash-mapping - size: 53739 - timestamp: 1769677743677 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff - md5: 7a3bff861a6583f1889021facefc08b1 - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 1222481 - timestamp: 1763655398280 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - sha256: 04df2cee95feba440387f33f878e9f655521e69f4be33a0cd637f07d3d81f0f9 - md5: 1a30c42e32ca0ea216bd0bfe6f842f0b - depends: - - bzip2 >=1.0.8,<2.0a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 1166552 - timestamp: 1763655534263 -- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a - md5: d0d408b1f18883a944376da5cf8101ea - depends: - - ptyprocess >=0.5 - - python >=3.9 - license: ISC - purls: - - pkg:pypi/pexpect?source=hash-mapping - size: 53561 - timestamp: 1733302019362 -- conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - sha256: 353fd5a2c3ce31811a6272cd328874eb0d327b1eafd32a1e19001c4ad137ad3a - md5: dc702b2fae7ebe770aff3c83adb16b63 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pkginfo?source=hash-mapping - size: 30536 - timestamp: 1739984682585 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa - md5: 4fefefb892ce9cc1539405bec2f1a6cd - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs?source=compressed-mapping - size: 25643 - timestamp: 1771233827084 -- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda - sha256: c5ab8a98f25d6416ef40761db1d8f5cea3ea67a28051d3d17829347c63dede67 - md5: 669f9224d31f304bc632f346734d987a - depends: - - __osx - - cachecontrol >=0.14.0,<0.15.0 - - cachecontrol-with-filecache - - cleo >=2.1.0,<3.0.0 - - crashtest >=0.4.1,<0.5.0 - - dulwich >=0.21.2,<0.22.0 - - importlib-metadata >=4.4 - - keyring >=24.0.0,<25.0.0 - - packaging >=23.1 - - pexpect >=4.7.0,<5.0.0 - - pkginfo >=1.12.0,<2.0.0 - - platformdirs >=3.0.0,<5 - - poetry-core 1.9.1.* - - poetry-plugin-export >=1.6.0,<2.0.0 - - pyproject_hooks >=1.0.0,<2.0.0 - - python >=3.9,<4.0 - - python-build >=1.0.3,<2.0.0 - - python-fastjsonschema >=2.18.0,<3.0.0 - - python-installer >=0.7.0,<0.8.0 - - requests >=2.26.0,<3.0.0 - - requests-toolbelt >=1.0.0,<2.0.0 - - shellingham >=1.5.0,<2.0.0 - - tomli >=2.0.1,<3.0.0 - - tomlkit >=0.11.4,<1.0.0 - - trove-classifiers >=2022.5.19 - - virtualenv >=20.26.6,<21.0.0 - - xattr >=1.0.0,<2.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/poetry?source=hash-mapping - size: 168589 - timestamp: 1733685738546 -- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - sha256: 8d345b52a0ab7d1d223d52abb96743935dad7d4b20579819ffc0a53cab59f83c - md5: 528f30caa8073dc3d1dccaa1945d5d77 - depends: - - __linux - - cachecontrol >=0.14.0,<0.15.0 - - cachecontrol-with-filecache - - cleo >=2.1.0,<3.0.0 - - crashtest >=0.4.1,<0.5.0 - - dulwich >=0.21.2,<0.22.0 - - importlib-metadata >=4.4 - - keyring >=24.0.0,<25.0.0 - - packaging >=23.1 - - pexpect >=4.7.0,<5.0.0 - - pkginfo >=1.12.0,<2.0.0 - - platformdirs >=3.0.0,<5 - - poetry-core 1.9.1.* - - poetry-plugin-export >=1.6.0,<2.0.0 - - pyproject_hooks >=1.0.0,<2.0.0 - - python >=3.9,<4.0 - - python-build >=1.0.3,<2.0.0 - - python-fastjsonschema >=2.18.0,<3.0.0 - - python-installer >=0.7.0,<0.8.0 - - requests >=2.26.0,<3.0.0 - - requests-toolbelt >=1.0.0,<2.0.0 - - shellingham >=1.5.0,<2.0.0 - - tomli >=2.0.1,<3.0.0 - - tomlkit >=0.11.4,<1.0.0 - - trove-classifiers >=2022.5.19 - - virtualenv >=20.26.6,<21.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/poetry?source=hash-mapping - size: 167239 - timestamp: 1733685701827 -- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - sha256: 04cce51723798d47f32d53e551d2b85652e318f6d705c8c2d09c1c0cf42baf0f - md5: 87a1f8109aa3ac06bc0a5b93473914ee - depends: - - python >=3.9,<4.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/poetry-core?source=hash-mapping - size: 226099 - timestamp: 1733215885921 -- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda - sha256: e677b46d8c02723d7ea3910591eabf7b5ce3bf11d490f9bb78cf2edca049408a - md5: c4879582684cf4037f0aa20c81ab09cd - depends: - - poetry >=1.8.0,<3.0.0 - - poetry-core >=1.7.0,<3.0.0 - - python >=3.9,<4.0.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/poetry-plugin-export?source=hash-mapping - size: 16063 - timestamp: 1733564986275 -- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda - sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 - md5: 7d9daffbb8d8e0af0f769dbbcd173a54 - depends: - - python >=3.9 - license: ISC - purls: - - pkg:pypi/ptyprocess?source=hash-mapping - size: 19457 - timestamp: 1733302371990 -- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 - md5: 12c566707c80111f9799308d9e265aef - depends: - - python >=3.9 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pycparser?source=hash-mapping - size: 110100 - timestamp: 1733195786147 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d - md5: c3946ed24acdb28db1b5d63321dbca7d - depends: - - typing-inspection >=0.4.2 - - typing_extensions >=4.14.1 - - python >=3.10 - - typing-extensions >=4.6.1 - - annotated-types >=0.6.0 - - pydantic-core ==2.41.5 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic?source=hash-mapping - size: 340482 - timestamp: 1764434463101 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda - sha256: b15568ddc03bd33ea41610e5df951be4e245cd61957cbf8c2cfd12557f3d53b5 - md5: f27c39a1906771bbe56cd26a76bf0b8b - depends: - - python - - typing-extensions >=4.6.0,!=4.7.0 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-core?source=hash-mapping - size: 1940186 - timestamp: 1762989000579 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda - sha256: df87d763c450ca0dc7a916987674fe1db153e6713cc488cedb0997ad5e807e96 - md5: dd7a9ffb9145ce5651b10b846d41b8ef - depends: - - python - - typing-extensions >=4.6.0,!=4.7.0 - - python 3.13.* *_cp313 - - libgcc >=14 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-core?source=hash-mapping - size: 1824747 - timestamp: 1762989007285 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda - sha256: 08398c0599084837ba89d69db00b3d0973dc86d6519957dc6c1b480e2571451a - md5: eaeed566f6d88c0a08d73700b34be4a2 - depends: - - python - - typing-extensions >=4.6.0,!=4.7.0 - - python 3.13.* *_cp313 - - __osx >=11.0 - - python_abi 3.13.* *_cp313 - constrains: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-core?source=hash-mapping - size: 1778337 - timestamp: 1762989007829 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda - sha256: 6a25f3b7a92833534eb9d09e3b4ba00195fbf459ec608d15dc9e31f81b67e972 - md5: 83984e3edee8f7312c0aa860682ee145 - depends: - - python >=3.10 - - pydantic >=2.5.2 - - python - constrains: - - phonenumbers >=8,<9 - - pycountry >=23 - - semver >=3.0.2,<4 - - python-ulid >=1,<4 - - pendulum >=3.0.0,<4.0.0 - - pytz >=2024.1 - - tzdata >=2024a - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-extra-types?source=hash-mapping - size: 68665 - timestamp: 1770023146886 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - sha256: 343988d65c08477a87268d4fbeba59d0295514143965d2755ac4519b73155479 - md5: cc0da73801948100ae97383b8da12993 - depends: - - pydantic >=2.7.0 - - python >=3.10 - - python-dotenv >=0.21.0 - - typing-inspection >=0.4.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pydantic-settings?source=compressed-mapping - size: 49319 - timestamp: 1771527313149 -- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a - md5: 6b6ece66ebcae2d5f326c77ef2c5a066 - depends: - - python >=3.9 - license: BSD-2-Clause - license_family: BSD - purls: - - pkg:pypi/pygments?source=hash-mapping - size: 889287 - timestamp: 1750615908735 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - sha256: 065ac44591da9abf1ff740feb25929554b920b00d09287a551fcced2c9791092 - md5: d4582021af437c931d7d77ec39007845 - depends: - - python >=3.9 - - tomli >=1.1.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyproject-hooks?source=hash-mapping - size: 15528 - timestamp: 1733710122949 -- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 - md5: 461219d1a5bd61342293efa2c0c90eac - depends: - - __unix - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pysocks?source=hash-mapping - size: 21085 - timestamp: 1733217331982 -- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - build_number: 100 - sha256: 8a08fe5b7cb5a28aa44e2994d18dbf77f443956990753a4ca8173153ffb6eb56 - md5: 4c875ed0e78c2d407ec55eadffb8cf3d - depends: - - __glibc >=2.17,<3.0.a0 - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.13.* *_cp313 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - license: Python-2.0 - purls: [] - size: 37364553 - timestamp: 1770272309861 - python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - build_number: 100 - sha256: a6bdf48a245d70526b4e6a277a4b344ec3f7c787b358e5377d544ac9a303c111 - md5: 732a86d6786402b95e1dc68c32022500 - depends: - - bzip2 >=1.0.8,<2.0a0 - - ld_impl_linux-aarch64 >=2.36.1 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - libgcc >=14 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libuuid >=2.41.3,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.13.* *_cp313 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - license: Python-2.0 - purls: [] - size: 33986700 - timestamp: 1770270924894 - python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - build_number: 100 - sha256: 9a4f16a64def0853f0a7b6a7beb40d498fd6b09bee10b90c3d6069b664156817 - md5: 179c0f5ae4f22bc3be567298ed0b17b9 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.7.3,<3.0a0 - - libffi >=3.5.2,<3.6.0a0 - - liblzma >=5.8.2,<6.0a0 - - libmpdec >=4.0.0,<5.0a0 - - libsqlite >=3.51.2,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.5.5,<4.0a0 - - python_abi 3.13.* *_cp313 - - readline >=8.3,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - license: Python-2.0 - purls: [] - size: 12770674 - timestamp: 1770272314517 - python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - sha256: 195e483a12bcec40b817f4001d4d4b8ea1cb2de66a62aeabfff6e32e29b3f407 - md5: dbbb75958b0b03842dcf9be2f200fc10 - depends: - - colorama - - importlib-metadata >=4.6 - - packaging >=19.0 - - pyproject_hooks - - python >=3.10 - - tomli >=1.1.0 - constrains: - - build <0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/build?source=hash-mapping - size: 26687 - timestamp: 1767988747352 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 - md5: 5b8d21249ff20967101ffa321cab24e8 - depends: - - python >=3.9 - - six >=1.5 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/python-dateutil?source=hash-mapping - size: 233310 - timestamp: 1751104122689 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 - md5: 083725d6cd3dc007f06d04bcf1e613a2 - depends: - - python >=3.10 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/python-dotenv?source=hash-mapping - size: 26922 - timestamp: 1761503229008 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8 - md5: 23029aae904a2ba587daba708208012f - depends: - - python >=3.9 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/fastjsonschema?source=hash-mapping - size: 244628 - timestamp: 1755304154927 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - sha256: f306304235197434494355351ac56020a65b7c5c56ff10ca1ed53356d575557a - md5: 3d92938d5b83c49162ade038aab58a59 - depends: - - cpython 3.13.12.* - - python_abi * *_cp313 - license: Python-2.0 - purls: [] - size: 48618 - timestamp: 1770270436560 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda - sha256: f1fc3e9561b6d3bee2f738f5b1818b51124f45a2b28b3bf6c2174d629276e069 - md5: e27480eebcdf247209e90da706ebef8d - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/installer?source=hash-mapping - size: 233096 - timestamp: 1733237431602 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda - sha256: 8275c88b0f138dbd602c53bae9a11789126c6a2c97f7e89f679d3e7ccbb121ba - md5: 5a2610edf297cbd1cbc0e2c17bc47efc - depends: - - python >=3.10 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/python-multipart?source=hash-mapping - size: 30342 - timestamp: 1769356329419 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda - build_number: 8 - sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 - md5: 94305520c52a4aa3f6c2b1ff6008d9f8 - constrains: - - python 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7002 - timestamp: 1752805902938 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda - sha256: ef7df29b38ef04ec67a8888a4aa039973eaa377e8c4b59a7be0a1c50cd7e4ac6 - md5: f256753e840c3cd3766488c9437a8f8b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=compressed-mapping - size: 201616 - timestamp: 1770223543730 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda - sha256: 9dbfdb53af5d27ac2eec5db4995979fdaaea76766d4f01cd3524dd7d24f79fb9 - md5: 14b86e046b0c5c5508602165287dd01c - depends: - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=compressed-mapping - size: 194182 - timestamp: 1770223431084 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda - sha256: 950725516f67c9691d81bb8dde8419581c5332c5da3da10c9ba8cbb1698b825d - md5: 5d0c8b92128c93027632ca8f8dc1190f - depends: - - __osx >=11.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - - yaml >=0.2.5,<0.3.0a0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pyyaml?source=compressed-mapping - size: 188763 - timestamp: 1770224094408 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - noarch: python - sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 - md5: 082985717303dab433c976986c674b35 - depends: - - python - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - zeromq >=4.3.5,<4.4.0a0 - - _python_abi3_support 1.* - - cpython >=3.12 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=compressed-mapping - size: 211567 - timestamp: 1771716961404 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - noarch: python - sha256: afdff66cb54e22d0d2c682731e08bb8f319dfd93f3cdcff4a4640cb5a8ae2460 - md5: 130d781798bb24a0b86290e65acd50d8 - depends: - - python - - libstdcxx >=14 - - libgcc >=14 - - zeromq >=4.3.5,<4.4.0a0 - - _python_abi3_support 1.* - - cpython >=3.12 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=compressed-mapping - size: 212585 - timestamp: 1771716963309 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - noarch: python - sha256: 2f31f799a46ed75518fae0be75ecc8a1b84360dbfd55096bc2fe8bd9c797e772 - md5: 2f6b79700452ef1e91f45a99ab8ffe5a - depends: - - python - - libcxx >=19 - - __osx >=11.0 - - _python_abi3_support 1.* - - cpython >=3.12 - - zeromq >=4.3.5,<4.4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pyzmq?source=compressed-mapping - size: 191641 - timestamp: 1771717073430 -- conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda - sha256: 010b7b1a9d05583c9a5e025247308c2fdb990f413367fc1414846d94b630e553 - md5: 87ec3a86d3c910b1d64ec7116e156d40 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - - numpy - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rapidfuzz?source=hash-mapping - size: 2134177 - timestamp: 1762523138625 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda - sha256: ad5c9a8f6c190edac98e1a57c43a0b2aeeb0d1ffc14021de28872a95cb060912 - md5: 4e3bca1b712f141abe1fdf035caf088b - depends: - - libgcc >=14 - - libstdcxx >=14 - - numpy - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rapidfuzz?source=hash-mapping - size: 988109 - timestamp: 1762522989961 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda - sha256: eb63475cd6e9bc309db56dc6425e72dd94e91dc0db8b442e8086770fdfcd8415 - md5: 36d9057a4c1d842410e97653dbba3d68 - depends: - - __osx >=11.0 - - libcxx >=19 - - numpy - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/rapidfuzz?source=hash-mapping - size: 707397 - timestamp: 1762523257854 -- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 - md5: d7d95fc8287ea7bf33e0e7116d2b95ec - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 345073 - timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 - md5: 3d49cad61f829f4f0e0611547a9cda12 - depends: - - libgcc >=14 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 357597 - timestamp: 1765815673644 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 - md5: f8381319127120ce51e081dce4865cf4 - depends: - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 313930 - timestamp: 1765813902568 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 - md5: c65df89a0b2e321045a9e01d1337b182 - depends: - - python >=3.10 - - certifi >=2017.4.17 - - charset-normalizer >=2,<4 - - idna >=2.5,<4 - - urllib3 >=1.21.1,<3 - - python - constrains: - - chardet >=3.0.2,<6 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/requests?source=compressed-mapping - size: 63602 - timestamp: 1766926974520 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - sha256: c0b815e72bb3f08b67d60d5e02251bbb0164905b5f72942ff5b6d2a339640630 - md5: 66de8645e324fda0ea6ef28c2f99a2ab - depends: - - python >=3.9 - - requests >=2.0.1,<3.0.0 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/requests-toolbelt?source=hash-mapping - size: 44285 - timestamp: 1733734886897 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 - md5: 7a6289c50631d620652f5045a63eb573 - depends: - - markdown-it-py >=2.2.0 - - pygments >=2.13.0,<3.0.0 - - python >=3.10 - - typing_extensions >=4.0.0,<5.0.0 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/rich?source=compressed-mapping - size: 208472 - timestamp: 1771572730357 -- conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - sha256: 9cf3b9a083ebdee70ef5a48fbe409d91d2a8c4eed3c581a7b33b4d5ca7c813be - md5: 8b1a4d854f9a4ea1e4abc93ccab0ded9 - depends: - - python >=3.10 - - rich >=13.7.1 - - click >=8.1.7 - - typing_extensions >=4.12.2 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/rich-toolkit?source=compressed-mapping - size: 32484 - timestamp: 1771977622605 -- conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda - sha256: 43ea89b53cbede879e57ac9dd20153c5cd2bb9575228e7faf5a8764aa6c201b7 - md5: 013a7d73eaef154f0dc5e415ffa8ff87 - depends: - - cryptography >=2.0 - - dbus - - jeepney >=0.6 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/secretstorage?source=hash-mapping - size: 32933 - timestamp: 1763045369115 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda - sha256: ee3c7b9ec4fc8b44ec2ddf0e6cf4f540bbb4981b44c0f6b35ef8af31ef185a46 - md5: c66928c2d97d7b553e6cc6698036214a - depends: - - cryptography >=2.0 - - dbus - - jeepney >=0.6 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/secretstorage?source=hash-mapping - size: 32795 - timestamp: 1763046232505 -- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - sha256: 1d6534df8e7924d9087bd388fbac5bd868c5bf8971c36885f9f016da0657d22b - md5: 83ea3a2ddb7a75c1b09cea582aa4f106 - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/shellingham?source=hash-mapping - size: 15018 - timestamp: 1762858315311 -- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d - md5: 3339e3b65d58accf4ca4fb8748ab16b3 - depends: - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/six?source=hash-mapping - size: 18455 - timestamp: 1753199211006 -- conda: ./small-time - name: small_time - version: 26.1.0 - build: h60d57d3_0 - subdir: osx-arm64 - variants: - target_platform: osx-arm64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 -- conda: ./small-time - name: small_time - version: 26.1.0 - build: hb0f4dca_0 - subdir: linux-64 - variants: - target_platform: linux-64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 -- conda: ./small-time - name: small_time - version: 26.1.0 - build: he8cfe8b_0 - subdir: linux-aarch64 - variants: - target_platform: linux-aarch64 - depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 -- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad - md5: 03fe290994c5e4ec17293cfb6bdce520 - depends: - - python >=3.10 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/sniffio?source=hash-mapping - size: 15698 - timestamp: 1762941572482 -- conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - sha256: ab9ab67faa3cf12f45f5ced316e2c50dc72b4046cd275612fae756fe9d4cf82c - md5: 68bcb398c375177cf117cf608c274f9d - depends: - - anyio >=3.6.2,<5 - - python >=3.10 - - typing_extensions >=4.10.0 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/starlette?source=hash-mapping - size: 64760 - timestamp: 1762016292582 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac - md5: cffd3bdd58090148f4cfcd831f4b26ab - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3301196 - timestamp: 1769460227866 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 - md5: 7fc6affb9b01e567d2ef1d05b84aa6ed - depends: - - libgcc >=14 - - libzlib >=1.3.1,<2.0a0 - constrains: - - xorg-libx11 >=1.8.12,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3368666 - timestamp: 1769464148928 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 - md5: a9d86bc62f39b94c4661716624eb21b0 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3127137 - timestamp: 1769460817696 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8 - md5: 72e780e9aa2d0a3295f59b1874e3768b - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/tomli?source=compressed-mapping - size: 21453 - timestamp: 1768146676791 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - sha256: b35082091c8efd084e51bc3a4a2d3b07897eff232aaf58cbc0f959b6291a6a93 - md5: 385dca77a8b0ec6fa9b92cb62d09b43b - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/tomlkit?source=hash-mapping - size: 39224 - timestamp: 1768476626454 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - sha256: 6006d4e5a6ff99be052c939e43adee844a38f2dc148f44a7c11aa0011fd3d811 - md5: 82da2dcf1ea3e298f2557b50459809e0 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 878109 - timestamp: 1765458900582 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - sha256: 06e69d338c1724a1340dc374c758fb75c36b069caa5a1994fbf461ae2d42e4fd - md5: 236667bf319279d8d0a9581ebb4337f0 - depends: - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 879449 - timestamp: 1765460007029 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - sha256: a8130a361b7bc21190836ba8889276cc263fcb09f52bf22efcaed1de98179948 - md5: 67a85c1b5c17124eaf9194206afd5159 - depends: - - __osx >=11.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 877647 - timestamp: 1765836696426 -- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 - md5: 019a7385be9af33791c989871317e1ed - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/traitlets?source=hash-mapping - size: 110051 - timestamp: 1733367480074 -- conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - sha256: 302d576f7e44fa13d2849b901772a04f1c2aabc5d6b6c7dcdc5a271bcffd50fe - md5: f5793a97363a42fd6a98f31f29537bbc - depends: - - python >=3.10 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/trove-classifiers?source=hash-mapping - size: 19707 - timestamp: 1768550221435 -- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda - sha256: e1116d08e6a55b2b42a090130c268f75211ad8e6a8e7749e977924de3864d487 - md5: 10870929f587540c5802cd9b071cba5c - depends: - - annotated-doc >=0.0.2 - - click >=8.2.1 - - python >=3.10 - - rich >=12.3.0 - - shellingham >=1.3.0 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/typer?source=hash-mapping - size: 117860 - timestamp: 1771292312899 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda - sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c - md5: edd329d7d3a4ab45dcf905899a7a6115 - depends: - - typing_extensions ==4.15.0 pyhcf101f3_0 - license: PSF-2.0 - license_family: PSF - purls: [] - size: 91383 - timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda - sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 - md5: a0a4a3035667fc34f29bfbd5c190baa6 - depends: - - python >=3.10 - - typing_extensions >=4.12.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/typing-inspection?source=hash-mapping - size: 18923 - timestamp: 1764158430324 -- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 - md5: 0caa1af407ecff61170c9437a808404d - depends: - - python >=3.10 - - python - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/typing-extensions?source=hash-mapping - size: 51692 - timestamp: 1756220668932 -- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c - md5: ad659d0a2b3e47e38d829aa8cad2d610 - license: LicenseRef-Public-Domain - purls: [] - size: 119135 - timestamp: 1767016325805 -- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a - md5: 9272daa869e03efe68833e3dc7a02130 - depends: - - backports.zstd >=1.0.0 - - brotli-python >=1.2.0 - - h2 >=4,<5 - - pysocks >=1.5.6,<2.0,!=1.5.7 - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/urllib3?source=hash-mapping - size: 103172 - timestamp: 1767817860341 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - sha256: 199731b8a86d18d89a9236225cf3e618aef467f628bc6f6bb2875a28f24f3dd4 - md5: 10d80692c8c9c05b7d4b0a1531208ad7 - depends: - - __unix - - click >=7.0 - - h11 >=0.8 - - python >=3.10 - - typing_extensions >=4.0 - - python - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/uvicorn?source=hash-mapping - size: 54913 - timestamp: 1771328143244 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - sha256: 034d62c37fadadafe8b5c923beaed2279d0f4ad8df731f3e86d12760fa33ccbc - md5: 2ada177289a251ffcfeae37e9f28dc3a - depends: - - __unix - - uvicorn ==0.41.0 pyhc90fa1f_0 - - websockets >=10.4 - - httptools >=0.6.3 - - watchfiles >=0.20 - - python-dotenv >=0.13 - - pyyaml >=5.1 - - uvloop >=0.15.1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4145 - timestamp: 1771328143246 -- conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda - sha256: 77a220ecf6c1467f94d6adda5fb1296f558f3f3044842dc0a52881eab5908dc0 - md5: 266caaa8701a13482ea924a77897b1e4 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libuv >=1.51.0,<2.0a0 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - license: MIT OR Apache-2.0 - purls: - - pkg:pypi/uvloop?source=hash-mapping - size: 590601 - timestamp: 1762472969139 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda - sha256: 707044205742d8df718d95538237910a18a9569dcdab304c1084389adb0d85d2 - md5: f19474201f37c32ec2043d6cec93f0b4 - depends: - - libgcc >=14 - - libuv >=1.51.0,<2.0a0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT OR Apache-2.0 - purls: - - pkg:pypi/uvloop?source=hash-mapping - size: 546630 - timestamp: 1762472897860 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda - sha256: 472568a70c0fb349b80af50e1a589f02b5a78a8fbe3ed1a9524dd7675750a677 - md5: 429a325aacea5f82b8af3a7fd7ad0220 - depends: - - __osx >=11.0 - - libuv >=1.51.0,<2.0a0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT OR Apache-2.0 - purls: - - pkg:pypi/uvloop?source=hash-mapping - size: 487912 - timestamp: 1762473054199 -- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - sha256: de93eed364f14f08f78ff41994dfe22ff018521c4702e432630d10c0eb0eff6b - md5: e73db224203e56b25e040446fa1584db - depends: - - python >=3.10 - - distlib >=0.3.7,<1 - - platformdirs >=3.9.1,<5 - - typing_extensions >=4.13.2 - - importlib-metadata >=6.6 - - filelock >=3.24.2,<4 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/virtualenv?source=hash-mapping - size: 4657721 - timestamp: 1771967166128 -- conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda - sha256: 11a07764137af9bcf29e9e26671c1be1ea1302f7dd7075a4d41481489883eaff - md5: 9373034735566df29779429f0c0de511 - depends: - - __glibc >=2.17,<3.0.a0 - - anyio >=3.0.0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/watchfiles?source=hash-mapping - size: 420641 - timestamp: 1760456759391 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda - sha256: 2bd26b15aac02063e469b2efbb7efc5499347940329011f6f8d40b287e1caa15 - md5: f276ef02ff6365c220d9f0a917c3b31f - depends: - - anyio >=3.0.0 - - libgcc >=14 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - __glibc >=2.17 - license: MIT - license_family: MIT - purls: - - pkg:pypi/watchfiles?source=hash-mapping - size: 411329 - timestamp: 1760456814453 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda - sha256: 6c3bb78efbaa8aa616ef9fe8ddb14dd2a3d06324f6c6f38f80f4653c7961b402 - md5: c059753f94e279e722fec0532d28b390 - depends: - - __osx >=11.0 - - anyio >=3.0.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - constrains: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: - - pkg:pypi/watchfiles?source=hash-mapping - size: 364700 - timestamp: 1760457647108 -- conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda - sha256: d34ed37a2164ec741d9bf067ce17496c97ee39bee826a8164a6ab226ab67826a - md5: 2181c860102f18623f51760d7bccec35 - depends: - - python - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/websockets?source=hash-mapping - size: 367335 - timestamp: 1768087395845 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda - sha256: 9bd2d2ecc82c7d2d2d3dfb517ae9455e86ac0f7894df116f4d87f2314bd9bf74 - md5: f8d99c863f246f225d7eb696e4a69061 - depends: - - python - - libgcc >=14 - - python 3.13.* *_cp313 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/websockets?source=hash-mapping - size: 371783 - timestamp: 1768087403426 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda - sha256: 79b6b445dd9848077963cf7fa5214ba17c6084128419affd51f91d0cd7e7d5ae - md5: 2491c4cb83885c7905941c97b3473d78 - depends: - - python - - python 3.13.* *_cp313 - - __osx >=11.0 - - python_abi 3.13.* *_cp313 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/websockets?source=hash-mapping - size: 371508 - timestamp: 1768087394531 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda - sha256: 10a4581f7e2aa43bdf956ab7d0e4884f879e94a5caada64a16a1ea64fc0521d0 - md5: 6649f27f9c01c0b72ed97870da34f9a0 - depends: - - __osx >=11.0 - - cffi >=1.0.0 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - - python_abi 3.13.* *_cp313 - license: MIT - license_family: MIT - purls: - - pkg:pypi/xattr?source=hash-mapping - size: 35887 - timestamp: 1762511351895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad - md5: a77f85f77be52ff59391544bfe73390a - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - license: MIT - license_family: MIT - purls: [] - size: 85189 - timestamp: 1753484064210 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - sha256: 66265e943f32ce02396ad214e27cb35f5b0490b3bd4f064446390f9d67fa5d88 - md5: 032d8030e4a24fe1f72c74423a46fb88 - depends: - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 88088 - timestamp: 1753484092643 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac - md5: 78a0fe9e9c50d2c381e8ee47e3ea437d - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 83386 - timestamp: 1753484079473 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - sha256: 47cfe31255b91b4a6fa0e9dbaf26baa60ac97e033402dbc8b90ba5fee5ffe184 - md5: 8035e5b54c08429354d5d64027041cad - depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libsodium >=1.0.20,<1.0.21.0a0 - - krb5 >=1.21.3,<1.22.0a0 - license: MPL-2.0 - license_family: MOZILLA - purls: [] - size: 310648 - timestamp: 1757370847287 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - sha256: 8a1efaf97a00d62d68939abe40f7a35ace8910eec777d5535b8c32d0079750bd - md5: 5676806bba055c901a62f969cb3fbe02 - depends: - - libstdcxx >=14 - - libgcc >=14 - - krb5 >=1.21.3,<1.22.0a0 - - libsodium >=1.0.20,<1.0.21.0a0 - license: MPL-2.0 - license_family: MOZILLA - purls: [] - size: 350254 - timestamp: 1757370867477 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - sha256: b6f9c130646e5971f6cad708e1eee278f5c7eea3ca97ec2fdd36e7abb764a7b8 - md5: 26f39dfe38a2a65437c29d69906a0f68 - depends: - - __osx >=11.0 - - libcxx >=19 - - libsodium >=1.0.20,<1.0.21.0a0 - - krb5 >=1.21.3,<1.22.0a0 - license: MPL-2.0 - license_family: MOZILLA - purls: [] - size: 244772 - timestamp: 1757371008525 -- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae - md5: 30cd29cb87d819caead4d55184c1d115 - depends: - - python >=3.10 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/zipp?source=hash-mapping - size: 24194 - timestamp: 1764460141901 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 - md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 - depends: - - __glibc >=2.17,<3.0.a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 601375 - timestamp: 1764777111296 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 - md5: c3655f82dcea2aa179b291e7099c1fcc - depends: - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 614429 - timestamp: 1764777145593 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 - md5: ab136e4c34e97f34fb621d2592a393d8 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 433413 - timestamp: 1764777166076 From 74e72d71f1a7f164754267fea964f7d2be9c19d7 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Feb 2026 13:23:45 +0100 Subject: [PATCH 03/27] fix register passable and pull small-time from git --- lightbug_http/address.mojo | 42 +- lightbug_http/c/address.mojo | 9 +- lightbug_http/c/network.mojo | 27 +- lightbug_http/c/socket.mojo | 9 +- lightbug_http/c/socket_error.mojo | 390 +- lightbug_http/connection.mojo | 12 +- lightbug_http/cookie/cookie.mojo | 3 +- lightbug_http/cookie/response_cookie_jar.mojo | 3 +- lightbug_http/header.mojo | 18 +- lightbug_http/http/parsing.mojo | 6 +- lightbug_http/server.mojo | 3 +- lightbug_http/socket.mojo | 9 +- pixi.lock | 4712 +++++++++++++++++ pixi.toml | 8 +- 14 files changed, 4893 insertions(+), 358 deletions(-) create mode 100644 pixi.lock diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index 7260e96d..446d9a18 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -266,8 +266,7 @@ struct UDPAddr[network: NetworkType = NetworkType.udp4](Addr, ImplicitlyCopyable @fieldwise_init -@register_passable("trivial") -struct addrinfo_macos(AnAddrInfo): +struct addrinfo_macos(AnAddrInfo, TrivialRegisterPassable): """ For MacOS, I had to swap the order of ai_canonname and ai_addr. https://stackoverflow.com/questions/53575101/calling-getaddrinfo-directly-from-python-ai-addr-is-null-pointer. @@ -307,8 +306,7 @@ struct addrinfo_macos(AnAddrInfo): @fieldwise_init -@register_passable("trivial") -struct addrinfo_unix(AnAddrInfo): +struct addrinfo_unix(AnAddrInfo, TrivialRegisterPassable): """Standard addrinfo struct for Unix systems. Overwrites the existing libc `getaddrinfo` function to adhere to the AnAddrInfo trait. """ @@ -429,8 +427,7 @@ fn is_ipv6(network: NetworkType) -> Bool: @fieldwise_init -@register_passable("trivial") -struct ParseEmptyAddressError(CustomError): +struct ParseEmptyAddressError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse address: received empty address string." fn write_to[W: Writer, //](self, mut writer: W): @@ -441,8 +438,7 @@ struct ParseEmptyAddressError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseMissingClosingBracketError(CustomError): +struct ParseMissingClosingBracketError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse ipv6 address: missing ']'" fn write_to[W: Writer, //](self, mut writer: W): @@ -453,8 +449,7 @@ struct ParseMissingClosingBracketError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseMissingPortError(CustomError): +struct ParseMissingPortError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse ipv6 address: missing port in address" fn write_to[W: Writer, //](self, mut writer: W): @@ -465,8 +460,7 @@ struct ParseMissingPortError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseUnexpectedBracketError(CustomError): +struct ParseUnexpectedBracketError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Address failed bracket validation, unexpectedly contained brackets" fn write_to[W: Writer, //](self, mut writer: W): @@ -477,8 +471,7 @@ struct ParseUnexpectedBracketError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseEmptyPortError(CustomError): +struct ParseEmptyPortError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse port: port string is empty." fn write_to[W: Writer, //](self, mut writer: W): @@ -489,8 +482,7 @@ struct ParseEmptyPortError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseInvalidPortNumberError(CustomError): +struct ParseInvalidPortNumberError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse port: invalid integer value." fn write_to[W: Writer, //](self, mut writer: W): @@ -501,8 +493,7 @@ struct ParseInvalidPortNumberError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParsePortOutOfRangeError(CustomError): +struct ParsePortOutOfRangeError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse port: Port number out of range (0-65535)." fn write_to[W: Writer, //](self, mut writer: W): @@ -513,8 +504,7 @@ struct ParsePortOutOfRangeError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseMissingSeparatorError(CustomError): +struct ParseMissingSeparatorError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse address: missing port separator ':' in address." fn write_to[W: Writer, //](self, mut writer: W): @@ -525,8 +515,7 @@ struct ParseMissingSeparatorError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseTooManyColonsError(CustomError): +struct ParseTooManyColonsError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: Failed to parse address: too many colons in address" fn write_to[W: Writer, //](self, mut writer: W): @@ -537,8 +526,7 @@ struct ParseTooManyColonsError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ParseIPProtocolPortError(CustomError): +struct ParseIPProtocolPortError(CustomError, TrivialRegisterPassable): comptime message = "ParseError: IP protocol addresses should not include ports" fn write_to[W: Writer, //](self, mut writer: W): @@ -551,8 +539,7 @@ struct ParseIPProtocolPortError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetaddrinfoNullAddrError(CustomError): +struct GetaddrinfoNullAddrError(CustomError, TrivialRegisterPassable): comptime message = "GetaddrinfoError: Failed to get IP address because the response's `ai_addr` was null." fn write_to[W: Writer, //](self, mut writer: W): @@ -563,8 +550,7 @@ struct GetaddrinfoNullAddrError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetaddrinfoError(CustomError): +struct GetaddrinfoError(CustomError, TrivialRegisterPassable): comptime message = "GetaddrinfoError: Failed to resolve address information." fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/c/address.mojo b/lightbug_http/c/address.mojo index 0cff7636..786ea62a 100644 --- a/lightbug_http/c/address.mojo +++ b/lightbug_http/c/address.mojo @@ -4,8 +4,7 @@ from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsaf @fieldwise_init -@register_passable("trivial") -struct AddressInformation(Copyable, Equatable, Stringable, Writable): +struct AddressInformation(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: c_int comptime AI_PASSIVE = Self(1) comptime AI_CANONNAME = Self(2) @@ -43,8 +42,7 @@ struct AddressInformation(Copyable, Equatable, Stringable, Writable): # TODO: These might vary on each platform...we should confirm this. # Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h#L250 @fieldwise_init -@register_passable("trivial") -struct AddressFamily(Copyable, Equatable, Stringable, Writable): +struct AddressFamily(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: c_int comptime AF_UNSPEC = Self(0) comptime AF_INET = Self(2) @@ -73,8 +71,7 @@ struct AddressFamily(Copyable, Equatable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct AddressLength(Copyable, Equatable, Stringable, Writable): +struct AddressLength(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: Int comptime INET_ADDRSTRLEN = Self(16) comptime INET6_ADDRSTRLEN = Self(46) diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index d3ceb4c8..e53e37e2 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -9,8 +9,7 @@ from utils import StaticTuple, Variant @fieldwise_init -@register_passable("trivial") -struct InetNtopEAFNOSUPPORTError(CustomError): +struct InetNtopEAFNOSUPPORTError(CustomError, TrivialRegisterPassable): comptime message = "inet_ntop Error (EAFNOSUPPORT): `*src` was not an `AF_INET` or `AF_INET6` family address." fn write_to[W: Writer, //](self, mut writer: W): @@ -21,8 +20,7 @@ struct InetNtopEAFNOSUPPORTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct InetNtopENOSPCError(CustomError): +struct InetNtopENOSPCError(CustomError, TrivialRegisterPassable): comptime message = "inet_ntop Error (ENOSPC): The buffer size was not large enough to store the presentation form of the address." fn write_to[W: Writer, //](self, mut writer: W): @@ -33,8 +31,7 @@ struct InetNtopENOSPCError(CustomError): @fieldwise_init -@register_passable("trivial") -struct InetPtonInvalidAddressError(CustomError): +struct InetPtonInvalidAddressError(CustomError, TrivialRegisterPassable): comptime message = "inet_pton Error: The input is not a valid address." fn write_to[W: Writer, //](self, mut writer: W): @@ -203,19 +200,16 @@ comptime in_port_t = c_ushort @fieldwise_init -@register_passable("trivial") -struct in_addr: +struct in_addr(TrivialRegisterPassable): var s_addr: in_addr_t @fieldwise_init -@register_passable("trivial") -struct in6_addr: +struct in6_addr(TrivialRegisterPassable): var s6_addr: StaticTuple[c_char, 16] -@register_passable("trivial") -struct sockaddr: +struct sockaddr(TrivialRegisterPassable): var sa_family: sa_family_t var sa_data: StaticTuple[c_char, 14] @@ -229,8 +223,7 @@ struct sockaddr: @fieldwise_init -@register_passable("trivial") -struct sockaddr_in: +struct sockaddr_in(TrivialRegisterPassable): var sin_family: sa_family_t var sin_port: in_port_t var sin_addr: in_addr @@ -251,8 +244,7 @@ struct sockaddr_in: @fieldwise_init -@register_passable("trivial") -struct sockaddr_in6: +struct sockaddr_in6(TrivialRegisterPassable): var sin6_family: sa_family_t var sin6_port: in_port_t var sin6_flowinfo: c_uint @@ -307,8 +299,7 @@ struct SocketAddress(Movable): @fieldwise_init -@register_passable("trivial") -struct addrinfo: +struct addrinfo(TrivialRegisterPassable): var ai_flags: c_int var ai_family: c_int var ai_socktype: c_int diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index a4bd4666..4085b4ae 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -8,8 +8,7 @@ from memory import stack_allocation @fieldwise_init -@register_passable("trivial") -struct ShutdownOption(Copyable, Equatable, Stringable, Writable): +struct ShutdownOption(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: c_int comptime SHUT_RD = Self(0) comptime SHUT_WR = Self(1) @@ -37,8 +36,7 @@ comptime SOL_SOCKET = 0xFFFF # TODO: These are probably platform specific, on MacOS I have these values, but we should check on Linux. # Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h @fieldwise_init -@register_passable("trivial") -struct SocketOption(Copyable, Equatable, Stringable, Writable): +struct SocketOption(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: c_int comptime SO_DEBUG = Self(0x0001) comptime SO_ACCEPTCONN = Self(0x0002) @@ -141,8 +139,7 @@ comptime O_CLOEXEC = 524288 # Socket Type constants @fieldwise_init -@register_passable("trivial") -struct SocketType(Copyable, Equatable, Stringable, Writable): +struct SocketType(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): var value: c_int comptime SOCK_STREAM = Self(1) comptime SOCK_DGRAM = Self(2) diff --git a/lightbug_http/c/socket_error.mojo b/lightbug_http/c/socket_error.mojo index 284fce88..4cca5cd3 100644 --- a/lightbug_http/c/socket_error.mojo +++ b/lightbug_http/c/socket_error.mojo @@ -12,8 +12,7 @@ from utils import Variant # Accept errors @fieldwise_init -@register_passable("trivial") -struct AcceptEBADFError(CustomError): +struct AcceptEBADFError(CustomError, TrivialRegisterPassable): comptime message = "accept (EBADF): socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -24,8 +23,7 @@ struct AcceptEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEINTRError(CustomError): +struct AcceptEINTRError(CustomError, TrivialRegisterPassable): comptime message = "accept (EINTR): The system call was interrupted by a signal that was caught before a valid connection arrived." fn write_to[W: Writer, //](self, mut writer: W): @@ -36,8 +34,7 @@ struct AcceptEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEAGAINError(CustomError): +struct AcceptEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "accept (EAGAIN/EWOULDBLOCK): The socket is marked nonblocking and no connections are present to be accepted." fn write_to[W: Writer, //](self, mut writer: W): @@ -48,8 +45,7 @@ struct AcceptEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptECONNABORTEDError(CustomError): +struct AcceptECONNABORTEDError(CustomError, TrivialRegisterPassable): comptime message = "accept (ECONNABORTED): A connection has been aborted." fn write_to[W: Writer, //](self, mut writer: W): @@ -60,8 +56,7 @@ struct AcceptECONNABORTEDError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEFAULTError(CustomError): +struct AcceptEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "accept (EFAULT): The address argument is not in a writable part of the user address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -72,8 +67,7 @@ struct AcceptEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEINVALError(CustomError): +struct AcceptEINVALError(CustomError, TrivialRegisterPassable): comptime message = "accept (EINVAL): Socket is not listening for connections, or address_len is invalid." fn write_to[W: Writer, //](self, mut writer: W): @@ -84,8 +78,7 @@ struct AcceptEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEMFILEError(CustomError): +struct AcceptEMFILEError(CustomError, TrivialRegisterPassable): comptime message = "accept (EMFILE): The per-process limit of open file descriptors has been reached." fn write_to[W: Writer, //](self, mut writer: W): @@ -96,8 +89,7 @@ struct AcceptEMFILEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptENFILEError(CustomError): +struct AcceptENFILEError(CustomError, TrivialRegisterPassable): comptime message = "accept (ENFILE): The system limit on the total number of open files has been reached." fn write_to[W: Writer, //](self, mut writer: W): @@ -108,8 +100,7 @@ struct AcceptENFILEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptENOBUFSError(CustomError): +struct AcceptENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "accept (ENOBUFS): Not enough free memory." fn write_to[W: Writer, //](self, mut writer: W): @@ -120,8 +111,7 @@ struct AcceptENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptENOTSOCKError(CustomError): +struct AcceptENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "accept (ENOTSOCK): socket is a descriptor for a file, not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -132,8 +122,7 @@ struct AcceptENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEOPNOTSUPPError(CustomError): +struct AcceptEOPNOTSUPPError(CustomError, TrivialRegisterPassable): comptime message = "accept (EOPNOTSUPP): The referenced socket is not of type SOCK_STREAM." fn write_to[W: Writer, //](self, mut writer: W): @@ -144,8 +133,7 @@ struct AcceptEOPNOTSUPPError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEPERMError(CustomError): +struct AcceptEPERMError(CustomError, TrivialRegisterPassable): comptime message = "accept (EPERM): Firewall rules forbid connection." fn write_to[W: Writer, //](self, mut writer: W): @@ -156,8 +144,7 @@ struct AcceptEPERMError(CustomError): @fieldwise_init -@register_passable("trivial") -struct AcceptEPROTOError(CustomError): +struct AcceptEPROTOError(CustomError, TrivialRegisterPassable): comptime message = "accept (EPROTO): Protocol error." fn write_to[W: Writer, //](self, mut writer: W): @@ -169,8 +156,7 @@ struct AcceptEPROTOError(CustomError): # Bind errors @fieldwise_init -@register_passable("trivial") -struct BindEACCESError(CustomError): +struct BindEACCESError(CustomError, TrivialRegisterPassable): comptime message = "bind (EACCES): The address is protected, and the user is not the superuser." fn write_to[W: Writer, //](self, mut writer: W): @@ -181,8 +167,7 @@ struct BindEACCESError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindEADDRINUSEError(CustomError): +struct BindEADDRINUSEError(CustomError, TrivialRegisterPassable): comptime message = "bind (EADDRINUSE): The given address is already in use." fn write_to[W: Writer, //](self, mut writer: W): @@ -193,8 +178,7 @@ struct BindEADDRINUSEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindEBADFError(CustomError): +struct BindEBADFError(CustomError, TrivialRegisterPassable): comptime message = "bind (EBADF): socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -205,8 +189,7 @@ struct BindEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindEFAULTError(CustomError): +struct BindEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "bind (EFAULT): address points outside the user's accessible address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -217,8 +200,7 @@ struct BindEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindEINVALError(CustomError): +struct BindEINVALError(CustomError, TrivialRegisterPassable): comptime message = "bind (EINVAL): The socket is already bound to an address." fn write_to[W: Writer, //](self, mut writer: W): @@ -229,8 +211,7 @@ struct BindEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindELOOPError(CustomError): +struct BindELOOPError(CustomError, TrivialRegisterPassable): comptime message = "bind (ELOOP): Too many symbolic links were encountered in resolving address." fn write_to[W: Writer, //](self, mut writer: W): @@ -241,8 +222,7 @@ struct BindELOOPError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindENAMETOOLONGError(CustomError): +struct BindENAMETOOLONGError(CustomError, TrivialRegisterPassable): comptime message = "bind (ENAMETOOLONG): address is too long." fn write_to[W: Writer, //](self, mut writer: W): @@ -253,8 +233,7 @@ struct BindENAMETOOLONGError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindENOMEMError(CustomError): +struct BindENOMEMError(CustomError, TrivialRegisterPassable): comptime message = "bind (ENOMEM): Insufficient kernel memory was available." fn write_to[W: Writer, //](self, mut writer: W): @@ -265,8 +244,7 @@ struct BindENOMEMError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindENOTSOCKError(CustomError): +struct BindENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "bind (ENOTSOCK): socket is a descriptor for a file, not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -278,8 +256,7 @@ struct BindENOTSOCKError(CustomError): # Close errors @fieldwise_init -@register_passable("trivial") -struct CloseEBADFError(CustomError): +struct CloseEBADFError(CustomError, TrivialRegisterPassable): comptime message = "close (EBADF): The file_descriptor argument is not a valid open file descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -290,8 +267,7 @@ struct CloseEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct CloseEINTRError(CustomError): +struct CloseEINTRError(CustomError, TrivialRegisterPassable): comptime message = "close (EINTR): The close() function was interrupted by a signal." fn write_to[W: Writer, //](self, mut writer: W): @@ -302,8 +278,7 @@ struct CloseEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct CloseEIOError(CustomError): +struct CloseEIOError(CustomError, TrivialRegisterPassable): comptime message = "close (EIO): An I/O error occurred while reading from or writing to the file system." fn write_to[W: Writer, //](self, mut writer: W): @@ -314,8 +289,7 @@ struct CloseEIOError(CustomError): @fieldwise_init -@register_passable("trivial") -struct CloseENOSPCError(CustomError): +struct CloseENOSPCError(CustomError, TrivialRegisterPassable): comptime message = "close (ENOSPC or EDQUOT): On NFS, these errors are not normally reported against the first write which exceeds the available storage space, but instead against a subsequent write, fsync, or close." fn write_to[W: Writer, //](self, mut writer: W): @@ -327,8 +301,7 @@ struct CloseENOSPCError(CustomError): # Connect errors @fieldwise_init -@register_passable("trivial") -struct ConnectEACCESError(CustomError): +struct ConnectEACCESError(CustomError, TrivialRegisterPassable): comptime message = "connect (EACCES): Write permission is denied on the socket file, or search permission is denied for one of the directories in the path prefix." fn write_to[W: Writer, //](self, mut writer: W): @@ -339,8 +312,7 @@ struct ConnectEACCESError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEADDRINUSEError(CustomError): +struct ConnectEADDRINUSEError(CustomError, TrivialRegisterPassable): comptime message = "connect (EADDRINUSE): Local address is already in use." fn write_to[W: Writer, //](self, mut writer: W): @@ -351,8 +323,7 @@ struct ConnectEADDRINUSEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEAFNOSUPPORTError(CustomError): +struct ConnectEAFNOSUPPORTError(CustomError, TrivialRegisterPassable): comptime message = "connect (EAFNOSUPPORT): The passed address didn't have the correct address family in its sa_family field." fn write_to[W: Writer, //](self, mut writer: W): @@ -363,8 +334,7 @@ struct ConnectEAFNOSUPPORTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEAGAINError(CustomError): +struct ConnectEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "connect (EAGAIN): No more free local ports or insufficient entries in the routing cache." fn write_to[W: Writer, //](self, mut writer: W): @@ -375,8 +345,7 @@ struct ConnectEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEALREADYError(CustomError): +struct ConnectEALREADYError(CustomError, TrivialRegisterPassable): comptime message = "connect (EALREADY): The socket is nonblocking and a previous connection attempt has not yet been completed." fn write_to[W: Writer, //](self, mut writer: W): @@ -387,8 +356,7 @@ struct ConnectEALREADYError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEBADFError(CustomError): +struct ConnectEBADFError(CustomError, TrivialRegisterPassable): comptime message = "connect (EBADF): The file descriptor is not a valid index in the descriptor table." fn write_to[W: Writer, //](self, mut writer: W): @@ -399,8 +367,7 @@ struct ConnectEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectECONNREFUSEDError(CustomError): +struct ConnectECONNREFUSEDError(CustomError, TrivialRegisterPassable): comptime message = "connect (ECONNREFUSED): No-one listening on the remote address." fn write_to[W: Writer, //](self, mut writer: W): @@ -411,8 +378,7 @@ struct ConnectECONNREFUSEDError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEFAULTError(CustomError): +struct ConnectEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "connect (EFAULT): The socket structure address is outside the user's address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -423,8 +389,7 @@ struct ConnectEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEINPROGRESSError(CustomError): +struct ConnectEINPROGRESSError(CustomError, TrivialRegisterPassable): comptime message = "connect (EINPROGRESS): The socket is nonblocking and the connection cannot be completed immediately. It is possible to select(2) or poll(2) for completion by selecting the socket for writing. After select(2) indicates writability, use getsockopt(2) to read the SO_ERROR option at level SOL_SOCKET to determine whether connect() completed successfully (SO_ERROR is zero) or unsuccessfully (SO_ERROR is one of the usual error codes listed here, explaining the reason for the failure)." fn write_to[W: Writer, //](self, mut writer: W): @@ -435,8 +400,7 @@ struct ConnectEINPROGRESSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEINTRError(CustomError): +struct ConnectEINTRError(CustomError, TrivialRegisterPassable): comptime message = "connect (EINTR): The system call was interrupted by a signal that was caught." fn write_to[W: Writer, //](self, mut writer: W): @@ -447,8 +411,7 @@ struct ConnectEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectEISCONNError(CustomError): +struct ConnectEISCONNError(CustomError, TrivialRegisterPassable): comptime message = "connect (EISCONN): The socket is already connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -459,8 +422,7 @@ struct ConnectEISCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectENETUNREACHError(CustomError): +struct ConnectENETUNREACHError(CustomError, TrivialRegisterPassable): comptime message = "connect (ENETUNREACH): Network is unreachable." fn write_to[W: Writer, //](self, mut writer: W): @@ -471,8 +433,7 @@ struct ConnectENETUNREACHError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectENOTSOCKError(CustomError): +struct ConnectENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "connect (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -483,8 +444,7 @@ struct ConnectENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ConnectETIMEDOUTError(CustomError): +struct ConnectETIMEDOUTError(CustomError, TrivialRegisterPassable): comptime message = "connect (ETIMEDOUT): Timeout while attempting connection." fn write_to[W: Writer, //](self, mut writer: W): @@ -496,8 +456,7 @@ struct ConnectETIMEDOUTError(CustomError): # Getpeername errors @fieldwise_init -@register_passable("trivial") -struct GetpeernameEBADFError(CustomError): +struct GetpeernameEBADFError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (EBADF): socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -508,8 +467,7 @@ struct GetpeernameEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetpeernameEFAULTError(CustomError): +struct GetpeernameEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (EFAULT): The address argument points to memory not in a valid part of the process address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -520,8 +478,7 @@ struct GetpeernameEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetpeernameEINVALError(CustomError): +struct GetpeernameEINVALError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (EINVAL): address_len is invalid (e.g., is negative)." fn write_to[W: Writer, //](self, mut writer: W): @@ -532,8 +489,7 @@ struct GetpeernameEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetpeernameENOBUFSError(CustomError): +struct GetpeernameENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (ENOBUFS): Insufficient resources were available in the system to perform the operation." fn write_to[W: Writer, //](self, mut writer: W): @@ -544,8 +500,7 @@ struct GetpeernameENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetpeernameENOTCONNError(CustomError): +struct GetpeernameENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -556,8 +511,7 @@ struct GetpeernameENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetpeernameENOTSOCKError(CustomError): +struct GetpeernameENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "getpeername (ENOTSOCK): The argument socket is not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -569,8 +523,7 @@ struct GetpeernameENOTSOCKError(CustomError): # Getsockname errors @fieldwise_init -@register_passable("trivial") -struct GetsocknameEBADFError(CustomError): +struct GetsocknameEBADFError(CustomError, TrivialRegisterPassable): comptime message = "getsockname (EBADF): socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -581,8 +534,7 @@ struct GetsocknameEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsocknameEFAULTError(CustomError): +struct GetsocknameEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "getsockname (EFAULT): The address argument points to memory not in a valid part of the process address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -593,8 +545,7 @@ struct GetsocknameEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsocknameEINVALError(CustomError): +struct GetsocknameEINVALError(CustomError, TrivialRegisterPassable): comptime message = "getsockname (EINVAL): address_len is invalid (e.g., is negative)." fn write_to[W: Writer, //](self, mut writer: W): @@ -605,8 +556,7 @@ struct GetsocknameEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsocknameENOBUFSError(CustomError): +struct GetsocknameENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "getsockname (ENOBUFS): Insufficient resources were available in the system to perform the operation." fn write_to[W: Writer, //](self, mut writer: W): @@ -617,8 +567,7 @@ struct GetsocknameENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsocknameENOTSOCKError(CustomError): +struct GetsocknameENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "getsockname (ENOTSOCK): The argument socket is a file, not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -630,8 +579,7 @@ struct GetsocknameENOTSOCKError(CustomError): # Getsockopt errors @fieldwise_init -@register_passable("trivial") -struct GetsockoptEBADFError(CustomError): +struct GetsockoptEBADFError(CustomError, TrivialRegisterPassable): comptime message = "getsockopt (EBADF): The argument socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -642,8 +590,7 @@ struct GetsockoptEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsockoptEFAULTError(CustomError): +struct GetsockoptEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "getsockopt (EFAULT): The argument option_value points outside the process's allocated address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -654,8 +601,7 @@ struct GetsockoptEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsockoptEINVALError(CustomError): +struct GetsockoptEINVALError(CustomError, TrivialRegisterPassable): comptime message = "getsockopt (EINVAL): The argument option_len is invalid." fn write_to[W: Writer, //](self, mut writer: W): @@ -666,8 +612,7 @@ struct GetsockoptEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsockoptENOPROTOOPTError(CustomError): +struct GetsockoptENOPROTOOPTError(CustomError, TrivialRegisterPassable): comptime message = "getsockopt (ENOPROTOOPT): The option is unknown at the level indicated." fn write_to[W: Writer, //](self, mut writer: W): @@ -678,8 +623,7 @@ struct GetsockoptENOPROTOOPTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct GetsockoptENOTSOCKError(CustomError): +struct GetsockoptENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "getsockopt (ENOTSOCK): The argument socket is not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -691,8 +635,7 @@ struct GetsockoptENOTSOCKError(CustomError): # Listen errors @fieldwise_init -@register_passable("trivial") -struct ListenEADDRINUSEError(CustomError): +struct ListenEADDRINUSEError(CustomError, TrivialRegisterPassable): comptime message = "listen (EADDRINUSE): Another socket is already listening on the same port." fn write_to[W: Writer, //](self, mut writer: W): @@ -703,8 +646,7 @@ struct ListenEADDRINUSEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ListenEBADFError(CustomError): +struct ListenEBADFError(CustomError, TrivialRegisterPassable): comptime message = "listen (EBADF): socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -715,8 +657,7 @@ struct ListenEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ListenENOTSOCKError(CustomError): +struct ListenENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "listen (ENOTSOCK): socket is a descriptor for a file, not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -727,8 +668,7 @@ struct ListenENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ListenEOPNOTSUPPError(CustomError): +struct ListenEOPNOTSUPPError(CustomError, TrivialRegisterPassable): comptime message = "listen (EOPNOTSUPP): The socket is not of a type that supports the listen() operation." fn write_to[W: Writer, //](self, mut writer: W): @@ -740,8 +680,7 @@ struct ListenEOPNOTSUPPError(CustomError): # Recv errors @fieldwise_init -@register_passable("trivial") -struct RecvEAGAINError(CustomError): +struct RecvEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "recv (EAGAIN/EWOULDBLOCK): The socket is marked nonblocking and the receive operation would block." fn write_to[W: Writer, //](self, mut writer: W): @@ -752,8 +691,7 @@ struct RecvEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvEBADFError(CustomError): +struct RecvEBADFError(CustomError, TrivialRegisterPassable): comptime message = "recv (EBADF): The argument socket is an invalid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -764,8 +702,7 @@ struct RecvEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvECONNREFUSEDError(CustomError): +struct RecvECONNREFUSEDError(CustomError, TrivialRegisterPassable): comptime message = "recv (ECONNREFUSED): The remote host refused to allow the network connection." fn write_to[W: Writer, //](self, mut writer: W): @@ -776,8 +713,7 @@ struct RecvECONNREFUSEDError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvEFAULTError(CustomError): +struct RecvEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "recv (EFAULT): buffer points outside the process's address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -788,8 +724,7 @@ struct RecvEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvEINTRError(CustomError): +struct RecvEINTRError(CustomError, TrivialRegisterPassable): comptime message = "recv (EINTR): The receive was interrupted by delivery of a signal before any data were available." fn write_to[W: Writer, //](self, mut writer: W): @@ -800,8 +735,7 @@ struct RecvEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvENOTCONNError(CustomError): +struct RecvENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "recv (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -812,8 +746,7 @@ struct RecvENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvENOTSOCKError(CustomError): +struct RecvENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "recv (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -825,8 +758,7 @@ struct RecvENOTSOCKError(CustomError): # Recvfrom errors @fieldwise_init -@register_passable("trivial") -struct RecvfromEAGAINError(CustomError): +struct RecvfromEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EAGAIN/EWOULDBLOCK): The socket is marked nonblocking and the receive operation would block." fn write_to[W: Writer, //](self, mut writer: W): @@ -837,8 +769,7 @@ struct RecvfromEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromEBADFError(CustomError): +struct RecvfromEBADFError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EBADF): The argument socket is an invalid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -849,8 +780,7 @@ struct RecvfromEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromECONNRESETError(CustomError): +struct RecvfromECONNRESETError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ECONNRESET): A connection was forcibly closed by a peer." fn write_to[W: Writer, //](self, mut writer: W): @@ -861,8 +791,7 @@ struct RecvfromECONNRESETError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromEINTRError(CustomError): +struct RecvfromEINTRError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EINTR): The receive was interrupted by delivery of a signal." fn write_to[W: Writer, //](self, mut writer: W): @@ -873,8 +802,7 @@ struct RecvfromEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromEINVALError(CustomError): +struct RecvfromEINVALError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EINVAL): Invalid argument passed." fn write_to[W: Writer, //](self, mut writer: W): @@ -885,8 +813,7 @@ struct RecvfromEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromEIOError(CustomError): +struct RecvfromEIOError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EIO): An I/O error occurred." fn write_to[W: Writer, //](self, mut writer: W): @@ -897,8 +824,7 @@ struct RecvfromEIOError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromENOBUFSError(CustomError): +struct RecvfromENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ENOBUFS): Insufficient resources were available in the system to perform the operation." fn write_to[W: Writer, //](self, mut writer: W): @@ -909,8 +835,7 @@ struct RecvfromENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromENOMEMError(CustomError): +struct RecvfromENOMEMError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ENOMEM): Insufficient memory was available to fulfill the request." fn write_to[W: Writer, //](self, mut writer: W): @@ -921,8 +846,7 @@ struct RecvfromENOMEMError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromENOTCONNError(CustomError): +struct RecvfromENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -933,8 +857,7 @@ struct RecvfromENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromENOTSOCKError(CustomError): +struct RecvfromENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -945,8 +868,7 @@ struct RecvfromENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromEOPNOTSUPPError(CustomError): +struct RecvfromEOPNOTSUPPError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (EOPNOTSUPP): The specified flags are not supported for this socket type or protocol." fn write_to[W: Writer, //](self, mut writer: W): @@ -957,8 +879,7 @@ struct RecvfromEOPNOTSUPPError(CustomError): @fieldwise_init -@register_passable("trivial") -struct RecvfromETIMEDOUTError(CustomError): +struct RecvfromETIMEDOUTError(CustomError, TrivialRegisterPassable): comptime message = "recvfrom (ETIMEDOUT): The connection timed out." fn write_to[W: Writer, //](self, mut writer: W): @@ -970,8 +891,7 @@ struct RecvfromETIMEDOUTError(CustomError): # Send errors @fieldwise_init -@register_passable("trivial") -struct SendEAGAINError(CustomError): +struct SendEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "send (EAGAIN/EWOULDBLOCK): The socket is marked nonblocking and the send operation would block." fn write_to[W: Writer, //](self, mut writer: W): @@ -982,8 +902,7 @@ struct SendEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEBADFError(CustomError): +struct SendEBADFError(CustomError, TrivialRegisterPassable): comptime message = "send (EBADF): The argument socket is an invalid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -994,8 +913,7 @@ struct SendEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendECONNREFUSEDError(CustomError): +struct SendECONNREFUSEDError(CustomError, TrivialRegisterPassable): comptime message = "send (ECONNREFUSED): The remote host refused to allow the network connection." fn write_to[W: Writer, //](self, mut writer: W): @@ -1006,8 +924,7 @@ struct SendECONNREFUSEDError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendECONNRESETError(CustomError): +struct SendECONNRESETError(CustomError, TrivialRegisterPassable): comptime message = "send (ECONNRESET): Connection reset by peer." fn write_to[W: Writer, //](self, mut writer: W): @@ -1018,8 +935,7 @@ struct SendECONNRESETError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEDESTADDRREQError(CustomError): +struct SendEDESTADDRREQError(CustomError, TrivialRegisterPassable): comptime message = "send (EDESTADDRREQ): The socket is not connection-mode, and no peer address is set." fn write_to[W: Writer, //](self, mut writer: W): @@ -1030,8 +946,7 @@ struct SendEDESTADDRREQError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEFAULTError(CustomError): +struct SendEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "send (EFAULT): buffer points outside the process's address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -1042,8 +957,7 @@ struct SendEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEINTRError(CustomError): +struct SendEINTRError(CustomError, TrivialRegisterPassable): comptime message = "send (EINTR): The send was interrupted by delivery of a signal." fn write_to[W: Writer, //](self, mut writer: W): @@ -1054,8 +968,7 @@ struct SendEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEINVALError(CustomError): +struct SendEINVALError(CustomError, TrivialRegisterPassable): comptime message = "send (EINVAL): Invalid argument passed." fn write_to[W: Writer, //](self, mut writer: W): @@ -1066,8 +979,7 @@ struct SendEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEISCONNError(CustomError): +struct SendEISCONNError(CustomError, TrivialRegisterPassable): comptime message = "send (EISCONN): The connection-mode socket was connected already but a recipient was specified." fn write_to[W: Writer, //](self, mut writer: W): @@ -1078,8 +990,7 @@ struct SendEISCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendENOBUFSError(CustomError): +struct SendENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "send (ENOBUFS): The output queue for a network interface was full." fn write_to[W: Writer, //](self, mut writer: W): @@ -1090,8 +1001,7 @@ struct SendENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendENOMEMError(CustomError): +struct SendENOMEMError(CustomError, TrivialRegisterPassable): comptime message = "send (ENOMEM): No memory available." fn write_to[W: Writer, //](self, mut writer: W): @@ -1102,8 +1012,7 @@ struct SendENOMEMError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendENOTCONNError(CustomError): +struct SendENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "send (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -1114,8 +1023,7 @@ struct SendENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendENOTSOCKError(CustomError): +struct SendENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "send (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -1126,8 +1034,7 @@ struct SendENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendEOPNOTSUPPError(CustomError): +struct SendEOPNOTSUPPError(CustomError, TrivialRegisterPassable): comptime message = "send (EOPNOTSUPP): Some bit in the flags argument is inappropriate for the socket type." fn write_to[W: Writer, //](self, mut writer: W): @@ -1139,8 +1046,7 @@ struct SendEOPNOTSUPPError(CustomError): # Sendto errors @fieldwise_init -@register_passable("trivial") -struct SendtoEACCESError(CustomError): +struct SendtoEACCESError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EACCES): Write access to the named socket is denied." fn write_to[W: Writer, //](self, mut writer: W): @@ -1151,8 +1057,7 @@ struct SendtoEACCESError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEAFNOSUPPORTError(CustomError): +struct SendtoEAFNOSUPPORTError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EAFNOSUPPORT): Addresses in the specified address family cannot be used with this socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -1163,8 +1068,7 @@ struct SendtoEAFNOSUPPORTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEAGAINError(CustomError): +struct SendtoEAGAINError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EAGAIN/EWOULDBLOCK): The socket's file descriptor is marked O_NONBLOCK and the requested operation would block." fn write_to[W: Writer, //](self, mut writer: W): @@ -1175,8 +1079,7 @@ struct SendtoEAGAINError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEBADFError(CustomError): +struct SendtoEBADFError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EBADF): The argument socket is an invalid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -1187,8 +1090,7 @@ struct SendtoEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoECONNRESETError(CustomError): +struct SendtoECONNRESETError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ECONNRESET): A connection was forcibly closed by a peer." fn write_to[W: Writer, //](self, mut writer: W): @@ -1199,8 +1101,7 @@ struct SendtoECONNRESETError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEDESTADDRREQError(CustomError): +struct SendtoEDESTADDRREQError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EDESTADDRREQ): The socket is not connection-mode and does not have its peer address set, and no destination address was specified." fn write_to[W: Writer, //](self, mut writer: W): @@ -1211,8 +1112,7 @@ struct SendtoEDESTADDRREQError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEHOSTUNREACHError(CustomError): +struct SendtoEHOSTUNREACHError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EHOSTUNREACH): The destination host cannot be reached." fn write_to[W: Writer, //](self, mut writer: W): @@ -1223,8 +1123,7 @@ struct SendtoEHOSTUNREACHError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEINTRError(CustomError): +struct SendtoEINTRError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EINTR): The send was interrupted by delivery of a signal." fn write_to[W: Writer, //](self, mut writer: W): @@ -1235,8 +1134,7 @@ struct SendtoEINTRError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEINVALError(CustomError): +struct SendtoEINVALError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EINVAL): Invalid argument passed." fn write_to[W: Writer, //](self, mut writer: W): @@ -1247,8 +1145,7 @@ struct SendtoEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEIOError(CustomError): +struct SendtoEIOError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EIO): An I/O error occurred." fn write_to[W: Writer, //](self, mut writer: W): @@ -1259,8 +1156,7 @@ struct SendtoEIOError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEISCONNError(CustomError): +struct SendtoEISCONNError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EISCONN): A destination address was specified and the socket is already connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -1271,8 +1167,7 @@ struct SendtoEISCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoELOOPError(CustomError): +struct SendtoELOOPError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ELOOP): More than SYMLOOP_MAX symbolic links were encountered during resolution of the pathname in the socket address." fn write_to[W: Writer, //](self, mut writer: W): @@ -1283,8 +1178,7 @@ struct SendtoELOOPError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEMSGSIZEError(CustomError): +struct SendtoEMSGSIZEError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EMSGSIZE): The message is too large to be sent all at once, as the socket requires." fn write_to[W: Writer, //](self, mut writer: W): @@ -1295,8 +1189,7 @@ struct SendtoEMSGSIZEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENAMETOOLONGError(CustomError): +struct SendtoENAMETOOLONGError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENAMETOOLONG): The length of a pathname exceeds PATH_MAX." fn write_to[W: Writer, //](self, mut writer: W): @@ -1307,8 +1200,7 @@ struct SendtoENAMETOOLONGError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENETDOWNError(CustomError): +struct SendtoENETDOWNError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENETDOWN): The local network interface used to reach the destination is down." fn write_to[W: Writer, //](self, mut writer: W): @@ -1319,8 +1211,7 @@ struct SendtoENETDOWNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENETUNREACHError(CustomError): +struct SendtoENETUNREACHError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENETUNREACH): No route to the network is present." fn write_to[W: Writer, //](self, mut writer: W): @@ -1331,8 +1222,7 @@ struct SendtoENETUNREACHError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENOBUFSError(CustomError): +struct SendtoENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENOBUFS): Insufficient resources were available in the system to perform the operation." fn write_to[W: Writer, //](self, mut writer: W): @@ -1343,8 +1233,7 @@ struct SendtoENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENOMEMError(CustomError): +struct SendtoENOMEMError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENOMEM): Insufficient memory was available to fulfill the request." fn write_to[W: Writer, //](self, mut writer: W): @@ -1355,8 +1244,7 @@ struct SendtoENOMEMError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENOTCONNError(CustomError): +struct SendtoENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -1367,8 +1255,7 @@ struct SendtoENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoENOTSOCKError(CustomError): +struct SendtoENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "sendto (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -1379,8 +1266,7 @@ struct SendtoENOTSOCKError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SendtoEPIPEError(CustomError): +struct SendtoEPIPEError(CustomError, TrivialRegisterPassable): comptime message = "sendto (EPIPE): The socket is shut down for writing, or the socket is connection-mode and is no longer connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -1392,8 +1278,7 @@ struct SendtoEPIPEError(CustomError): # Setsockopt errors @fieldwise_init -@register_passable("trivial") -struct SetsockoptEBADFError(CustomError): +struct SetsockoptEBADFError(CustomError, TrivialRegisterPassable): comptime message = "setsockopt (EBADF): The argument socket is not a valid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -1404,8 +1289,7 @@ struct SetsockoptEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SetsockoptEFAULTError(CustomError): +struct SetsockoptEFAULTError(CustomError, TrivialRegisterPassable): comptime message = "setsockopt (EFAULT): The argument option_value points outside the process's allocated address space." fn write_to[W: Writer, //](self, mut writer: W): @@ -1416,8 +1300,7 @@ struct SetsockoptEFAULTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SetsockoptEINVALError(CustomError): +struct SetsockoptEINVALError(CustomError, TrivialRegisterPassable): comptime message = "setsockopt (EINVAL): The argument option_len is invalid." fn write_to[W: Writer, //](self, mut writer: W): @@ -1428,8 +1311,7 @@ struct SetsockoptEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SetsockoptENOPROTOOPTError(CustomError): +struct SetsockoptENOPROTOOPTError(CustomError, TrivialRegisterPassable): comptime message = "setsockopt (ENOPROTOOPT): The option is unknown at the level indicated." fn write_to[W: Writer, //](self, mut writer: W): @@ -1440,8 +1322,7 @@ struct SetsockoptENOPROTOOPTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SetsockoptENOTSOCKError(CustomError): +struct SetsockoptENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "setsockopt (ENOTSOCK): The argument socket is not a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -1453,8 +1334,7 @@ struct SetsockoptENOTSOCKError(CustomError): # Shutdown errors @fieldwise_init -@register_passable("trivial") -struct ShutdownEBADFError(CustomError): +struct ShutdownEBADFError(CustomError, TrivialRegisterPassable): comptime message = "shutdown (EBADF): The argument socket is an invalid descriptor." fn write_to[W: Writer, //](self, mut writer: W): @@ -1465,8 +1345,7 @@ struct ShutdownEBADFError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ShutdownEINVALError(CustomError): +struct ShutdownEINVALError(CustomError, TrivialRegisterPassable): comptime message = "shutdown (EINVAL): Invalid argument passed." fn write_to[W: Writer, //](self, mut writer: W): @@ -1477,8 +1356,7 @@ struct ShutdownEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ShutdownENOTCONNError(CustomError): +struct ShutdownENOTCONNError(CustomError, TrivialRegisterPassable): comptime message = "shutdown (ENOTCONN): The socket is not connected." fn write_to[W: Writer, //](self, mut writer: W): @@ -1489,8 +1367,7 @@ struct ShutdownENOTCONNError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ShutdownENOTSOCKError(CustomError): +struct ShutdownENOTSOCKError(CustomError, TrivialRegisterPassable): comptime message = "shutdown (ENOTSOCK): The file descriptor is not associated with a socket." fn write_to[W: Writer, //](self, mut writer: W): @@ -1502,8 +1379,7 @@ struct ShutdownENOTSOCKError(CustomError): # Socket errors @fieldwise_init -@register_passable("trivial") -struct SocketEACCESError(CustomError): +struct SocketEACCESError(CustomError, TrivialRegisterPassable): comptime message = "socket (EACCES): Permission to create a socket of the specified type and/or protocol is denied." fn write_to[W: Writer, //](self, mut writer: W): @@ -1514,8 +1390,7 @@ struct SocketEACCESError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketEAFNOSUPPORTError(CustomError): +struct SocketEAFNOSUPPORTError(CustomError, TrivialRegisterPassable): comptime message = "socket (EAFNOSUPPORT): The implementation does not support the specified address family." fn write_to[W: Writer, //](self, mut writer: W): @@ -1526,8 +1401,7 @@ struct SocketEAFNOSUPPORTError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketEINVALError(CustomError): +struct SocketEINVALError(CustomError, TrivialRegisterPassable): comptime message = "socket (EINVAL): Invalid flags in type, unknown protocol, or protocol family not available." fn write_to[W: Writer, //](self, mut writer: W): @@ -1538,8 +1412,7 @@ struct SocketEINVALError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketEMFILEError(CustomError): +struct SocketEMFILEError(CustomError, TrivialRegisterPassable): comptime message = "socket (EMFILE): The per-process limit on the number of open file descriptors has been reached." fn write_to[W: Writer, //](self, mut writer: W): @@ -1550,8 +1423,7 @@ struct SocketEMFILEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketENFILEError(CustomError): +struct SocketENFILEError(CustomError, TrivialRegisterPassable): comptime message = "socket (ENFILE): The system-wide limit on the total number of open files has been reached." fn write_to[W: Writer, //](self, mut writer: W): @@ -1562,8 +1434,7 @@ struct SocketENFILEError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketENOBUFSError(CustomError): +struct SocketENOBUFSError(CustomError, TrivialRegisterPassable): comptime message = "socket (ENOBUFS): Insufficient memory is available. The socket cannot be created until sufficient resources are freed." fn write_to[W: Writer, //](self, mut writer: W): @@ -1574,8 +1445,7 @@ struct SocketENOBUFSError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketEPROTONOSUPPORTError(CustomError): +struct SocketEPROTONOSUPPORTError(CustomError, TrivialRegisterPassable): comptime message = "socket (EPROTONOSUPPORT): The protocol type or the specified protocol is not supported within this domain." fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/connection.mojo b/lightbug_http/connection.mojo index 47c28d23..7a35571c 100644 --- a/lightbug_http/connection.mojo +++ b/lightbug_http/connection.mojo @@ -41,8 +41,7 @@ comptime default_tcp_keep_alive = Duration(15 * 1000 * 1000 * 1000) # 15 second @fieldwise_init -@register_passable("trivial") -struct AddressParseError(CustomError): +struct AddressParseError(CustomError, TrivialRegisterPassable): comptime message = "ListenerError: Failed to parse listen address" fn write_to[W: Writer, //](self, mut writer: W): @@ -53,8 +52,7 @@ struct AddressParseError(CustomError): @fieldwise_init -@register_passable("trivial") -struct SocketCreationError(CustomError): +struct SocketCreationError(CustomError, TrivialRegisterPassable): comptime message = "ListenerError: Failed to create socket" fn write_to[W: Writer, //](self, mut writer: W): @@ -65,8 +63,7 @@ struct SocketCreationError(CustomError): @fieldwise_init -@register_passable("trivial") -struct BindFailedError(CustomError): +struct BindFailedError(CustomError, TrivialRegisterPassable): comptime message = "ListenerError: Failed to bind socket to address" fn write_to[W: Writer, //](self, mut writer: W): @@ -77,8 +74,7 @@ struct BindFailedError(CustomError): @fieldwise_init -@register_passable("trivial") -struct ListenFailedError(CustomError): +struct ListenFailedError(CustomError, TrivialRegisterPassable): comptime message = "ListenerError: Failed to listen on socket" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/cookie/cookie.mojo b/lightbug_http/cookie/cookie.mojo index c70d7794..953f1f96 100644 --- a/lightbug_http/cookie/cookie.mojo +++ b/lightbug_http/cookie/cookie.mojo @@ -3,8 +3,7 @@ from utils import Variant @fieldwise_init -@register_passable("trivial") -struct InvalidCookieError(Movable, Stringable, Writable): +struct InvalidCookieError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when a cookie is invalid.""" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/cookie/response_cookie_jar.mojo b/lightbug_http/cookie/response_cookie_jar.mojo index 1e184274..29bf533f 100644 --- a/lightbug_http/cookie/response_cookie_jar.mojo +++ b/lightbug_http/cookie/response_cookie_jar.mojo @@ -9,8 +9,7 @@ from lightbug_http.cookie.cookie import InvalidCookieError @fieldwise_init -@register_passable("trivial") -struct CookieParseError(Movable, Stringable, Writable): +struct CookieParseError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when a cookie header string fails to parse.""" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/header.mojo b/lightbug_http/header.mojo index 6173681e..b764374d 100644 --- a/lightbug_http/header.mojo +++ b/lightbug_http/header.mojo @@ -109,8 +109,7 @@ struct HeaderKey: @fieldwise_init -@register_passable("trivial") -struct HeaderKeyNotFoundError(Movable, Stringable, Writable): +struct HeaderKeyNotFoundError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when a header key is not found.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -121,8 +120,7 @@ struct HeaderKeyNotFoundError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct InvalidHTTPRequestError(Movable, Stringable, Writable): +struct InvalidHTTPRequestError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when the HTTP request is malformed.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -133,8 +131,7 @@ struct InvalidHTTPRequestError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct IncompleteHTTPRequestError(Movable, Stringable, Writable): +struct IncompleteHTTPRequestError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when the HTTP request is incomplete (need more data).""" fn write_to[W: Writer, //](self, mut writer: W): @@ -145,8 +142,7 @@ struct IncompleteHTTPRequestError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct InvalidHTTPResponseError(Movable, Stringable, Writable): +struct InvalidHTTPResponseError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when the HTTP response is malformed.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -157,8 +153,7 @@ struct InvalidHTTPResponseError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct IncompleteHTTPResponseError(Movable, Stringable, Writable): +struct IncompleteHTTPResponseError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when the HTTP response is incomplete.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -169,8 +164,7 @@ struct IncompleteHTTPResponseError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct EmptyBufferError(Movable, Stringable, Writable): +struct EmptyBufferError(Movable, Stringable, Writable, TrivialRegisterPassable): """Error raised when buffer has no data available.""" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index d3700de5..edf1988f 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -17,8 +17,7 @@ struct HTTPHeader(Copyable): @fieldwise_init -@register_passable("trivial") -struct ParseError(Movable, Stringable, Writable): +struct ParseError(Movable, Stringable, Writable, TrivialRegisterPassable): """Invalid HTTP syntax error.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -29,8 +28,7 @@ struct ParseError(Movable, Stringable, Writable): @fieldwise_init -@register_passable("trivial") -struct IncompleteError(Movable, Stringable, Writable): +struct IncompleteError(Movable, Stringable, Writable, TrivialRegisterPassable): """Need more data to complete parsing.""" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/server.mojo b/lightbug_http/server.mojo index 41794e59..98840f25 100644 --- a/lightbug_http/server.mojo +++ b/lightbug_http/server.mojo @@ -192,8 +192,7 @@ struct ConnectionProvision(Movable): @fieldwise_init -@register_passable("trivial") -struct ProvisionPoolExhaustedError(CustomError): +struct ProvisionPoolExhaustedError(CustomError, TrivialRegisterPassable): comptime message = "ProvisionError: Connection provision pool exhausted" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index ea3c1237..b167311c 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -64,20 +64,17 @@ from utils import Variant @fieldwise_init -@register_passable("trivial") -struct SocketClosedError(Movable): +struct SocketClosedError(Movable, TrivialRegisterPassable): pass @fieldwise_init -@register_passable("trivial") -struct EOF(Movable): +struct EOF(Movable, TrivialRegisterPassable): pass @fieldwise_init -@register_passable("trivial") -struct InvalidCloseErrorConversionError(Movable, Stringable, Writable): +struct InvalidCloseErrorConversionError(Movable, Stringable, Writable, TrivialRegisterPassable): fn write_to[W: Writer, //](self, mut writer: W): writer.write("InvalidCloseErrorConversionError: Cannot convert EBADF to FatalCloseError") diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 00000000..ee4bb108 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,4712 @@ +version: 6 +environments: + bench: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ + - url: https://repo.prefix.dev/modular-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ + - url: https://repo.prefix.dev/modular-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + integration-tests: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ + - url: https://repo.prefix.dev/modular-community/ + indexes: + - https://pypi.org/simple + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.7.1-py313h07c4f96_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.7.1-py313h6194ac5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.7.1-py313h6535dbc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyh534df25_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl + unit-tests: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ + - url: https://repo.prefix.dev/modular-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + util: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://repo.prefix.dev/mojo-community/ + - url: https://conda.modular.com/max-nightly/ + - url: https://conda.modular.com/max/ + - url: https://repo.prefix.dev/modular-community/ + options: + pypi-prerelease-mode: if-necessary-or-explicit + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: hb0f4dca_0 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + linux-aarch64: + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: he8cfe8b_0 + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + build: h60d57d3_0 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +packages: +- conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: 1dd3fffd892081df9726d7eb7e0dea6198962ba775bd88842135a4ddb4deb3c9 + md5: a9f577daf3de00bca7c3c76c0ecbd1de + depends: + - __glibc >=2.17,<3.0.a0 + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28948 + timestamp: 1770939786096 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda + build_number: 20 + sha256: a2527b1d81792a0ccd2c05850960df119c2b6d8f5fdec97f2db7d25dc23b1068 + md5: 468fd3bb9e1f671d36c2cbc677e56f1d + depends: + - libgomp >=7.5.0 + constrains: + - openmp_impl <0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 28926 + timestamp: 1770939656741 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda + build_number: 7 + sha256: 7acaa2e0782cad032bdaf756b536874346ac1375745fb250e9bdd6a48a7ab3cd + md5: a44032f282e7d2acdeb1c240308052dd + depends: + - llvm-openmp >=9.0.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 8325 + timestamp: 1764092507920 +- conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda + sha256: a3967b937b9abf0f2a99f3173fa4630293979bd1644709d89580e7c62a544661 + md5: aaa2a381ccc56eac91d63b6c1240312f + depends: + - cpython + - python-gil + license: MIT + license_family: MIT + purls: [] + size: 8191 + timestamp: 1744137672556 +- pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl + name: abnf + version: 2.4.1 + sha256: c9918b6aa9fe93c531ab245d99b47fc2ccf56407e005a598b279f384397d1df1 + requires_dist: + - check-manifest==0.51 ; extra == 'dev' + - pre-commit==4.3.0 ; extra == 'dev' + - pyright[nodejs]==1.1.407 ; extra == 'dev' + - pytest==8.4.2 ; extra == 'dev' + - pytest-cov==7.0.0 ; extra == 'dev' + - ruff==0.14.2 ; extra == 'dev' + - setuptools==80.9.0 ; extra == 'dev' + - setuptools-scm==9.2.2 ; extra == 'dev' + - tox==4.31.0 ; extra == 'dev' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda + sha256: cc9fbc50d4ee7ee04e49ee119243e6f1765750f0fd0b4d270d5ef35461b643b1 + md5: 52be5139047efadaeeb19c6a5103f92a + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-doc?source=hash-mapping + size: 14222 + timestamp: 1762868213144 +- conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda + sha256: e0ea1ba78fbb64f17062601edda82097fcf815012cf52bb704150a2668110d48 + md5: 2934f256a8acfe48f6ebb4fce6cde29c + depends: + - python >=3.9 + - typing-extensions >=4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/annotated-types?source=hash-mapping + size: 18074 + timestamp: 1733247158254 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + sha256: eb0c4e2b24f1fbefaf96ce6c992c6bd64340bc3c06add4d7415ab69222b201da + md5: 11a2b8c732d215d977998ccd69a9d5e8 + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.10 + - typing_extensions >=4.5 + - python + constrains: + - trio >=0.32.0 + - uvloop >=0.21 + license: MIT + license_family: MIT + purls: + - pkg:pypi/anyio?source=compressed-mapping + size: 145175 + timestamp: 1767719033569 +- conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda + sha256: 9552afbec37c4d8d0e83a5c4c6b3c7f4b8785f935094ce3881e0a249045909ce + md5: d9e90792551a527200637e23a915dd79 + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.13.* *_cp313 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 240943 + timestamp: 1767044981366 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda + sha256: 61e4757233111133b64125706c9c5dc2d36818eec0cc1894784a08e615a87b37 + md5: c0fd0009041efedb247ba54df0f423ee + depends: + - python + - python 3.13.* *_cp313 + - libgcc >=14 + - python_abi 3.13.* *_cp313 + - zstd >=1.5.7,<1.6.0a0 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 247081 + timestamp: 1767045002495 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda + sha256: f3047ca3b41bb444b4b5a71a6eee182623192c77019746dd4685fd260becb249 + md5: 54008c5cc8928e5cb5a0f9206b829451 + depends: + - python + - python 3.13.* *_cp313 + - __osx >=11.0 + - zstd >=1.5.7,<1.6.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause AND MIT AND EPL-2.0 + purls: + - pkg:pypi/backports-zstd?source=hash-mapping + size: 244371 + timestamp: 1767045003420 +- conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda + sha256: dadec2879492adede0a9af0191203f9b023f788c18efd45ecac676d424c458ae + md5: 6c4d3597cf43f3439a51b2b13e29a4ba + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - libbrotlicommon 1.2.0 hb03c661_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 367721 + timestamp: 1764017371123 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda + sha256: 5fe27389162240ab9a5cd8d112d51bdd9019f9a68c5593b5298e54f0437f714f + md5: 523c55147ba15d3e0e0cdb9f67cda339 + depends: + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - libbrotlicommon 1.2.0 he30d5cf_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 372678 + timestamp: 1764017653333 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda + sha256: 2e21dccccd68bedd483300f9ab87a425645f6776e6e578e10e0dd98c946e1be9 + md5: b03732afa9f4f54634d94eb920dfb308 + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - libbrotlicommon 1.2.0 hc919400_1 + license: MIT + license_family: MIT + purls: + - pkg:pypi/brotli?source=hash-mapping + size: 359568 + timestamp: 1764018359470 +- conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda + sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 + md5: d2ffd7602c02f2b316fd921d39876885 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 260182 + timestamp: 1771350215188 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda + sha256: b3495077889dde6bb370938e7db82be545c73e8589696ad0843a32221520ad4c + md5: 840d8fc0d7b3209be93080bc20e07f2d + depends: + - libgcc >=14 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 192412 + timestamp: 1771350241232 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda + sha256: 540fe54be35fac0c17feefbdc3e29725cce05d7367ffedfaaa1bdda234b019df + md5: 620b85a3f45526a8bc4d23fd78fc22f0 + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 124834 + timestamp: 1771350416561 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda + sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc + md5: 4492fd26db29495f0ba23f146cd5638d + depends: + - __unix + license: ISC + purls: [] + size: 147413 + timestamp: 1772006283803 +- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-0.14.3-pyha770c72_0.conda + sha256: ec791bb6f1ef504411f87b28946a7ae63ed1f3681cefc462cf1dfdaf0790b6a9 + md5: 241ef6e3db47a143ac34c21bfba510f1 + depends: + - msgpack-python >=0.5.2,<2.0.0 + - python >=3.9 + - requests >=2.16.0 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/cachecontrol?source=hash-mapping + size: 23868 + timestamp: 1746103006628 +- conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda + sha256: 4ba4d08fba095556b7f1e06ec1dca068b367e68aadab0aca73115d02ddfcd518 + md5: b4af8c1b61929b1bcb001c2953882149 + depends: + - cachecontrol 0.14.3 pyha770c72_0 + - filelock >=3.8.0 + - python >=3.9 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 7203 + timestamp: 1746103018780 +- conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda + sha256: a6b118fd1ed6099dc4fc03f9c492b88882a780fadaef4ed4f93dc70757713656 + md5: 765c4d97e877cdbbb88ff33152b86125 + depends: + - python >=3.10 + license: ISC + purls: + - pkg:pypi/certifi?source=compressed-mapping + size: 151445 + timestamp: 1772001170301 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda + sha256: 2162a91819945c826c6ef5efe379e88b1df0fe9a387eeba23ddcf7ebeacd5bd6 + md5: d0616e7935acab407d1543b28c446f6f + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 298357 + timestamp: 1761202966461 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda + sha256: 10f6ca0e48bbed90b252fca49b188df0016b7033a9fcb472479585056fd38433 + md5: 59837145ebd94715f75b0f0aef732d5c + depends: + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - pycparser + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 316294 + timestamp: 1761203943693 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda + sha256: 1fa69651f5e81c25d48ac42064db825ed1a3e53039629db69f86b952f5ce603c + md5: 050374657d1c7a4f2ea443c0d0cbd9a0 + depends: + - __osx >=11.0 + - libffi >=3.5.2,<3.6.0a0 + - pycparser + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cffi?source=hash-mapping + size: 291376 + timestamp: 1761203583358 +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59 + md5: a22d1fd9bf98827e280a02875d9a007a + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/charset-normalizer?source=hash-mapping + size: 50965 + timestamp: 1760437331772 +- conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda + sha256: efed3fcc0cf751b27d7f493654c5f2fba664a263664bcde9bc3a7424c080c20a + md5: 0bbf06825d478dc823a7cea431b9108c + depends: + - crashtest >=0.4.1,<0.5.0 + - python >=3.9 + - rapidfuzz >=3.0.0,<4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/cleo?source=hash-mapping + size: 60988 + timestamp: 1734693824408 +- conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda + sha256: 38cfe1ee75b21a8361c8824f5544c3866f303af1762693a178266d7f198e8715 + md5: ea8a6c3256897cc31263de9f455e25d9 + depends: + - python >=3.10 + - __unix + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 97676 + timestamp: 1764518652276 +- conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 +- conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + noarch: generic + sha256: 7636809bda35add7af66cda1fee156136fcba0a1e24bbef1d591ee859df755a8 + md5: 9a4b8a37303b933b847c14a310f0557b + depends: + - python >=3.13,<3.14.0a0 + - python_abi * *_cp313 + license: Python-2.0 + purls: [] + size: 48648 + timestamp: 1770270374831 +- conda: https://conda.anaconda.org/conda-forge/noarch/crashtest-0.4.1-pyhd8ed1ab_1.conda + sha256: af1622b15f8c7411d9c14b8adf970cec16fec8a28b98069fdf42b1cd2259ccc9 + md5: e036e2f76d9c9aebc12510ed23352b6c + depends: + - python >=3.9,<4.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/crashtest?source=hash-mapping + size: 11619 + timestamp: 1733564888371 +- conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.5-py313heb322e3_0.conda + sha256: 553f4ee18ad755d690ad63fa8e00d89598ecc4945ec046a8af808ddee5bb1ca0 + md5: 964f25e322b16cae073da8f5b7adf123 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.14 + - libgcc >=14 + - openssl >=3.5.5,<4.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=compressed-mapping + size: 1718868 + timestamp: 1770772833949 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda + sha256: f799fc4ceb2b20bce5b7bbe4038c4fc273fb49d8ccc5d4bd7d34b434fd790ed0 + md5: 9f017a0f98d0efb83e04a5ce9f01598e + depends: + - cffi >=1.14 + - libgcc >=14 + - openssl >=3.5.5,<4.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT + license_family: BSD + purls: + - pkg:pypi/cryptography?source=hash-mapping + size: 1710168 + timestamp: 1770772502541 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h24cb091_1.conda + sha256: 8bb557af1b2b7983cf56292336a1a1853f26555d9c6cecf1e5b2b96838c9da87 + md5: ce96f2f470d39bd96ce03945af92e280 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - libzlib >=1.3.1,<2.0a0 + - libglib >=2.86.2,<3.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 447649 + timestamp: 1764536047944 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-h70963c4_1.conda + sha256: 3af801577431af47c0b72a82bb93c654f03072dece0a2a6f92df8a6802f52a22 + md5: a4b6b82427d15f0489cef0df2d82f926 + depends: + - libstdcxx >=14 + - libgcc >=14 + - libglib >=2.86.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + license: AFL-2.1 OR GPL-2.0-or-later + purls: [] + size: 480416 + timestamp: 1764536098891 +- conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda + sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e + md5: 003b8ba0a94e2f1e117d0bd46aebc901 + depends: + - python >=3.9 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/distlib?source=hash-mapping + size: 275642 + timestamp: 1752823081585 +- conda: https://conda.anaconda.org/conda-forge/noarch/dnspython-2.8.0-pyhcf101f3_0.conda + sha256: ef1e7b8405997ed3d6e2b6722bd7088d4a8adf215e7c88335582e65651fb4e05 + md5: d73fdc05f10693b518f52c994d748c19 + depends: + - python >=3.10,<4.0.0 + - sniffio + - python + constrains: + - aioquic >=1.2.0 + - cryptography >=45 + - httpcore >=1.0.0 + - httpx >=0.28.0 + - h2 >=4.2.0 + - idna >=3.10 + - trio >=0.30 + - wmi >=1.5.1 + license: ISC + purls: + - pkg:pypi/dnspython?source=hash-mapping + size: 196500 + timestamp: 1757292856922 +- conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda + sha256: d6954ebd80fba1fdaa8e9e11c9106587eba34c87fb5b2d5ea6a23f000d344d35 + md5: 937c48f60a79d07cd54890a7483e8ba1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - urllib3 >=1.25 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/dulwich?source=hash-mapping + size: 953624 + timestamp: 1728583364189 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda + sha256: 5f75a587de1f06f3177b6c6675c4d9c1b408600211ce6d3a753c9a1ed90096c9 + md5: 79dec55701f02ad2fc15447cee1cba27 + depends: + - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - urllib3 >=1.25 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/dulwich?source=hash-mapping + size: 954785 + timestamp: 1728583538300 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda + sha256: 543d8ba4b8cd1f39622ac1306e89493af15f29dfe9cf08b2e33fca82e14e29d6 + md5: 0574cb5f1ff2e7fbfedf33d9c16f521c + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - urllib3 >=1.25 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/dulwich?source=hash-mapping + size: 953265 + timestamp: 1728583634446 +- conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda + sha256: c37320864c35ef996b0e02e289df6ee89582d6c8e233e18dc9983375803c46bb + md5: 3bc0ac31178387e8ed34094d9481bfe8 + depends: + - dnspython >=2.0.0 + - idna >=2.0.0 + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/email-validator?source=hash-mapping + size: 46767 + timestamp: 1756221480106 +- conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + sha256: 6a518e00d040fcad016fb2dde29672aa3476cd9ae33ea5b7b257222e66037d89 + md5: 2452e434747a6b742adc5045f2182a8e + depends: + - email-validator >=2.3.0,<2.3.1.0a0 + license: Unlicense + purls: [] + size: 7077 + timestamp: 1756221480651 +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: h60d57d3_0 + subdir: osx-arm64 + variants: + target_platform: osx-arm64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: hb0f4dca_0 + subdir: linux-64 + variants: + target_platform: linux-64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null +- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 + name: emberjson + version: 0.3.1 + build: he8cfe8b_0 + subdir: linux-aarch64 + variants: + target_platform: linux-aarch64 + depends: + - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + channel: null +- conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda + sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 + md5: 8e662bd460bda79b1ea39194e3c4c9ab + depends: + - python >=3.10 + - typing_extensions >=4.6.0 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 21333 + timestamp: 1763918099466 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda + sha256: e8d77c988041d0dd56d6d89c82b5021400992c176341e901d6f7465863db92c4 + md5: 507d65b6f5dfcc13a9cc0ee18b497d09 + depends: + - fastapi-core ==0.127.1 pyhcf101f3_0 + - email_validator + - fastapi-cli + - httpx + - jinja2 + - pydantic-settings + - pydantic-extra-types + - python-multipart + - uvicorn-standard + license: MIT + license_family: MIT + purls: [] + size: 4807 + timestamp: 1766768870506 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda + sha256: cb60fc8c96dcd2a6335914d4d6d7d5f5549c9e1ff4533be28ba699e648babf37 + md5: 442ec6511754418c87a84bc1dc0c5384 + depends: + - python >=3.10 + - rich-toolkit >=0.14.8 + - tomli >=2.0.0 + - typer >=0.15.1 + - uvicorn-standard >=0.15.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastapi-cli?source=hash-mapping + size: 18920 + timestamp: 1771293215825 +- conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda + sha256: f9059587f6161f0cbd62c600f17d9164aa1e6062fda2f7a68f010dbf257b7c56 + md5: 8d9e16861f5a037242d78e194c8d0b57 + depends: + - python >=3.10 + - annotated-doc >=0.0.2 + - starlette >=0.40.0,<0.51.0 + - typing_extensions >=4.8.0 + - pydantic >=2.7.0 + - python + constrains: + - email_validator >=2.0.0 + - fastapi-cli >=0.0.8 + - httpx >=0.23.0,<1.0.0 + - jinja2 >=3.1.5 + - pydantic-extra-types >=2.0.0 + - pydantic-settings >=2.0.0 + - python-multipart >=0.0.18 + - uvicorn-standard >=0.12.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/fastapi?source=hash-mapping + size: 89283 + timestamp: 1766768870504 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + sha256: 6d576ed3bd0e7c57b1144f0b2014de9ea3fab9786316bc3e748105d44e0140a0 + md5: 9dbb20eec24beb026291c20a35ce1ff9 + depends: + - python >=3.10 + license: Unlicense + purls: + - pkg:pypi/filelock?source=compressed-mapping + size: 24808 + timestamp: 1771468713029 +- conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda + sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb + md5: b8993c19b0c32a2f7b66cbb58ca27069 + depends: + - python >=3.10 + - typing_extensions + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h11?source=compressed-mapping + size: 39069 + timestamp: 1767729720872 +- conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda + sha256: 84c64443368f84b600bfecc529a1194a3b14c3656ee2e832d15a20e0329b6da3 + md5: 164fc43f0b53b6e3a7bc7dce5e4f1dc9 + depends: + - python >=3.10 + - hyperframe >=6.1,<7 + - hpack >=4.1,<5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/h2?source=hash-mapping + size: 95967 + timestamp: 1756364871835 +- conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda + sha256: 6ad78a180576c706aabeb5b4c8ceb97c0cb25f1e112d76495bff23e3779948ba + md5: 0a802cb9888dd14eeefc611f05c40b6e + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hpack?source=hash-mapping + size: 30731 + timestamp: 1737618390337 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.9-pyh29332c3_0.conda + sha256: 04d49cb3c42714ce533a8553986e1642d0549a05dc5cc48e0d43ff5be6679a5b + md5: 4f14640d58e2cc0aa0819d9d8ba125bb + depends: + - python >=3.9 + - h11 >=0.16 + - h2 >=3,<5 + - sniffio 1.* + - anyio >=4.0,<5.0 + - certifi + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpcore?source=hash-mapping + size: 49483 + timestamp: 1745602916758 +- conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.7.1-py313h07c4f96_1.conda + sha256: 0d549eca227e015b272c33646cdaed34d4619f6fe6d6196e2fddc31ec5144df9 + md5: 98e227930f49172e4f44ae8063341b0e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/httptools?source=hash-mapping + size: 98479 + timestamp: 1762504150954 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.7.1-py313h6194ac5_1.conda + sha256: 3f626ee931ff4dab97c423575141a5479a0f85359a2a85e40782461d1f300929 + md5: 3bcdc18bbf06931f4d3238551ff8cf23 + depends: + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/httptools?source=hash-mapping + size: 96680 + timestamp: 1762504216568 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.7.1-py313h6535dbc_1.conda + sha256: 96a97f65ebf4944b94a5a7cac5da5b0f63b407de8a896567d1b7374cf2516071 + md5: c5a14118255fb5dea8ca89a330e5a231 + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/httptools?source=hash-mapping + size: 90169 + timestamp: 1762504332321 +- conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda + sha256: cd0f1de3697b252df95f98383e9edb1d00386bfdd03fdf607fa42fe5fcb09950 + md5: d6989ead454181f4f9bc987d3dc4e285 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/httpx?source=hash-mapping + size: 63082 + timestamp: 1733663449209 +- conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda + sha256: 77af6f5fe8b62ca07d09ac60127a30d9069fdc3c68d6b256754d0ffb1f7779f8 + md5: 8e6923fc12f1fe8f8c4e5c9f343256ac + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/hyperframe?source=hash-mapping + size: 17397 + timestamp: 1737618427549 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 + md5: 186a18e3ba246eccfc7cff00cd19a870 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12728445 + timestamp: 1767969922681 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + sha256: dcbaa3042084ac58685e3ef4547e4c4be9d37dc52b92ea18581288af95e48b52 + md5: 998ee7d53e32f7ab57fc35707285527e + depends: + - libgcc >=14 + - libstdcxx >=14 + license: MIT + license_family: MIT + purls: [] + size: 12851689 + timestamp: 1772208964788 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + sha256: 24bc62335106c30fecbcc1dba62c5eba06d18b90ea1061abd111af7b9c89c2d7 + md5: 114e6bfe7c5ad2525eb3597acdbf2300 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 12389400 + timestamp: 1772209104304 +- conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda + sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 + md5: 53abe63df7e10a6ba605dc5f9f961d36 + depends: + - python >=3.10 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/idna?source=hash-mapping + size: 50721 + timestamp: 1760286526795 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 + md5: 63ccfdc3a3ce25b027b8767eb722fca8 + depends: + - python >=3.9 + - zipp >=3.20 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-metadata?source=hash-mapping + size: 34641 + timestamp: 1747934053147 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda + sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 + md5: c85c76dc67d75619a92f51dfbce06992 + depends: + - python >=3.9 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.5.2,<6.5.3.0a0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/importlib-resources?source=hash-mapping + size: 33781 + timestamp: 1736252433366 +- conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda + sha256: 13b0005877f553eb2e5c50447c9d0047e7257124ec2d1569d7dad35697790237 + md5: 55a61979242077b2cc377c74326ea9f0 + depends: + - importlib-metadata >=4.6.0 + - python >=3.10,<4.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/isort?source=hash-mapping + size: 74876 + timestamp: 1760192714356 +- conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda + sha256: 3cc991f0f09dfd00d2626e745ba68da03e4f1dcbb7b36dd20f7a7373643cd5d5 + md5: d59568bad316413c89831456e691de29 + depends: + - python >=3.10 + - more-itertools + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/jaraco-classes?source=hash-mapping + size: 14831 + timestamp: 1767294269456 +- conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda + sha256: 00d37d85ca856431c67c8f6e890251e7cc9e5ef3724a0302b8d4a101f22aa27f + md5: b4b91eb14fbe2f850dd2c5fc20676c0d + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/jeepney?source=hash-mapping + size: 40015 + timestamp: 1740828380668 +- conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda + sha256: fc9ca7348a4f25fed2079f2153ecdcf5f9cf2a0bc36c4172420ca09e1849df7b + md5: 04558c96691bed63104678757beb4f8d + depends: + - markupsafe >=2.0 + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jinja2?source=compressed-mapping + size: 120685 + timestamp: 1764517220861 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda + sha256: 19d8bd5bb2fde910ec59e081eeb59529491995ce0d653a5209366611023a0b3a + md5: 4ebae00eae9705b0c3d6d1018a81d047 + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.9 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-client?source=hash-mapping + size: 106342 + timestamp: 1733441040958 +- conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda + sha256: 1d34b80e5bfcd5323f104dbf99a2aafc0e5d823019d626d0dce5d3d356a2a52a + md5: b38fe4e78ee75def7e599843ef4c1ab0 + depends: + - __unix + - python + - platformdirs >=2.5 + - python >=3.10 + - traitlets >=5.3 + - python + constrains: + - pywin32 >=300 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/jupyter-core?source=hash-mapping + size: 65503 + timestamp: 1760643864586 +- conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyh534df25_1.conda + sha256: 45e766c67b5102e786d800f62dcbf0240997d90febcc437fb5566d1a76a5aa0f + md5: 3b82d63a01a6bfe5159f9f287672230b + depends: + - __osx + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36466 + timestamp: 1728574973482 +- conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda + sha256: ce92b6e29a6801ebe6665e731e609ab1b05645bceae8a6efcd8edae44fa82452 + md5: b316b0f73ba0ab970d45b179e0c4c041 + depends: + - __linux + - importlib-metadata >=4.11.4 + - importlib_resources + - jaraco.classes + - jeepney >=0.4.2 + - python >=3.8 + - secretstorage >=3.2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/keyring?source=hash-mapping + size: 36220 + timestamp: 1728574952762 +- conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda + sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 + md5: b38117a3c920364aff79f870c984b4a3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 134088 + timestamp: 1754905959823 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda + sha256: 5ce830ca274b67de11a7075430a72020c1fb7d486161a82839be15c2b84e9988 + md5: e7df0aab10b9cbb73ab2a467ebfaf8c7 + depends: + - libgcc >=13 + license: LGPL-2.1-or-later + purls: [] + size: 129048 + timestamp: 1754906002667 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1370023 + timestamp: 1719463201255 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda + sha256: 0ec272afcf7ea7fbf007e07a3b4678384b7da4047348107b2ae02630a570a815 + md5: 29c10432a2ca1472b53f299ffb2ffa37 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1474620 + timestamp: 1719463205834 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1155530 + timestamp: 1719463474401 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 + md5: 12bd9a3f089ee6c9266a37dab82afabd + depends: + - __glibc >=2.17,<3.0.a0 + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 725507 + timestamp: 1770267139900 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 + md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 + depends: + - zstd >=1.5.7,<1.6.0a0 + constrains: + - binutils_impl_linux-aarch64 2.45.1 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 875924 + timestamp: 1770267209884 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda + build_number: 5 + sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c + md5: c160954f7418d7b6e87eaf05a8913fa9 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - mkl <2026 + - liblapack 3.11.0 5*_openblas + - libcblas 3.11.0 5*_openblas + - blas 2.305 openblas + - liblapacke 3.11.0 5*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18213 + timestamp: 1765818813880 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda + build_number: 5 + sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 + md5: 5afcea37a46f76ec1322943b3c4dfdc0 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - mkl <2026 + - libcblas 3.11.0 5*_openblas + - liblapack 3.11.0 5*_openblas + - liblapacke 3.11.0 5*_openblas + - blas 2.305 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18369 + timestamp: 1765818610617 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda + build_number: 5 + sha256: 620a6278f194dcabc7962277da6835b1e968e46ad0c8e757736255f5ddbfca8d + md5: bcc025e2bbaf8a92982d20863fe1fb69 + depends: + - libopenblas >=0.3.30,<0.3.31.0a0 + - libopenblas >=0.3.30,<1.0a0 + constrains: + - libcblas 3.11.0 5*_openblas + - liblapack 3.11.0 5*_openblas + - liblapacke 3.11.0 5*_openblas + - blas 2.305 openblas + - mkl <2026 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18546 + timestamp: 1765819094137 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda + build_number: 5 + sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 + md5: 6636a2b6f1a87572df2970d3ebc87cc0 + depends: + - libblas 3.11.0 5_h4a7cf45_openblas + constrains: + - liblapacke 3.11.0 5*_openblas + - blas 2.305 openblas + - liblapack 3.11.0 5*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18194 + timestamp: 1765818837135 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda + build_number: 5 + sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 + md5: 0b2f1143ae2d0aa4c991959d0daaf256 + depends: + - libblas 3.11.0 5_haddc8a3_openblas + constrains: + - liblapack 3.11.0 5*_openblas + - liblapacke 3.11.0 5*_openblas + - blas 2.305 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18371 + timestamp: 1765818618899 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda + build_number: 5 + sha256: 38809c361bbd165ecf83f7f05fae9b791e1baa11e4447367f38ae1327f402fc0 + md5: efd8bd15ca56e9d01748a3beab8404eb + depends: + - libblas 3.11.0 5_h51639a9_openblas + constrains: + - liblapacke 3.11.0 5*_openblas + - liblapack 3.11.0 5*_openblas + - blas 2.305 openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18548 + timestamp: 1765819108956 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb + md5: e9c56daea841013e7774b5cd46f41564 + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 568910 + timestamp: 1772001095642 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda + sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 + md5: c277e0a4d549b03ac1e9d6cbbe3d017b + depends: + - ncurses + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 134676 + timestamp: 1738479519902 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda + sha256: c0b27546aa3a23d47919226b3a1635fccdb4f24b94e72e206a751b33f46fd8d6 + md5: fb640d776fc92b682a14e001980825b1 + depends: + - ncurses + - libgcc >=13 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148125 + timestamp: 1738479808948 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 + md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 76798 + timestamp: 1771259418166 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 + md5: 57f3b3da02a50a1be2a6fe847515417d + depends: + - libgcc >=14 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 76564 + timestamp: 1771259530958 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf + md5: a92e310ae8dfc206ff449f362fc4217f + depends: + - __osx >=11.0 + constrains: + - expat 2.7.4.* + license: MIT + license_family: MIT + purls: [] + size: 68199 + timestamp: 1771260020767 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda + sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 + md5: a360c33a5abe61c07959e449fa1453eb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 58592 + timestamp: 1769456073053 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda + sha256: 3df4c539449aabc3443bbe8c492c01d401eea894603087fca2917aa4e1c2dea9 + md5: 2f364feefb6a7c00423e80dcb12db62a + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 55952 + timestamp: 1769456078358 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda + sha256: 6686a26466a527585e6a75cc2a242bf4a3d97d6d6c86424a441677917f28bec7 + md5: 43c04d9cb46ef176bb2a4c77e324d599 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 40979 + timestamp: 1769456747661 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda + sha256: faf7d2017b4d718951e3a59d081eb09759152f93038479b768e3d612688f83f5 + md5: 0aa00f03f9e39fb9876085dee11a85d4 + depends: + - __glibc >=2.17,<3.0.a0 + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1041788 + timestamp: 1771378212382 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda + sha256: 43df385bedc1cab11993c4369e1f3b04b4ca5d0ea16cba6a0e7f18dbc129fcc9 + md5: 552567ea2b61e3a3035759b2fdb3f9a6 + depends: + - _openmp_mutex >=4.5 + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 h8acb6b2_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 622900 + timestamp: 1771378128706 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda + sha256: 1d9c4f35586adb71bcd23e31b68b7f3e4c4ab89914c26bed5f2859290be5560e + md5: 92df6107310b1fff92c4cc84f0de247b + depends: + - _openmp_mutex + constrains: + - libgcc-ng ==15.2.0=*_18 + - libgomp 15.2.0 18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 401974 + timestamp: 1771378877463 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda + sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 + md5: d5e96b1ed75ca01906b3d2469b4ce493 + depends: + - libgcc 15.2.0 he0feb66_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27526 + timestamp: 1771378224552 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda + sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f + md5: 4feebd0fbf61075a1a9c2e9b3936c257 + depends: + - libgcc 15.2.0 h8acb6b2_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27568 + timestamp: 1771378136019 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda + sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee + md5: 9063115da5bc35fdc3e1002e69b9ef6e + depends: + - libgfortran5 15.2.0 h68bc16d_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27523 + timestamp: 1771378269450 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda + sha256: 7dcd7dff2505d56fd5272a6e712ec912f50a46bf07dc6873a7e853694304e6e4 + md5: 41f261f5e4e2e8cbd236c2f1f15dae1b + depends: + - libgfortran5 15.2.0 h1b7bec0_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27587 + timestamp: 1771378169244 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda + sha256: 63f89087c3f0c8621c5c89ecceec1e56e5e1c84f65fc9c5feca33a07c570a836 + md5: 26981599908ed2205366e8fc91b37fc6 + depends: + - libgfortran5 15.2.0 hdae7583_18 + constrains: + - libgfortran-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 138973 + timestamp: 1771379054939 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda + sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 + md5: 646855f357199a12f02a87382d429b75 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 2482475 + timestamp: 1771378241063 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda + sha256: 85347670dfb4a8d4c13cd7cae54138dcf2b1606b6bede42eef5507bf5f9660c6 + md5: 574d88ce3348331e962cfa5ed451b247 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 1486341 + timestamp: 1771378148102 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda + sha256: 91033978ba25e6a60fb86843cf7e1f7dc8ad513f9689f991c9ddabfaf0361e7e + md5: c4a6f7989cffb0544bfd9207b6789971 + depends: + - libgcc >=15.2.0 + constrains: + - libgfortran 15.2.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 598634 + timestamp: 1771378886363 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda + sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce + md5: bb26456332b07f68bf3b7622ed71c0da + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4398701 + timestamp: 1771863239578 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda + sha256: afc503dbd04a5bf2709aa9d8318a03a8c4edb389f661ff280c3494bfef4341ec + md5: 4ac4372fc4d7f20630a91314cdac8afd + depends: + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.47,<10.48.0a0 + constrains: + - glib 2.86.4 *_1 + license: LGPL-2.1-or-later + purls: [] + size: 4512186 + timestamp: 1771863220969 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda + sha256: 21337ab58e5e0649d869ab168d4e609b033509de22521de1bfed0c031bfc5110 + md5: 239c5e9546c38a1e884d69effcf4c882 + depends: + - __glibc >=2.17,<3.0.a0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 603262 + timestamp: 1771378117851 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda + sha256: fc716f11a6a8525e27a5d332ef6a689210b0d2a4dd1133edc0f530659aa9faa6 + md5: 4faa39bf919939602e594253bd673958 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 588060 + timestamp: 1771378040807 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda + sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f + md5: 915f5995e94f60e9a4826e0b0920ee88 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 790176 + timestamp: 1754908768807 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda + sha256: 1473451cd282b48d24515795a595801c9b65b567fe399d7e12d50b2d6cdb04d9 + md5: 5a86bf847b9b926f3a4f203339748d78 + depends: + - libgcc >=14 + license: LGPL-2.1-only + purls: [] + size: 791226 + timestamp: 1754910975665 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda + build_number: 5 + sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 + md5: b38076eb5c8e40d0106beda6f95d7609 + depends: + - libblas 3.11.0 5_h4a7cf45_openblas + constrains: + - blas 2.305 openblas + - liblapacke 3.11.0 5*_openblas + - libcblas 3.11.0 5*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18200 + timestamp: 1765818857876 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda + build_number: 5 + sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 + md5: 88d1e4133d1182522b403e9ba7435f04 + depends: + - libblas 3.11.0 5_haddc8a3_openblas + constrains: + - liblapacke 3.11.0 5*_openblas + - blas 2.305 openblas + - libcblas 3.11.0 5*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18392 + timestamp: 1765818627104 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda + build_number: 5 + sha256: 735a6e6f7d7da6f718b6690b7c0a8ae4815afb89138aa5793abe78128e951dbb + md5: ca9d752201b7fa1225bca036ee300f2b + depends: + - libblas 3.11.0 5_h51639a9_openblas + constrains: + - libcblas 3.11.0 5*_openblas + - blas 2.305 openblas + - liblapacke 3.11.0 5*_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 18551 + timestamp: 1765819121855 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda + sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb + md5: c7c83eecbb72d88b940c249af56c8b17 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + constrains: + - xz 5.8.2.* + license: 0BSD + purls: [] + size: 113207 + timestamp: 1768752626120 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda + sha256: 843c46e20519651a3e357a8928352b16c5b94f4cd3d5481acc48be2e93e8f6a3 + md5: 96944e3c92386a12755b94619bae0b35 + depends: + - libgcc >=14 + constrains: + - xz 5.8.2.* + license: 0BSD + purls: [] + size: 125916 + timestamp: 1768754941722 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda + sha256: 7bfc7ffb2d6a9629357a70d4eadeadb6f88fa26ebc28f606b1c1e5e5ed99dc7e + md5: 009f0d956d7bfb00de86901d16e486c7 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.2.* + license: 0BSD + purls: [] + size: 92242 + timestamp: 1768752982486 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda + sha256: fe171ed5cf5959993d43ff72de7596e8ac2853e9021dec0344e583734f1e0843 + md5: 2c21e66f50753a083cbe6b80f38268fa + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 92400 + timestamp: 1769482286018 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda + sha256: 57c0dd12d506e84541c4e877898bd2a59cca141df493d34036f18b2751e0a453 + md5: 7b9813e885482e3ccb1fa212b86d7fd0 + depends: + - libgcc >=14 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 114056 + timestamp: 1769482343003 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda + sha256: 1089c7f15d5b62c622625ec6700732ece83be8b705da8c6607f4dabb0c4bd6d2 + md5: 57c4be259f5e0b99a5983799a228ae55 + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 73690 + timestamp: 1769482560514 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda + sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 + md5: be43915efc66345cccb3c310b6ed0374 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 5927939 + timestamp: 1763114673331 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda + sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 + md5: 11d7d57b7bdd01da745bbf2b67020b2e + depends: + - libgcc >=14 + - libgfortran + - libgfortran5 >=14.3.0 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4959359 + timestamp: 1763114173544 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda + sha256: ebbbc089b70bcde87c4121a083c724330f02a690fb9d7c6cd18c30f1b12504fa + md5: a6f6d3a31bb29e48d37ce65de54e2df0 + depends: + - __osx >=11.0 + - libgfortran + - libgfortran5 >=14.3.0 + - llvm-openmp >=19.1.7 + constrains: + - openblas >=0.3.30,<0.3.31.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4284132 + timestamp: 1768547079205 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 + depends: + - libgcc-ng >=12 + license: ISC + purls: [] + size: 205978 + timestamp: 1716828628198 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda + sha256: 448df5ea3c5cf1af785aad46858d7a5be0522f4234a4dc9bb764f4d11ff3b981 + md5: 2e4a8f23bebdcb85ca8e5a0fbe75666a + depends: + - libgcc-ng >=12 + license: ISC + purls: [] + size: 177394 + timestamp: 1716828514515 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda + sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 + md5: a7ce36e284c5faaf93c220dfc39e3abd + depends: + - __osx >=11.0 + license: ISC + purls: [] + size: 164972 + timestamp: 1716828607917 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 + md5: da5be73701eecd0e8454423fd6ffcf30 + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 942808 + timestamp: 1768147973361 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b + md5: 4e3ba0d5d192f99217b85f07a0761e64 + depends: + - icu >=78.2,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 944688 + timestamp: 1768147991301 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 + md5: 4b0bf313c53c3e89692f020fb55d5f2c + depends: + - __osx >=11.0 + - icu >=78.2,<79.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 909777 + timestamp: 1768148320535 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda + sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e + md5: 1b08cd684f34175e4514474793d44bcb + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc 15.2.0 he0feb66_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5852330 + timestamp: 1771378262446 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda + sha256: 31fdb9ffafad106a213192d8319b9f810e05abca9c5436b60e507afb35a6bc40 + md5: f56573d05e3b735cb03efeb64a15f388 + depends: + - libgcc 15.2.0 h8acb6b2_18 + constrains: + - libstdcxx-ng ==15.2.0=*_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 5541411 + timestamp: 1771378162499 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda + sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 + md5: 6235adb93d064ecdf3d44faee6f468de + depends: + - libstdcxx 15.2.0 h934c35e_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27575 + timestamp: 1771378314494 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda + sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 + md5: 699d294376fe18d80b7ce7876c3a875d + depends: + - libstdcxx 15.2.0 hef695bb_18 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 27645 + timestamp: 1771378204663 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda + sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee + md5: db409b7c1720428638e7c0d509d3e1b5 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40311 + timestamp: 1766271528534 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda + sha256: c37a8e89b700646f3252608f8368e7eb8e2a44886b92776e57ad7601fc402a11 + md5: cf2861212053d05f27ec49c3784ff8bb + depends: + - libgcc >=14 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 43453 + timestamp: 1766271546875 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda + sha256: c180f4124a889ac343fc59d15558e93667d894a966ec6fdb61da1604481be26b + md5: 0f03292cc56bf91a077a134ea8747118 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 895108 + timestamp: 1753948278280 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda + sha256: 7a0fb5638582efc887a18b7d270b0c4a6f6e681bf401cab25ebafa2482569e90 + md5: 8e62bf5af966325ee416f19c6f14ffa3 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 629238 + timestamp: 1753948296190 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda + sha256: 042c7488ad97a5629ec0a991a8b2a3345599401ecc75ad6a5af73b60e6db9689 + md5: c0d87c3c8e075daf1daf6c31b53e8083 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 421195 + timestamp: 1753948426421 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 60963 + timestamp: 1727963148474 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 + md5: 08aad7cbe9f5a6b460d0976076b6ae64 + depends: + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 66657 + timestamp: 1727963199518 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda + sha256: 0daeedb3872ad0fdd6f0d7e7165c63488e8a315d7057907434145fba0c1e7b3d + md5: ff0820b5588b20be3b858552ecf8ffae + depends: + - __osx >=11.0 + constrains: + - openmp 22.1.0|22.1.0.* + - intel-openmp <0.0a0 + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 285558 + timestamp: 1772028716784 +- conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda + sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e + md5: 5b5203189eb668f042ac2b0826244964 + depends: + - mdurl >=0.1,<1 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/markdown-it-py?source=hash-mapping + size: 64736 + timestamp: 1754951288511 +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda + sha256: a530a411bdaaf0b1e4de8869dfaca46cb07407bc7dc0702a9e231b0e5ce7ca85 + md5: c14389156310b8ed3520d84f854be1ee + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25909 + timestamp: 1759055357045 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda + sha256: c03eb8f5a4659ce31e698a328372f6b0357644d557ea0dc01fe0c5897c231c48 + md5: 59fc93a010d6e8a08a4fa32424d86a82 + depends: + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 26403 + timestamp: 1759056219797 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda + sha256: e06902a1bf370fdd4ada0a8c81c504868fdb7e9971b72c6bd395aa4e5a497bd2 + md5: 3df5979cc0b761dda0053ffdb0bca3ea + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/markupsafe?source=hash-mapping + size: 25778 + timestamp: 1759055530601 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + noarch: python + sha256: 0f0ab2f64bb4ab1894b2c57d54399c6b5c75221e6c7e3330c6340de7e6fa6eb5 + md5: b9de2d4ff087e633552873b413ab340a + depends: + - python >=3.10 + - click >=8.0.0 + - mypy_extensions >=0.4.3 + - packaging >=22.0 + - pathspec >=0.9.0 + - platformdirs >=2 + - tomli >=1.1.0 + license: MIT + size: 137585 + timestamp: 1772213460841 +- conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda + sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 + md5: 592132998493b3ff25fd7479396e8351 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mdurl?source=hash-mapping + size: 14465 + timestamp: 1733255681319 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda + sha256: bc6ab6fb14691830b2822a2b181ca50455fcdec1b0ac2b269cfd71fad7e3ce25 + md5: 8e3aa23ad118400f4a580385512d79f2 + depends: + - python >=3.10 + - mojo-compiler ==0.26.2.0.dev2026022717 release + - mblack ==26.2.0.dev2026022717 release + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + size: 89035384 + timestamp: 1772213460841 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda + sha256: 5449c7f93e8ce219af893b0cfa7293b3dbeaa9b8e619eb396f8abbc7c5804d53 + md5: 79db16064a6434e1bd949cb250d9b4a4 + depends: + - python >=3.10 + - mojo-compiler ==0.26.2.0.dev2026022717 release + - mblack ==26.2.0.dev2026022717 release + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + size: 87708051 + timestamp: 1772213472504 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda + sha256: 53a47ff778b15eda6472699ae904635b01c3a114d42720450491b10b42c80a80 + md5: f298597804bdc77830e662e2e1ef444d + depends: + - python >=3.10 + - mojo-compiler ==0.26.2.0.dev2026022717 release + - mblack ==26.2.0.dev2026022717 release + - jupyter_client >=8.6.2,<8.7 + license: LicenseRef-Modular-Proprietary + size: 75792236 + timestamp: 1772213491 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + sha256: f0b50c3da97d5f8b435db7b1892c02a05bbefa15fdde606b05d88be9e8c78005 + md5: 1c2ca9a1f5fe14383a8c17957e5bbbe5 + depends: + - mojo-python ==0.26.2.0.dev2026022717 release + license: LicenseRef-Modular-Proprietary + size: 87885086 + timestamp: 1772213460840 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + sha256: aba55db5744956faa1b0b03a69186507f3447c6d96689b03fe355f914c9e3729 + md5: 6586bf1e577cba97407fb577f38a784c + depends: + - mojo-python ==0.26.2.0.dev2026022717 release + license: LicenseRef-Modular-Proprietary + size: 85087098 + timestamp: 1772213472501 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda + sha256: e681f020dfd4d201aa186fb726908679df6aa66f482826b540f355f369fcab73 + md5: 391336db267a56b7348d8321af7863d2 + depends: + - mojo-python ==0.26.2.0.dev2026022717 release + license: LicenseRef-Modular-Proprietary + size: 66389971 + timestamp: 1772213490995 +- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + noarch: python + sha256: e211dc8d85f082c78344a497eea6dcef58fc8011089b60cf990c02a99daef62f + md5: 61d08469d447f5652f97e9ed856790fe + depends: + - python + license: LicenseRef-Modular-Proprietary + size: 679530 + timestamp: 1772213460836 +- conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda + sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a + md5: 32f78e9d06e8593bc4bbf1338da06f5f + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/more-itertools?source=hash-mapping + size: 69210 + timestamp: 1764487059562 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda + sha256: fac37e267dd1d07527f0b078ffe000916e80e8c89cfe69d466f5775b88e93df2 + md5: cd1cfde0ea3bca6c805c73ffa988b12a + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 103129 + timestamp: 1762504205590 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda + sha256: bb8be63d71f7a060dd69acaade9cc8141302df52a65a538ad3e2ee61d772b3e6 + md5: b55870c4ec681604a65f422cddd755a7 + depends: + - libgcc >=14 + - libstdcxx >=14 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 99460 + timestamp: 1762504133614 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda + sha256: b4a7557abb838de3890ceee6c61f78540b4b8ce74f2a03c334d7df5d476f7faa + md5: 78bc73f3c5e84b432cdea463ea4e953e + depends: + - __osx >=11.0 + - libcxx >=19 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/msgpack?source=hash-mapping + size: 91725 + timestamp: 1762504404391 +- conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda + sha256: 6ed158e4e5dd8f6a10ad9e525631e35cee8557718f83de7a4e3966b1f772c4b1 + md5: e9c622e0d00fa24a6292279af3ab6d06 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/mypy-extensions?source=hash-mapping + size: 11766 + timestamp: 1745776666688 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda + sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 + md5: 47e340acb35de30501a76c7c799c41d7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 891641 + timestamp: 1738195959188 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda + sha256: 91cfb655a68b0353b2833521dc919188db3d8a7f4c64bea2c6a7557b24747468 + md5: 182afabe009dc78d8b73100255ee6868 + depends: + - libgcc >=13 + license: X11 AND BSD-3-Clause + purls: [] + size: 926034 + timestamp: 1738196018799 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 797030 + timestamp: 1738196177597 +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda + sha256: 2eb8be25a7504f058a153a84be70471e0ebbf6bd0411ae2b6d34904b89d86fe3 + md5: ca9c6ba4beac38cb3d0a85afde27f94c + depends: + - python + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libstdcxx >=14 + - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 8857152 + timestamp: 1770098515258 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda + sha256: 7acd65fef10bb9bb6385e154e3a55c60b3320b0886005bf93ef14f3ea027d4e9 + md5: b40ed3c04212930574f77fc500436106 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - python 3.13.* *_cp313 + - python_abi 3.13.* *_cp313 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 7931090 + timestamp: 1770098524373 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda + sha256: 3e23ed9eb63d9ce4dc585aad6b65e0197d7e9f28877acf7114cc64f33763a420 + md5: e34e9c58a0ee3eca3def3bb477797621 + depends: + - python + - __osx >=11.0 + - python 3.13.* *_cp313 + - libcxx >=19 + - liblapack >=3.9.0,<4.0a0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6925963 + timestamp: 1770098439599 +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda + sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c + md5: f61eb8cd60ff9057122a3d338b99c00f + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3164551 + timestamp: 1769555830639 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda + sha256: 7f8048c0e75b2620254218d72b4ae7f14136f1981c5eb555ef61645a9344505f + md5: 25f5885f11e8b1f075bccf4a2da91c60 + depends: + - ca-certificates + - libgcc >=14 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3692030 + timestamp: 1769557678657 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda + sha256: 361f5c5e60052abc12bdd1b50d7a1a43e6a6653aab99a2263bf2288d709dcf67 + md5: f4f6ad63f98f64191c3e77c5f5f29d76 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3104268 + timestamp: 1769556384749 +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=compressed-mapping + size: 72010 + timestamp: 1769093650580 +- conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda + sha256: 29ea20d0faf20374fcd61c25f6d32fb8e9a2c786a7f1473a0c3ead359470fbe1 + md5: 2908273ac396d2cd210a8127f5f1c0d6 + depends: + - python >=3.10 + license: MPL-2.0 + license_family: MOZILLA + purls: + - pkg:pypi/pathspec?source=hash-mapping + size: 53739 + timestamp: 1769677743677 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff + md5: 7a3bff861a6583f1889021facefc08b1 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1222481 + timestamp: 1763655398280 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda + sha256: 04df2cee95feba440387f33f878e9f655521e69f4be33a0cd637f07d3d81f0f9 + md5: 1a30c42e32ca0ea216bd0bfe6f842f0b + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 1166552 + timestamp: 1763655534263 +- conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda + sha256: 202af1de83b585d36445dc1fda94266697341994d1a3328fabde4989e1b3d07a + md5: d0d408b1f18883a944376da5cf8101ea + depends: + - ptyprocess >=0.5 + - python >=3.9 + license: ISC + purls: + - pkg:pypi/pexpect?source=hash-mapping + size: 53561 + timestamp: 1733302019362 +- conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda + sha256: 353fd5a2c3ce31811a6272cd328874eb0d327b1eafd32a1e19001c4ad137ad3a + md5: dc702b2fae7ebe770aff3c83adb16b63 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pkginfo?source=hash-mapping + size: 30536 + timestamp: 1739984682585 +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa + md5: 4fefefb892ce9cc1539405bec2f1a6cd + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=compressed-mapping + size: 25643 + timestamp: 1771233827084 +- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda + sha256: c5ab8a98f25d6416ef40761db1d8f5cea3ea67a28051d3d17829347c63dede67 + md5: 669f9224d31f304bc632f346734d987a + depends: + - __osx + - cachecontrol >=0.14.0,<0.15.0 + - cachecontrol-with-filecache + - cleo >=2.1.0,<3.0.0 + - crashtest >=0.4.1,<0.5.0 + - dulwich >=0.21.2,<0.22.0 + - importlib-metadata >=4.4 + - keyring >=24.0.0,<25.0.0 + - packaging >=23.1 + - pexpect >=4.7.0,<5.0.0 + - pkginfo >=1.12.0,<2.0.0 + - platformdirs >=3.0.0,<5 + - poetry-core 1.9.1.* + - poetry-plugin-export >=1.6.0,<2.0.0 + - pyproject_hooks >=1.0.0,<2.0.0 + - python >=3.9,<4.0 + - python-build >=1.0.3,<2.0.0 + - python-fastjsonschema >=2.18.0,<3.0.0 + - python-installer >=0.7.0,<0.8.0 + - requests >=2.26.0,<3.0.0 + - requests-toolbelt >=1.0.0,<2.0.0 + - shellingham >=1.5.0,<2.0.0 + - tomli >=2.0.1,<3.0.0 + - tomlkit >=0.11.4,<1.0.0 + - trove-classifiers >=2022.5.19 + - virtualenv >=20.26.6,<21.0.0 + - xattr >=1.0.0,<2.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/poetry?source=hash-mapping + size: 168589 + timestamp: 1733685738546 +- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda + sha256: 8d345b52a0ab7d1d223d52abb96743935dad7d4b20579819ffc0a53cab59f83c + md5: 528f30caa8073dc3d1dccaa1945d5d77 + depends: + - __linux + - cachecontrol >=0.14.0,<0.15.0 + - cachecontrol-with-filecache + - cleo >=2.1.0,<3.0.0 + - crashtest >=0.4.1,<0.5.0 + - dulwich >=0.21.2,<0.22.0 + - importlib-metadata >=4.4 + - keyring >=24.0.0,<25.0.0 + - packaging >=23.1 + - pexpect >=4.7.0,<5.0.0 + - pkginfo >=1.12.0,<2.0.0 + - platformdirs >=3.0.0,<5 + - poetry-core 1.9.1.* + - poetry-plugin-export >=1.6.0,<2.0.0 + - pyproject_hooks >=1.0.0,<2.0.0 + - python >=3.9,<4.0 + - python-build >=1.0.3,<2.0.0 + - python-fastjsonschema >=2.18.0,<3.0.0 + - python-installer >=0.7.0,<0.8.0 + - requests >=2.26.0,<3.0.0 + - requests-toolbelt >=1.0.0,<2.0.0 + - shellingham >=1.5.0,<2.0.0 + - tomli >=2.0.1,<3.0.0 + - tomlkit >=0.11.4,<1.0.0 + - trove-classifiers >=2022.5.19 + - virtualenv >=20.26.6,<21.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/poetry?source=hash-mapping + size: 167239 + timestamp: 1733685701827 +- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda + sha256: 04cce51723798d47f32d53e551d2b85652e318f6d705c8c2d09c1c0cf42baf0f + md5: 87a1f8109aa3ac06bc0a5b93473914ee + depends: + - python >=3.9,<4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/poetry-core?source=hash-mapping + size: 226099 + timestamp: 1733215885921 +- conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda + sha256: e677b46d8c02723d7ea3910591eabf7b5ce3bf11d490f9bb78cf2edca049408a + md5: c4879582684cf4037f0aa20c81ab09cd + depends: + - poetry >=1.8.0,<3.0.0 + - poetry-core >=1.7.0,<3.0.0 + - python >=3.9,<4.0.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/poetry-plugin-export?source=hash-mapping + size: 16063 + timestamp: 1733564986275 +- conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd8ed1ab_1.conda + sha256: a7713dfe30faf17508ec359e0bc7e0983f5d94682492469bd462cdaae9c64d83 + md5: 7d9daffbb8d8e0af0f769dbbcd173a54 + depends: + - python >=3.9 + license: ISC + purls: + - pkg:pypi/ptyprocess?source=hash-mapping + size: 19457 + timestamp: 1733302371990 +- conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda + sha256: 79db7928d13fab2d892592223d7570f5061c192f27b9febd1a418427b719acc6 + md5: 12c566707c80111f9799308d9e265aef + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pycparser?source=hash-mapping + size: 110100 + timestamp: 1733195786147 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda + sha256: 868569d9505b7fe246c880c11e2c44924d7613a8cdcc1f6ef85d5375e892f13d + md5: c3946ed24acdb28db1b5d63321dbca7d + depends: + - typing-inspection >=0.4.2 + - typing_extensions >=4.14.1 + - python >=3.10 + - typing-extensions >=4.6.1 + - annotated-types >=0.6.0 + - pydantic-core ==2.41.5 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic?source=hash-mapping + size: 340482 + timestamp: 1764434463101 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda + sha256: b15568ddc03bd33ea41610e5df951be4e245cd61957cbf8c2cfd12557f3d53b5 + md5: f27c39a1906771bbe56cd26a76bf0b8b + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1940186 + timestamp: 1762989000579 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda + sha256: df87d763c450ca0dc7a916987674fe1db153e6713cc488cedb0997ad5e807e96 + md5: dd7a9ffb9145ce5651b10b846d41b8ef + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - python 3.13.* *_cp313 + - libgcc >=14 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1824747 + timestamp: 1762989007285 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda + sha256: 08398c0599084837ba89d69db00b3d0973dc86d6519957dc6c1b480e2571451a + md5: eaeed566f6d88c0a08d73700b34be4a2 + depends: + - python + - typing-extensions >=4.6.0,!=4.7.0 + - python 3.13.* *_cp313 + - __osx >=11.0 + - python_abi 3.13.* *_cp313 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-core?source=hash-mapping + size: 1778337 + timestamp: 1762989007829 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + sha256: 6a25f3b7a92833534eb9d09e3b4ba00195fbf459ec608d15dc9e31f81b67e972 + md5: 83984e3edee8f7312c0aa860682ee145 + depends: + - python >=3.10 + - pydantic >=2.5.2 + - python + constrains: + - phonenumbers >=8,<9 + - pycountry >=23 + - semver >=3.0.2,<4 + - python-ulid >=1,<4 + - pendulum >=3.0.0,<4.0.0 + - pytz >=2024.1 + - tzdata >=2024a + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-extra-types?source=hash-mapping + size: 68665 + timestamp: 1770023146886 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda + sha256: 343988d65c08477a87268d4fbeba59d0295514143965d2755ac4519b73155479 + md5: cc0da73801948100ae97383b8da12993 + depends: + - pydantic >=2.7.0 + - python >=3.10 + - python-dotenv >=0.21.0 + - typing-inspection >=0.4.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pydantic-settings?source=hash-mapping + size: 49319 + timestamp: 1771527313149 +- conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda + sha256: 5577623b9f6685ece2697c6eb7511b4c9ac5fb607c9babc2646c811b428fd46a + md5: 6b6ece66ebcae2d5f326c77ef2c5a066 + depends: + - python >=3.9 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/pygments?source=hash-mapping + size: 889287 + timestamp: 1750615908735 +- conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda + sha256: 065ac44591da9abf1ff740feb25929554b920b00d09287a551fcced2c9791092 + md5: d4582021af437c931d7d77ec39007845 + depends: + - python >=3.9 + - tomli >=1.1.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyproject-hooks?source=hash-mapping + size: 15528 + timestamp: 1733710122949 +- conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda + sha256: ba3b032fa52709ce0d9fd388f63d330a026754587a2f461117cac9ab73d8d0d8 + md5: 461219d1a5bd61342293efa2c0c90eac + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pysocks?source=hash-mapping + size: 21085 + timestamp: 1733217331982 +- conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda + build_number: 100 + sha256: 8a08fe5b7cb5a28aa44e2994d18dbf77f443956990753a4ca8173153ffb6eb56 + md5: 4c875ed0e78c2d407ec55eadffb8cf3d + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.7.3,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 37364553 + timestamp: 1770272309861 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda + build_number: 100 + sha256: a6bdf48a245d70526b4e6a277a4b344ec3f7c787b358e5377d544ac9a303c111 + md5: 732a86d6786402b95e1dc68c32022500 + depends: + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-aarch64 >=2.36.1 + - libexpat >=2.7.3,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - libgcc >=14 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libuuid >=2.41.3,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 33986700 + timestamp: 1770270924894 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda + build_number: 100 + sha256: 9a4f16a64def0853f0a7b6a7beb40d498fd6b09bee10b90c3d6069b664156817 + md5: 179c0f5ae4f22bc3be567298ed0b17b9 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.3,<3.0a0 + - libffi >=3.5.2,<3.6.0a0 + - liblzma >=5.8.2,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.51.2,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.5,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.3,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 12770674 + timestamp: 1770272314517 + python_site_packages_path: lib/python3.13/site-packages +- conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + sha256: 195e483a12bcec40b817f4001d4d4b8ea1cb2de66a62aeabfff6e32e29b3f407 + md5: dbbb75958b0b03842dcf9be2f200fc10 + depends: + - colorama + - importlib-metadata >=4.6 + - packaging >=19.0 + - pyproject_hooks + - python >=3.10 + - tomli >=1.1.0 + constrains: + - build <0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/build?source=hash-mapping + size: 26687 + timestamp: 1767988747352 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda + sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 + md5: 5b8d21249ff20967101ffa321cab24e8 + depends: + - python >=3.9 + - six >=1.5 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 233310 + timestamp: 1751104122689 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 + md5: 083725d6cd3dc007f06d04bcf1e613a2 + depends: + - python >=3.10 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/python-dotenv?source=hash-mapping + size: 26922 + timestamp: 1761503229008 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda + sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8 + md5: 23029aae904a2ba587daba708208012f + depends: + - python >=3.9 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/fastjsonschema?source=hash-mapping + size: 244628 + timestamp: 1755304154927 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda + sha256: f306304235197434494355351ac56020a65b7c5c56ff10ca1ed53356d575557a + md5: 3d92938d5b83c49162ade038aab58a59 + depends: + - cpython 3.13.12.* + - python_abi * *_cp313 + license: Python-2.0 + purls: [] + size: 48618 + timestamp: 1770270436560 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda + sha256: f1fc3e9561b6d3bee2f738f5b1818b51124f45a2b28b3bf6c2174d629276e069 + md5: e27480eebcdf247209e90da706ebef8d + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/installer?source=hash-mapping + size: 233096 + timestamp: 1733237431602 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-multipart-0.0.22-pyhcf101f3_0.conda + sha256: 8275c88b0f138dbd602c53bae9a11789126c6a2c97f7e89f679d3e7ccbb121ba + md5: 5a2610edf297cbd1cbc0e2c17bc47efc + depends: + - python >=3.10 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-multipart?source=hash-mapping + size: 30342 + timestamp: 1769356329419 +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda + sha256: ef7df29b38ef04ec67a8888a4aa039973eaa377e8c4b59a7be0a1c50cd7e4ac6 + md5: f256753e840c3cd3766488c9437a8f8b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=compressed-mapping + size: 201616 + timestamp: 1770223543730 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py313hd3a54cf_1.conda + sha256: 9dbfdb53af5d27ac2eec5db4995979fdaaea76766d4f01cd3524dd7d24f79fb9 + md5: 14b86e046b0c5c5508602165287dd01c + depends: + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=compressed-mapping + size: 194182 + timestamp: 1770223431084 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda + sha256: 950725516f67c9691d81bb8dde8419581c5332c5da3da10c9ba8cbb1698b825d + md5: 5d0c8b92128c93027632ca8f8dc1190f + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pyyaml?source=compressed-mapping + size: 188763 + timestamp: 1770224094408 +- conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda + noarch: python + sha256: be66c1f85c3b48137200d62c12d918f4f8ad329423daef04fed292818efd3c28 + md5: 082985717303dab433c976986c674b35 + depends: + - python + - libgcc >=14 + - libstdcxx >=14 + - __glibc >=2.17,<3.0.a0 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=compressed-mapping + size: 211567 + timestamp: 1771716961404 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda + noarch: python + sha256: afdff66cb54e22d0d2c682731e08bb8f319dfd93f3cdcff4a4640cb5a8ae2460 + md5: 130d781798bb24a0b86290e65acd50d8 + depends: + - python + - libstdcxx >=14 + - libgcc >=14 + - zeromq >=4.3.5,<4.4.0a0 + - _python_abi3_support 1.* + - cpython >=3.12 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=compressed-mapping + size: 212585 + timestamp: 1771716963309 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda + noarch: python + sha256: 2f31f799a46ed75518fae0be75ecc8a1b84360dbfd55096bc2fe8bd9c797e772 + md5: 2f6b79700452ef1e91f45a99ab8ffe5a + depends: + - python + - libcxx >=19 + - __osx >=11.0 + - _python_abi3_support 1.* + - cpython >=3.12 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/pyzmq?source=compressed-mapping + size: 191641 + timestamp: 1771717073430 +- conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda + sha256: 010b7b1a9d05583c9a5e025247308c2fdb990f413367fc1414846d94b630e553 + md5: 87ec3a86d3c910b1d64ec7116e156d40 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libstdcxx >=14 + - numpy + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rapidfuzz?source=hash-mapping + size: 2134177 + timestamp: 1762523138625 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda + sha256: ad5c9a8f6c190edac98e1a57c43a0b2aeeb0d1ffc14021de28872a95cb060912 + md5: 4e3bca1b712f141abe1fdf035caf088b + depends: + - libgcc >=14 + - libstdcxx >=14 + - numpy + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rapidfuzz?source=hash-mapping + size: 988109 + timestamp: 1762522989961 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda + sha256: eb63475cd6e9bc309db56dc6425e72dd94e91dc0db8b442e8086770fdfcd8415 + md5: 36d9057a4c1d842410e97653dbba3d68 + depends: + - __osx >=11.0 + - libcxx >=19 + - numpy + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/rapidfuzz?source=hash-mapping + size: 707397 + timestamp: 1762523257854 +- conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 + md5: d7d95fc8287ea7bf33e0e7116d2b95ec + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 345073 + timestamp: 1765813471974 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda + sha256: fe695f9d215e9a2e3dd0ca7f56435ab4df24f5504b83865e3d295df36e88d216 + md5: 3d49cad61f829f4f0e0611547a9cda12 + depends: + - libgcc >=14 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 357597 + timestamp: 1765815673644 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda + sha256: a77010528efb4b548ac2a4484eaf7e1c3907f2aec86123ed9c5212ae44502477 + md5: f8381319127120ce51e081dce4865cf4 + depends: + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 313930 + timestamp: 1765813902568 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 + md5: c65df89a0b2e321045a9e01d1337b182 + depends: + - python >=3.10 + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - urllib3 >=1.21.1,<3 + - python + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests?source=compressed-mapping + size: 63602 + timestamp: 1766926974520 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda + sha256: c0b815e72bb3f08b67d60d5e02251bbb0164905b5f72942ff5b6d2a339640630 + md5: 66de8645e324fda0ea6ef28c2f99a2ab + depends: + - python >=3.9 + - requests >=2.0.1,<3.0.0 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/requests-toolbelt?source=hash-mapping + size: 44285 + timestamp: 1733734886897 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda + sha256: b06ce84d6a10c266811a7d3adbfa1c11f13393b91cc6f8a5b468277d90be9590 + md5: 7a6289c50631d620652f5045a63eb573 + depends: + - markdown-it-py >=2.2.0 + - pygments >=2.13.0,<3.0.0 + - python >=3.10 + - typing_extensions >=4.0.0,<5.0.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich?source=compressed-mapping + size: 208472 + timestamp: 1771572730357 +- conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda + sha256: 9cf3b9a083ebdee70ef5a48fbe409d91d2a8c4eed3c581a7b33b4d5ca7c813be + md5: 8b1a4d854f9a4ea1e4abc93ccab0ded9 + depends: + - python >=3.10 + - rich >=13.7.1 + - click >=8.1.7 + - typing_extensions >=4.12.2 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/rich-toolkit?source=compressed-mapping + size: 32484 + timestamp: 1771977622605 +- conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda + sha256: 43ea89b53cbede879e57ac9dd20153c5cd2bb9575228e7faf5a8764aa6c201b7 + md5: 013a7d73eaef154f0dc5e415ffa8ff87 + depends: + - cryptography >=2.0 + - dbus + - jeepney >=0.6 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 32933 + timestamp: 1763045369115 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda + sha256: ee3c7b9ec4fc8b44ec2ddf0e6cf4f540bbb4981b44c0f6b35ef8af31ef185a46 + md5: c66928c2d97d7b553e6cc6698036214a + depends: + - cryptography >=2.0 + - dbus + - jeepney >=0.6 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/secretstorage?source=hash-mapping + size: 32795 + timestamp: 1763046232505 +- conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda + sha256: 1d6534df8e7924d9087bd388fbac5bd868c5bf8971c36885f9f016da0657d22b + md5: 83ea3a2ddb7a75c1b09cea582aa4f106 + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/shellingham?source=hash-mapping + size: 15018 + timestamp: 1762858315311 +- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d + md5: 3339e3b65d58accf4ca4fb8748ab16b3 + depends: + - python >=3.9 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 18455 + timestamp: 1753199211006 +- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + name: small_time + version: 26.2.0 + build: h60d57d3_0 + subdir: osx-arm64 + variants: + target_platform: osx-arm64 + depends: + - mojo-compiler >=0.26.1.0,<0.26.2.0 + channel: null +- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + name: small_time + version: 26.2.0 + build: hb0f4dca_0 + subdir: linux-64 + variants: + target_platform: linux-64 + depends: + - mojo-compiler >=0.26.1.0,<0.26.2.0 + channel: null +- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + name: small_time + version: 26.2.0 + build: he8cfe8b_0 + subdir: linux-aarch64 + variants: + target_platform: linux-aarch64 + depends: + - mojo-compiler >=0.26.1.0,<0.26.2.0 + channel: null +- conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda + sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad + md5: 03fe290994c5e4ec17293cfb6bdce520 + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/sniffio?source=hash-mapping + size: 15698 + timestamp: 1762941572482 +- conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda + sha256: ab9ab67faa3cf12f45f5ced316e2c50dc72b4046cd275612fae756fe9d4cf82c + md5: 68bcb398c375177cf117cf608c274f9d + depends: + - anyio >=3.6.2,<5 + - python >=3.10 + - typing_extensions >=4.10.0 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/starlette?source=hash-mapping + size: 64760 + timestamp: 1762016292582 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda + sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac + md5: cffd3bdd58090148f4cfcd831f4b26ab + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3301196 + timestamp: 1769460227866 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda + sha256: e25c314b52764219f842b41aea2c98a059f06437392268f09b03561e4f6e5309 + md5: 7fc6affb9b01e567d2ef1d05b84aa6ed + depends: + - libgcc >=14 + - libzlib >=1.3.1,<2.0a0 + constrains: + - xorg-libx11 >=1.8.12,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3368666 + timestamp: 1769464148928 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda + sha256: 799cab4b6cde62f91f750149995d149bc9db525ec12595e8a1d91b9317f038b3 + md5: a9d86bc62f39b94c4661716624eb21b0 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3127137 + timestamp: 1769460817696 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8 + md5: 72e780e9aa2d0a3295f59b1874e3768b + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=compressed-mapping + size: 21453 + timestamp: 1768146676791 +- conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda + sha256: b35082091c8efd084e51bc3a4a2d3b07897eff232aaf58cbc0f959b6291a6a93 + md5: 385dca77a8b0ec6fa9b92cb62d09b43b + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomlkit?source=hash-mapping + size: 39224 + timestamp: 1768476626454 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + sha256: 6006d4e5a6ff99be052c939e43adee844a38f2dc148f44a7c11aa0011fd3d811 + md5: 82da2dcf1ea3e298f2557b50459809e0 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 878109 + timestamp: 1765458900582 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + sha256: 06e69d338c1724a1340dc374c758fb75c36b069caa5a1994fbf461ae2d42e4fd + md5: 236667bf319279d8d0a9581ebb4337f0 + depends: + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 879449 + timestamp: 1765460007029 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + sha256: a8130a361b7bc21190836ba8889276cc263fcb09f52bf22efcaed1de98179948 + md5: 67a85c1b5c17124eaf9194206afd5159 + depends: + - __osx >=11.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 877647 + timestamp: 1765836696426 +- conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda + sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 + md5: 019a7385be9af33791c989871317e1ed + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/traitlets?source=hash-mapping + size: 110051 + timestamp: 1733367480074 +- conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda + sha256: 302d576f7e44fa13d2849b901772a04f1c2aabc5d6b6c7dcdc5a271bcffd50fe + md5: f5793a97363a42fd6a98f31f29537bbc + depends: + - python >=3.10 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/trove-classifiers?source=hash-mapping + size: 19707 + timestamp: 1768550221435 +- conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda + sha256: e1116d08e6a55b2b42a090130c268f75211ad8e6a8e7749e977924de3864d487 + md5: 10870929f587540c5802cd9b071cba5c + depends: + - annotated-doc >=0.0.2 + - click >=8.2.1 + - python >=3.10 + - rich >=12.3.0 + - shellingham >=1.3.0 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/typer?source=hash-mapping + size: 117860 + timestamp: 1771292312899 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.15.0-h396c80c_0.conda + sha256: 7c2df5721c742c2a47b2c8f960e718c930031663ac1174da67c1ed5999f7938c + md5: edd329d7d3a4ab45dcf905899a7a6115 + depends: + - typing_extensions ==4.15.0 pyhcf101f3_0 + license: PSF-2.0 + license_family: PSF + purls: [] + size: 91383 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing-inspection-0.4.2-pyhd8ed1ab_1.conda + sha256: 70db27de58a97aeb7ba7448366c9853f91b21137492e0b4430251a1870aa8ff4 + md5: a0a4a3035667fc34f29bfbd5c190baa6 + depends: + - python >=3.10 + - typing_extensions >=4.12.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/typing-inspection?source=hash-mapping + size: 18923 + timestamp: 1764158430324 +- conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda + sha256: 032271135bca55aeb156cee361c81350c6f3fb203f57d024d7e5a1fc9ef18731 + md5: 0caa1af407ecff61170c9437a808404d + depends: + - python >=3.10 + - python + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 51692 + timestamp: 1756220668932 +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c + md5: ad659d0a2b3e47e38d829aa8cad2d610 + license: LicenseRef-Public-Domain + purls: [] + size: 119135 + timestamp: 1767016325805 +- conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda + sha256: af641ca7ab0c64525a96fd9ad3081b0f5bcf5d1cbb091afb3f6ed5a9eee6111a + md5: 9272daa869e03efe68833e3dc7a02130 + depends: + - backports.zstd >=1.0.0 + - brotli-python >=1.2.0 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/urllib3?source=hash-mapping + size: 103172 + timestamp: 1767817860341 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda + sha256: 199731b8a86d18d89a9236225cf3e618aef467f628bc6f6bb2875a28f24f3dd4 + md5: 10d80692c8c9c05b7d4b0a1531208ad7 + depends: + - __unix + - click >=7.0 + - h11 >=0.8 + - python >=3.10 + - typing_extensions >=4.0 + - python + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/uvicorn?source=hash-mapping + size: 54913 + timestamp: 1771328143244 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + sha256: 034d62c37fadadafe8b5c923beaed2279d0f4ad8df731f3e86d12760fa33ccbc + md5: 2ada177289a251ffcfeae37e9f28dc3a + depends: + - __unix + - uvicorn ==0.41.0 pyhc90fa1f_0 + - websockets >=10.4 + - httptools >=0.6.3 + - watchfiles >=0.20 + - python-dotenv >=0.13 + - pyyaml >=5.1 + - uvloop >=0.15.1 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4145 + timestamp: 1771328143246 +- conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda + sha256: 77a220ecf6c1467f94d6adda5fb1296f558f3f3044842dc0a52881eab5908dc0 + md5: 266caaa8701a13482ea924a77897b1e4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libuv >=1.51.0,<2.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT OR Apache-2.0 + purls: + - pkg:pypi/uvloop?source=hash-mapping + size: 590601 + timestamp: 1762472969139 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda + sha256: 707044205742d8df718d95538237910a18a9569dcdab304c1084389adb0d85d2 + md5: f19474201f37c32ec2043d6cec93f0b4 + depends: + - libgcc >=14 + - libuv >=1.51.0,<2.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT OR Apache-2.0 + purls: + - pkg:pypi/uvloop?source=hash-mapping + size: 546630 + timestamp: 1762472897860 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda + sha256: 472568a70c0fb349b80af50e1a589f02b5a78a8fbe3ed1a9524dd7675750a677 + md5: 429a325aacea5f82b8af3a7fd7ad0220 + depends: + - __osx >=11.0 + - libuv >=1.51.0,<2.0a0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT OR Apache-2.0 + purls: + - pkg:pypi/uvloop?source=hash-mapping + size: 487912 + timestamp: 1762473054199 +- conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda + sha256: de93eed364f14f08f78ff41994dfe22ff018521c4702e432630d10c0eb0eff6b + md5: e73db224203e56b25e040446fa1584db + depends: + - python >=3.10 + - distlib >=0.3.7,<1 + - platformdirs >=3.9.1,<5 + - typing_extensions >=4.13.2 + - importlib-metadata >=6.6 + - filelock >=3.24.2,<4 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/virtualenv?source=hash-mapping + size: 4657721 + timestamp: 1771967166128 +- conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda + sha256: 11a07764137af9bcf29e9e26671c1be1ea1302f7dd7075a4d41481489883eaff + md5: 9373034735566df29779429f0c0de511 + depends: + - __glibc >=2.17,<3.0.a0 + - anyio >=3.0.0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping + size: 420641 + timestamp: 1760456759391 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda + sha256: 2bd26b15aac02063e469b2efbb7efc5499347940329011f6f8d40b287e1caa15 + md5: f276ef02ff6365c220d9f0a917c3b31f + depends: + - anyio >=3.0.0 + - libgcc >=14 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping + size: 411329 + timestamp: 1760456814453 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda + sha256: 6c3bb78efbaa8aa616ef9fe8ddb14dd2a3d06324f6c6f38f80f4653c7961b402 + md5: c059753f94e279e722fec0532d28b390 + depends: + - __osx >=11.0 + - anyio >=3.0.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + constrains: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: + - pkg:pypi/watchfiles?source=hash-mapping + size: 364700 + timestamp: 1760457647108 +- conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda + sha256: d34ed37a2164ec741d9bf067ce17496c97ee39bee826a8164a6ab226ab67826a + md5: 2181c860102f18623f51760d7bccec35 + depends: + - python + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping + size: 367335 + timestamp: 1768087395845 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda + sha256: 9bd2d2ecc82c7d2d2d3dfb517ae9455e86ac0f7894df116f4d87f2314bd9bf74 + md5: f8d99c863f246f225d7eb696e4a69061 + depends: + - python + - libgcc >=14 + - python 3.13.* *_cp313 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping + size: 371783 + timestamp: 1768087403426 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda + sha256: 79b6b445dd9848077963cf7fa5214ba17c6084128419affd51f91d0cd7e7d5ae + md5: 2491c4cb83885c7905941c97b3473d78 + depends: + - python + - python 3.13.* *_cp313 + - __osx >=11.0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/websockets?source=hash-mapping + size: 371508 + timestamp: 1768087394531 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda + sha256: 10a4581f7e2aa43bdf956ab7d0e4884f879e94a5caada64a16a1ea64fc0521d0 + md5: 6649f27f9c01c0b72ed97870da34f9a0 + depends: + - __osx >=11.0 + - cffi >=1.0.0 + - python >=3.13,<3.14.0a0 + - python >=3.13,<3.14.0a0 *_cp313 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + purls: + - pkg:pypi/xattr?source=hash-mapping + size: 35887 + timestamp: 1762511351895 +- conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda + sha256: 6d9ea2f731e284e9316d95fa61869fe7bbba33df7929f82693c121022810f4ad + md5: a77f85f77be52ff59391544bfe73390a + depends: + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + license: MIT + license_family: MIT + purls: [] + size: 85189 + timestamp: 1753484064210 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda + sha256: 66265e943f32ce02396ad214e27cb35f5b0490b3bd4f064446390f9d67fa5d88 + md5: 032d8030e4a24fe1f72c74423a46fb88 + depends: + - libgcc >=14 + license: MIT + license_family: MIT + purls: [] + size: 88088 + timestamp: 1753484092643 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda + sha256: b03433b13d89f5567e828ea9f1a7d5c5d697bf374c28a4168d71e9464f5dafac + md5: 78a0fe9e9c50d2c381e8ee47e3ea437d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 83386 + timestamp: 1753484079473 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + sha256: 47cfe31255b91b4a6fa0e9dbaf26baa60ac97e033402dbc8b90ba5fee5ffe184 + md5: 8035e5b54c08429354d5d64027041cad + depends: + - libstdcxx >=14 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libsodium >=1.0.20,<1.0.21.0a0 + - krb5 >=1.21.3,<1.22.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 310648 + timestamp: 1757370847287 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + sha256: 8a1efaf97a00d62d68939abe40f7a35ace8910eec777d5535b8c32d0079750bd + md5: 5676806bba055c901a62f969cb3fbe02 + depends: + - libstdcxx >=14 + - libgcc >=14 + - krb5 >=1.21.3,<1.22.0a0 + - libsodium >=1.0.20,<1.0.21.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 350254 + timestamp: 1757370867477 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + sha256: b6f9c130646e5971f6cad708e1eee278f5c7eea3ca97ec2fdd36e7abb764a7b8 + md5: 26f39dfe38a2a65437c29d69906a0f68 + depends: + - __osx >=11.0 + - libcxx >=19 + - libsodium >=1.0.20,<1.0.21.0a0 + - krb5 >=1.21.3,<1.22.0a0 + license: MPL-2.0 + license_family: MOZILLA + purls: [] + size: 244772 + timestamp: 1757371008525 +- conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae + md5: 30cd29cb87d819caead4d55184c1d115 + depends: + - python >=3.10 + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/zipp?source=hash-mapping + size: 24194 + timestamp: 1764460141901 +- conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 + md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 + depends: + - __glibc >=2.17,<3.0.a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 601375 + timestamp: 1764777111296 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + sha256: 569990cf12e46f9df540275146da567d9c618c1e9c7a0bc9d9cfefadaed20b75 + md5: c3655f82dcea2aa179b291e7099c1fcc + depends: + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 614429 + timestamp: 1764777145593 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + sha256: 9485ba49e8f47d2b597dd399e88f4802e100851b27c21d7525625b0b4025a5d9 + md5: ab136e4c34e97f34fb621d2592a393d8 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 433413 + timestamp: 1764777166076 diff --git a/pixi.toml b/pixi.toml index b580926b..b21b55e7 100644 --- a/pixi.toml +++ b/pixi.toml @@ -41,22 +41,22 @@ backend = { name = "pixi-build-mojo", version = "*" } [dependencies] mojo = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {path = "./small-time"} +small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.host-dependencies] mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {path = "./small-time"} +small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.build-dependencies] mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {path = "./small-time"} +small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.run-dependencies] mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {path = "./small-time"} +small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [feature.util.dependencies] From 269ac38e11f0465a19fbd94a83d1e84d16239f87 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Feb 2026 13:45:57 +0100 Subject: [PATCH 04/27] import from ffi not sys ffi --- lightbug_http/address.mojo | 2 +- lightbug_http/c/address.mojo | 2 +- lightbug_http/c/network.mojo | 2 +- lightbug_http/c/socket.mojo | 2 +- lightbug_http/c/socket_error.mojo | 2 +- lightbug_http/socket.mojo | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index 446d9a18..93c8cc2d 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -1,4 +1,4 @@ -from sys.ffi import CompilationTarget, c_char, c_int, c_uchar, external_call +from ffi import CompilationTarget, c_char, c_int, c_uchar, external_call from lightbug_http.c.address import AddressFamily, AddressLength from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsafePointer, c_void diff --git a/lightbug_http/c/address.mojo b/lightbug_http/c/address.mojo index 786ea62a..6371102e 100644 --- a/lightbug_http/c/address.mojo +++ b/lightbug_http/c/address.mojo @@ -1,4 +1,4 @@ -from sys.ffi import c_int +from ffi import c_int from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsafePointer, c_void diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index e53e37e2..e5f3de10 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -1,4 +1,4 @@ -from sys.ffi import c_char, c_int, c_uint, c_ushort, external_call, get_errno +from ffi import c_char, c_int, c_uint, c_ushort, external_call, get_errno from sys.info import size_of from lightbug_http.c.address import AddressFamily, AddressLength diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 4085b4ae..53c98d13 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -1,4 +1,4 @@ -from sys.ffi import c_int, c_size_t, c_ssize_t, c_uchar, external_call, get_errno +from ffi import c_int, c_size_t, c_ssize_t, c_uchar, external_call, get_errno from sys.info import CompilationTarget, size_of from lightbug_http.c.aliases import c_void diff --git a/lightbug_http/c/socket_error.mojo b/lightbug_http/c/socket_error.mojo index 4cca5cd3..deec320b 100644 --- a/lightbug_http/c/socket_error.mojo +++ b/lightbug_http/c/socket_error.mojo @@ -4,7 +4,7 @@ Generated from socket.mojo error handling patterns. Follows the pattern from typed_errors.mojo. """ -from sys.ffi import c_int, external_call, get_errno +from ffi import c_int, external_call, get_errno from lightbug_http.utils.error import CustomError from utils import Variant diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index b167311c..3dbcb812 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -1,4 +1,4 @@ -from sys.ffi import c_uint +from ffi import c_uint from sys.info import CompilationTarget from lightbug_http.c.aliases import c_void From 12495c01d50343a8c405a93a40ed1500d0d0dc7a Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Feb 2026 20:10:28 +0100 Subject: [PATCH 05/27] refactor error variants --- lightbug_http/address.mojo | 162 +--- lightbug_http/c/network.mojo | 80 +- lightbug_http/c/socket.mojo | 280 +++--- lightbug_http/c/socket_error.mojo | 1448 ++++------------------------- lightbug_http/socket.mojo | 2 +- 5 files changed, 362 insertions(+), 1610 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index 93c8cc2d..4b0d562a 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -372,10 +372,10 @@ fn get_ip_address( try: result = getaddrinfo(host, service, hints) except getaddrinfo_err: - raise getaddrinfo_err + raise GetIPAddressError(getaddrinfo_err) if not result.unsafe_ptr()[].ai_addr: - raise GetaddrinfoNullAddrError() + raise GetIPAddressError(GetaddrinfoNullAddrError()) # extend result's lifetime to avoid invalid access of pointer, it'd get freed early return ( @@ -396,10 +396,10 @@ fn get_ip_address( try: result = getaddrinfo(host, service, hints) except getaddrinfo_err: - raise getaddrinfo_err + raise GetIPAddressError(getaddrinfo_err) if not result.unsafe_ptr()[].ai_addr: - raise GetaddrinfoNullAddrError() + raise GetIPAddressError(GetaddrinfoNullAddrError()) return ( result.unsafe_ptr()[] @@ -561,125 +561,21 @@ struct GetaddrinfoError(CustomError, TrivialRegisterPassable): -@fieldwise_init -struct GetIPAddressError(Movable, Stringable, Writable): - """Typed error variant for get_ip_address() function.""" - - comptime type = Variant[GetaddrinfoError, GetaddrinfoNullAddrError] - var value: Self.type - - @implicit - fn __init__(out self, value: GetaddrinfoError): - self.value = value - - @implicit - fn __init__(out self, value: GetaddrinfoNullAddrError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[GetaddrinfoError](): - writer.write(self.value[GetaddrinfoError]) - elif self.value.isa[GetaddrinfoNullAddrError](): - writer.write(self.value[GetaddrinfoNullAddrError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct ParseError(Movable, Stringable, Writable): - """Typed error variant for address parsing functions.""" - - comptime type = Variant[ - ParseEmptyAddressError, - ParseMissingClosingBracketError, - ParseMissingPortError, - ParseUnexpectedBracketError, - ParseEmptyPortError, - ParseInvalidPortNumberError, - ParsePortOutOfRangeError, - ParseMissingSeparatorError, - ParseTooManyColonsError, - ParseIPProtocolPortError, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: ParseEmptyAddressError): - self.value = value - - @implicit - fn __init__(out self, value: ParseMissingClosingBracketError): - self.value = value - - @implicit - fn __init__(out self, value: ParseMissingPortError): - self.value = value - - @implicit - fn __init__(out self, value: ParseUnexpectedBracketError): - self.value = value - - @implicit - fn __init__(out self, value: ParseEmptyPortError): - self.value = value - - @implicit - fn __init__(out self, value: ParseInvalidPortNumberError): - self.value = value +comptime GetIPAddressError = Variant[GetaddrinfoError, GetaddrinfoNullAddrError] - @implicit - fn __init__(out self, value: ParsePortOutOfRangeError): - self.value = value - @implicit - fn __init__(out self, value: ParseMissingSeparatorError): - self.value = value - - @implicit - fn __init__(out self, value: ParseTooManyColonsError): - self.value = value - - @implicit - fn __init__(out self, value: ParseIPProtocolPortError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[ParseEmptyAddressError](): - writer.write(self.value[ParseEmptyAddressError]) - elif self.value.isa[ParseMissingClosingBracketError](): - writer.write(self.value[ParseMissingClosingBracketError]) - elif self.value.isa[ParseMissingPortError](): - writer.write(self.value[ParseMissingPortError]) - elif self.value.isa[ParseUnexpectedBracketError](): - writer.write(self.value[ParseUnexpectedBracketError]) - elif self.value.isa[ParseEmptyPortError](): - writer.write(self.value[ParseEmptyPortError]) - elif self.value.isa[ParseInvalidPortNumberError](): - writer.write(self.value[ParseInvalidPortNumberError]) - elif self.value.isa[ParsePortOutOfRangeError](): - writer.write(self.value[ParsePortOutOfRangeError]) - elif self.value.isa[ParseMissingSeparatorError](): - writer.write(self.value[ParseMissingSeparatorError]) - elif self.value.isa[ParseTooManyColonsError](): - writer.write(self.value[ParseTooManyColonsError]) - elif self.value.isa[ParseIPProtocolPortError](): - writer.write(self.value[ParseIPProtocolPortError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) +comptime ParseError = Variant[ + ParseEmptyAddressError, + ParseMissingClosingBracketError, + ParseMissingPortError, + ParseUnexpectedBracketError, + ParseEmptyPortError, + ParseInvalidPortNumberError, + ParsePortOutOfRangeError, + ParseMissingSeparatorError, + ParseTooManyColonsError, + ParseIPProtocolPortError, +] fn parse_ipv6_bracketed_address[ @@ -695,14 +591,14 @@ fn parse_ipv6_bracketed_address[ var end_bracket_index = address.find("]") if end_bracket_index == -1: - raise ParseMissingClosingBracketError() + raise ParseError(ParseMissingClosingBracketError()) if end_bracket_index + 1 == len(address): - raise ParseMissingPortError() + raise ParseError(ParseMissingPortError()) var colon_index = end_bracket_index + 1 if address[colon_index : colon_index + 1] != ":": - raise ParseMissingPortError() + raise ParseError(ParseMissingPortError()) return address[1:end_bracket_index], UInt16(end_bracket_index + 1) @@ -719,24 +615,24 @@ fn validate_no_brackets[ segment = address[Int(start_idx) : Int(end_idx.value())] if segment.find("[") != -1: - raise ParseUnexpectedBracketError() + raise ParseError(ParseUnexpectedBracketError()) if segment.find("]") != -1: - raise ParseUnexpectedBracketError() + raise ParseError(ParseUnexpectedBracketError()) fn parse_port[origin: ImmutOrigin](port_str: StringSlice[origin]) raises ParseError -> UInt16: """Parse and validate port number.""" if port_str == AddressConstants.EMPTY: - raise ParseEmptyPortError() + raise ParseError(ParseEmptyPortError()) var port: Int try: port = Int(String(port_str)) except conversion_err: - raise ParseInvalidPortNumberError() + raise ParseError(ParseInvalidPortNumberError()) if port < MIN_PORT or port > MAX_PORT: - raise ParsePortOutOfRangeError() + raise ParseError(ParsePortOutOfRangeError()) return UInt16(port) @@ -765,7 +661,7 @@ fn parse_address[ Tuple containing the host and port. """ if address == AddressConstants.EMPTY: - raise ParseEmptyAddressError() + raise ParseError(ParseEmptyAddressError()) if address == AddressConstants.LOCALHOST: @@ -781,13 +677,13 @@ fn parse_address[ return HostPort(String(address), DEFAULT_IP_PORT) if address.find(":") != -1: - raise ParseIPProtocolPortError() + raise ParseError(ParseIPProtocolPortError()) return HostPort(String(address), DEFAULT_IP_PORT) var colon_index = address.rfind(":") if colon_index == -1: - raise ParseMissingSeparatorError() + raise ParseError(ParseMissingSeparatorError()) var host: StringSlice[origin] var port: UInt16 @@ -802,7 +698,7 @@ fn parse_address[ else: host = address[:colon_index] if host.find(":") != -1: - raise ParseTooManyColonsError() + raise ParseError(ParseTooManyColonsError()) port = parse_port(address[colon_index + 1 :]) if host == AddressConstants.LOCALHOST: diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index e5f3de10..4c9889b0 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -41,72 +41,10 @@ struct InetPtonInvalidAddressError(CustomError, TrivialRegisterPassable): return Self.message -@fieldwise_init -struct InetNtopError(Movable, Stringable, Writable): - """Typed error variant for inet_ntop() function.""" - - comptime type = Variant[InetNtopEAFNOSUPPORTError, InetNtopENOSPCError, Error] - var value: Self.type - - @implicit - fn __init__(out self, value: InetNtopEAFNOSUPPORTError): - self.value = value - - @implicit - fn __init__(out self, value: InetNtopENOSPCError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[InetNtopEAFNOSUPPORTError](): - writer.write(self.value[InetNtopEAFNOSUPPORTError]) - elif self.value.isa[InetNtopENOSPCError](): - writer.write(self.value[InetNtopENOSPCError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) +comptime InetNtopError = Variant[InetNtopEAFNOSUPPORTError, InetNtopENOSPCError, Error] -@fieldwise_init -struct InetPtonError(Movable, Stringable, Writable): - """Typed error variant for inet_pton() function.""" - - comptime type = Variant[InetPtonInvalidAddressError, Error] - var value: Self.type - - @implicit - fn __init__(out self, value: InetPtonInvalidAddressError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[InetPtonInvalidAddressError](): - writer.write(self.value[InetPtonInvalidAddressError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) +comptime InetPtonError = Variant[InetPtonInvalidAddressError, Error] fn htonl(hostlong: c_uint) -> c_uint: @@ -394,14 +332,14 @@ fn inet_ntop[ if not result: var errno = get_errno() if errno == errno.EAFNOSUPPORT: - raise InetNtopEAFNOSUPPORTError() + raise InetNtopError(InetNtopEAFNOSUPPORTError()) elif errno == errno.ENOSPC: - raise InetNtopENOSPCError() + raise InetNtopError(InetNtopENOSPCError()) else: - raise Error( + raise InetNtopError(Error( "inet_ntop Error: An error occurred while converting the address. Error code: ", errno, - ) + )) return String(unsafe_from_utf8_ptr=dst.unsafe_ptr()) @@ -472,12 +410,12 @@ fn inet_pton[address_family: AddressFamily](var src: String) raises InetPtonErro var result = _inet_pton(address_family.value, src.as_c_string_slice().unsafe_ptr(), ip_buffer) if result == 0: - raise InetPtonInvalidAddressError() + raise InetPtonError(InetPtonInvalidAddressError()) elif result == -1: var errno = get_errno() - raise Error( + raise InetPtonError(Error( "inet_pton Error: An error occurred while converting the address. Error code: ", errno, - ) + )) return ip_buffer.bitcast[c_uint]().take_pointee() diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 53c98d13..cdc0d935 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -235,19 +235,19 @@ fn socket(domain: c_int, type: c_int, protocol: c_int) raises SocketError -> c_i if fd == -1: var errno = get_errno() if errno == errno.EACCES: - raise SocketEACCESError() + raise SocketError(SocketEACCESError()) elif errno == errno.EAFNOSUPPORT: - raise SocketEAFNOSUPPORTError() + raise SocketError(SocketEAFNOSUPPORTError()) elif errno == errno.EINVAL: - raise SocketEINVALError() + raise SocketError(SocketEINVALError()) elif errno == errno.EMFILE: - raise SocketEMFILEError() + raise SocketError(SocketEMFILEError()) elif errno == errno.ENFILE: - raise SocketENFILEError() + raise SocketError(SocketENFILEError()) elif errno in [errno.ENOBUFS, errno.ENOMEM]: - raise SocketENOBUFSError() + raise SocketError(SocketENOBUFSError()) elif errno == errno.EPROTONOSUPPORT: - raise SocketEPROTONOSUPPORTError() + raise SocketError(SocketEPROTONOSUPPORTError()) return fd @@ -332,20 +332,20 @@ fn setsockopt( if result == -1: var errno = get_errno() if errno == errno.EBADF: - raise SetsockoptEBADFError() + raise SetsockoptError(SetsockoptEBADFError()) elif errno == errno.EFAULT: - raise SetsockoptEFAULTError() + raise SetsockoptError(SetsockoptEFAULTError()) elif errno == errno.EINVAL: - raise SetsockoptEINVALError() + raise SetsockoptError(SetsockoptEINVALError()) elif errno == errno.ENOPROTOOPT: - raise SetsockoptENOPROTOOPTError() + raise SetsockoptError(SetsockoptENOPROTOOPTError()) elif errno == errno.ENOTSOCK: - raise SetsockoptENOTSOCKError() + raise SetsockoptError(SetsockoptENOTSOCKError()) else: - raise Error( + raise SetsockoptError(Error( "SetsockoptError: An error occurred while setting the socket option. Error code: ", errno, - ) + )) fn _getsockopt[ @@ -427,20 +427,20 @@ fn getsockopt( if result == -1: var errno = get_errno() if errno == errno.EBADF: - raise GetsockoptEBADFError() + raise GetsockoptError(GetsockoptEBADFError()) elif errno == errno.EFAULT: - raise GetsockoptEFAULTError() + raise GetsockoptError(GetsockoptEFAULTError()) elif errno == errno.EINVAL: - raise GetsockoptEINVALError() + raise GetsockoptError(GetsockoptEINVALError()) elif errno == errno.ENOPROTOOPT: - raise GetsockoptENOPROTOOPTError() + raise GetsockoptError(GetsockoptENOPROTOOPTError()) elif errno == errno.ENOTSOCK: - raise GetsockoptENOTSOCKError() + raise GetsockoptError(GetsockoptENOTSOCKError()) else: - raise Error( + raise GetsockoptError(Error( "GetsockoptError: An error occurred while getting the socket option. Error code: ", errno, - ) + )) return option_value.bitcast[Int]().take_pointee() @@ -503,15 +503,15 @@ fn getsockname(socket: FileDescriptor, mut address: SocketAddress) raises Getsoc if result == -1: var errno = get_errno() if errno == errno.EBADF: - raise GetsocknameEBADFError() + raise GetsocknameError(GetsocknameEBADFError()) elif errno == errno.EFAULT: - raise GetsocknameEFAULTError() + raise GetsocknameError(GetsocknameEFAULTError()) elif errno == errno.EINVAL: - raise GetsocknameEINVALError() + raise GetsocknameError(GetsocknameEINVALError()) elif errno == errno.ENOBUFS: - raise GetsocknameENOBUFSError() + raise GetsocknameError(GetsocknameENOBUFSError()) elif errno == errno.ENOTSOCK: - raise GetsocknameENOTSOCKError() + raise GetsocknameError(GetsocknameENOTSOCKError()) fn _getpeername[ @@ -577,17 +577,17 @@ fn getpeername(file_descriptor: FileDescriptor) raises GetpeernameError -> Socke if result == -1: var errno = get_errno() if errno == errno.EBADF: - raise GetpeernameEBADFError() + raise GetpeernameError(GetpeernameEBADFError()) elif errno == errno.EFAULT: - raise GetpeernameEFAULTError() + raise GetpeernameError(GetpeernameEFAULTError()) elif errno == errno.EINVAL: - raise GetpeernameEINVALError() + raise GetpeernameError(GetpeernameEINVALError()) elif errno == errno.ENOBUFS: - raise GetpeernameENOBUFSError() + raise GetpeernameError(GetpeernameENOBUFSError()) elif errno == errno.ENOTCONN: - raise GetpeernameENOTCONNError() + raise GetpeernameError(GetpeernameENOTCONNError()) elif errno == errno.ENOTSOCK: - raise GetpeernameENOTSOCKError() + raise GetpeernameError(GetpeernameENOTSOCKError()) return remote_address^ @@ -656,25 +656,25 @@ fn bind(socket: FileDescriptor, mut address: SocketAddress) raises BindError: if result == -1: var errno = get_errno() if errno == errno.EACCES: - raise BindEACCESError() + raise BindError(BindEACCESError()) elif errno == errno.EADDRINUSE: - raise BindEADDRINUSEError() + raise BindError(BindEADDRINUSEError()) elif errno == errno.EBADF: - raise BindEBADFError() + raise BindError(BindEBADFError()) elif errno == errno.EINVAL: - raise BindEINVALError() + raise BindError(BindEINVALError()) elif errno == errno.ENOTSOCK: - raise BindENOTSOCKError() + raise BindError(BindENOTSOCKError()) # The following errors are specific to UNIX domain (AF_UNIX) sockets. TODO: Pass address_family when unix sockets supported. # if address_family == AF_UNIX: # if errno == errno.EACCES: # raise BindEACCESError() - raise Error( + raise BindError(Error( "bind: An error occurred while binding the socket. Error code: ", errno, - ) + )) fn _listen(socket: c_int, backlog: c_int) -> c_int: @@ -724,13 +724,13 @@ fn listen(socket: FileDescriptor, backlog: c_int) raises ListenError: if result == -1: var errno = get_errno() if errno == errno.EADDRINUSE: - raise ListenEADDRINUSEError() + raise ListenError(ListenEADDRINUSEError()) elif errno == errno.EBADF: - raise ListenEBADFError() + raise ListenError(ListenEBADFError()) elif errno == errno.ENOTSOCK: - raise ListenENOTSOCKError() + raise ListenError(ListenENOTSOCKError()) elif errno == errno.EOPNOTSUPP: - raise ListenEOPNOTSUPPError() + raise ListenError(ListenEOPNOTSUPPError()) fn _accept[ @@ -798,34 +798,34 @@ fn accept(socket: FileDescriptor) raises AcceptError -> FileDescriptor: if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: - raise AcceptEAGAINError() + raise AcceptError(AcceptEAGAINError()) elif errno == errno.EBADF: - raise AcceptEBADFError() + raise AcceptError(AcceptEBADFError()) elif errno == errno.ECONNABORTED: - raise AcceptECONNABORTEDError() + raise AcceptError(AcceptECONNABORTEDError()) elif errno == errno.EFAULT: - raise AcceptEFAULTError() + raise AcceptError(AcceptEFAULTError()) elif errno == errno.EINTR: - raise AcceptEINTRError() + raise AcceptError(AcceptEINTRError()) elif errno == errno.EINVAL: - raise AcceptEINVALError() + raise AcceptError(AcceptEINVALError()) elif errno == errno.EMFILE: - raise AcceptEMFILEError() + raise AcceptError(AcceptEMFILEError()) elif errno == errno.ENFILE: - raise AcceptENFILEError() + raise AcceptError(AcceptENFILEError()) elif errno in [errno.ENOBUFS, errno.ENOMEM]: - raise AcceptENOBUFSError() + raise AcceptError(AcceptENOBUFSError()) elif errno == errno.ENOTSOCK: - raise AcceptENOTSOCKError() + raise AcceptError(AcceptENOTSOCKError()) elif errno == errno.EOPNOTSUPP: - raise AcceptEOPNOTSUPPError() + raise AcceptError(AcceptEOPNOTSUPPError()) elif errno == errno.EPROTO: - raise AcceptEPROTOError() + raise AcceptError(AcceptEPROTOError()) @parameter if CompilationTarget.is_linux(): if errno == errno.EPERM: - raise AcceptEPERMError() + raise AcceptError(AcceptEPERMError()) return FileDescriptor(Int(result)) @@ -894,33 +894,33 @@ fn connect(socket: FileDescriptor, mut address: SocketAddress) raises ConnectErr if result == -1: var errno = get_errno() if errno == errno.EACCES: - raise ConnectEACCESError() + raise ConnectError(ConnectEACCESError()) elif errno == errno.EADDRINUSE: - raise ConnectEADDRINUSEError() + raise ConnectError(ConnectEADDRINUSEError()) elif errno == errno.EAGAIN: - raise ConnectEAGAINError() + raise ConnectError(ConnectEAGAINError()) elif errno == errno.EALREADY: - raise ConnectEALREADYError() + raise ConnectError(ConnectEALREADYError()) elif errno == errno.EBADF: - raise ConnectEBADFError() + raise ConnectError(ConnectEBADFError()) elif errno == errno.ECONNREFUSED: - raise ConnectECONNREFUSEDError() + raise ConnectError(ConnectECONNREFUSEDError()) elif errno == errno.EFAULT: - raise ConnectEFAULTError() + raise ConnectError(ConnectEFAULTError()) elif errno == errno.EINPROGRESS: - raise ConnectEINPROGRESSError() + raise ConnectError(ConnectEINPROGRESSError()) elif errno == errno.EINTR: - raise ConnectEINTRError() + raise ConnectError(ConnectEINTRError()) elif errno == errno.EISCONN: - raise ConnectEISCONNError() + raise ConnectError(ConnectEISCONNError()) elif errno == errno.ENETUNREACH: - raise ConnectENETUNREACHError() + raise ConnectError(ConnectENETUNREACHError()) elif errno == errno.ENOTSOCK: - raise ConnectENOTSOCKError() + raise ConnectError(ConnectENOTSOCKError()) elif errno == errno.EAFNOSUPPORT: - raise ConnectEAFNOSUPPORTError() + raise ConnectError(ConnectEAFNOSUPPORTError()) elif errno == errno.ETIMEDOUT: - raise ConnectETIMEDOUTError() + raise ConnectError(ConnectETIMEDOUTError()) fn _recv( @@ -987,24 +987,24 @@ fn recv[ if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: - raise RecvEAGAINError() + raise RecvError(RecvEAGAINError()) elif errno == errno.EBADF: - raise RecvEBADFError() + raise RecvError(RecvEBADFError()) elif errno == errno.ECONNREFUSED: - raise RecvECONNREFUSEDError() + raise RecvError(RecvECONNREFUSEDError()) elif errno == errno.EFAULT: - raise RecvEFAULTError() + raise RecvError(RecvEFAULTError()) elif errno == errno.EINTR: - raise RecvEINTRError() + raise RecvError(RecvEINTRError()) elif errno == errno.ENOTCONN: - raise RecvENOTCONNError() + raise RecvError(RecvENOTCONNError()) elif errno == errno.ENOTSOCK: - raise RecvENOTSOCKError() + raise RecvError(RecvENOTSOCKError()) else: - raise Error( + raise RecvError(Error( "RecvError: An error occurred while attempting to receive data from the socket. Error code: ", errno, - ) + )) return UInt(result) @@ -1109,34 +1109,34 @@ fn recvfrom[ if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: - raise RecvfromEAGAINError() + raise RecvfromError(RecvfromEAGAINError()) elif errno == errno.EBADF: - raise RecvfromEBADFError() + raise RecvfromError(RecvfromEBADFError()) elif errno == errno.ECONNRESET: - raise RecvfromECONNRESETError() + raise RecvfromError(RecvfromECONNRESETError()) elif errno == errno.EINTR: - raise RecvfromEINTRError() + raise RecvfromError(RecvfromEINTRError()) elif errno == errno.EINVAL: - raise RecvfromEINVALError() + raise RecvfromError(RecvfromEINVALError()) elif errno == errno.ENOTCONN: - raise RecvfromENOTCONNError() + raise RecvfromError(RecvfromENOTCONNError()) elif errno == errno.ENOTSOCK: - raise RecvfromENOTSOCKError() + raise RecvfromError(RecvfromENOTSOCKError()) elif errno == errno.EOPNOTSUPP: - raise RecvfromEOPNOTSUPPError() + raise RecvfromError(RecvfromEOPNOTSUPPError()) elif errno == errno.ETIMEDOUT: - raise RecvfromETIMEDOUTError() + raise RecvfromError(RecvfromETIMEDOUTError()) elif errno == errno.EIO: - raise RecvfromEIOError() + raise RecvfromError(RecvfromEIOError()) elif errno == errno.ENOBUFS: - raise RecvfromENOBUFSError() + raise RecvfromError(RecvfromENOBUFSError()) elif errno == errno.ENOMEM: - raise RecvfromENOMEMError() + raise RecvfromError(RecvfromENOMEMError()) else: - raise Error( + raise RecvfromError(Error( "RecvfromError: An error occurred while attempting to receive data from the socket. Error code: ", errno, - ) + )) return UInt(result) @@ -1221,38 +1221,38 @@ fn send[ if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: - raise SendEAGAINError() + raise SendError(SendEAGAINError()) elif errno == errno.EBADF: - raise SendEBADFError() + raise SendError(SendEBADFError()) elif errno == errno.ECONNRESET: - raise SendECONNRESETError() + raise SendError(SendECONNRESETError()) elif errno == errno.EDESTADDRREQ: - raise SendEDESTADDRREQError() + raise SendError(SendEDESTADDRREQError()) elif errno == errno.ECONNREFUSED: - raise SendECONNREFUSEDError() + raise SendError(SendECONNREFUSEDError()) elif errno == errno.EFAULT: - raise SendEFAULTError() + raise SendError(SendEFAULTError()) elif errno == errno.EINTR: - raise SendEINTRError() + raise SendError(SendEINTRError()) elif errno == errno.EINVAL: - raise SendEINVALError() + raise SendError(SendEINVALError()) elif errno == errno.EISCONN: - raise SendEISCONNError() + raise SendError(SendEISCONNError()) elif errno == errno.ENOBUFS: - raise SendENOBUFSError() + raise SendError(SendENOBUFSError()) elif errno == errno.ENOMEM: - raise SendENOMEMError() + raise SendError(SendENOMEMError()) elif errno == errno.ENOTCONN: - raise SendENOTCONNError() + raise SendError(SendENOTCONNError()) elif errno == errno.ENOTSOCK: - raise SendENOTSOCKError() + raise SendError(SendENOTSOCKError()) elif errno == errno.EOPNOTSUPP: - raise SendEOPNOTSUPPError() + raise SendError(SendEOPNOTSUPPError()) else: - raise Error( + raise SendError(Error( "SendError: An error occurred while attempting to send data to the socket. Error code: ", errno, - ) + )) return UInt(result) @@ -1351,52 +1351,52 @@ fn sendto[ if result == -1: var errno = get_errno() if errno == errno.EAFNOSUPPORT: - raise SendtoEAFNOSUPPORTError() + raise SendtoError(SendtoEAFNOSUPPORTError()) elif errno in [errno.EAGAIN, errno.EWOULDBLOCK]: - raise SendtoEAGAINError() + raise SendtoError(SendtoEAGAINError()) elif errno == errno.EBADF: - raise SendtoEBADFError() + raise SendtoError(SendtoEBADFError()) elif errno == errno.ECONNRESET: - raise SendtoECONNRESETError() + raise SendtoError(SendtoECONNRESETError()) elif errno == errno.EINTR: - raise SendtoEINTRError() + raise SendtoError(SendtoEINTRError()) elif errno == errno.EMSGSIZE: - raise SendtoEMSGSIZEError() + raise SendtoError(SendtoEMSGSIZEError()) elif errno == errno.ENOTCONN: - raise SendtoENOTCONNError() + raise SendtoError(SendtoENOTCONNError()) elif errno == errno.ENOTSOCK: - raise SendtoENOTSOCKError() + raise SendtoError(SendtoENOTSOCKError()) elif errno == errno.EPIPE: - raise SendtoEPIPEError() + raise SendtoError(SendtoEPIPEError()) elif errno == errno.EACCES: - raise SendtoEACCESError() + raise SendtoError(SendtoEACCESError()) elif errno == errno.EDESTADDRREQ: - raise SendtoEDESTADDRREQError() + raise SendtoError(SendtoEDESTADDRREQError()) elif errno == errno.EHOSTUNREACH: - raise SendtoEHOSTUNREACHError() + raise SendtoError(SendtoEHOSTUNREACHError()) elif errno == errno.EINVAL: - raise SendtoEINVALError() + raise SendtoError(SendtoEINVALError()) elif errno == errno.EIO: - raise SendtoEIOError() + raise SendtoError(SendtoEIOError()) elif errno == errno.EISCONN: - raise SendtoEISCONNError() + raise SendtoError(SendtoEISCONNError()) elif errno == errno.ENETDOWN: - raise SendtoENETDOWNError() + raise SendtoError(SendtoENETDOWNError()) elif errno == errno.ENETUNREACH: - raise SendtoENETUNREACHError() + raise SendtoError(SendtoENETUNREACHError()) elif errno == errno.ENOBUFS: - raise SendtoENOBUFSError() + raise SendtoError(SendtoENOBUFSError()) elif errno == errno.ENOMEM: - raise SendtoENOMEMError() + raise SendtoError(SendtoENOMEMError()) elif errno == errno.ELOOP: - raise SendtoELOOPError() + raise SendtoError(SendtoELOOPError()) elif errno == errno.ENAMETOOLONG: - raise SendtoENAMETOOLONGError() + raise SendtoError(SendtoENAMETOOLONGError()) else: - raise Error( + raise SendtoError(Error( "SendtoError: An error occurred while attempting to send data to the socket. Error code: ", errno, - ) + )) return UInt(result) @@ -1448,13 +1448,13 @@ fn shutdown(socket: FileDescriptor, how: ShutdownOption) raises ShutdownError: if result == -1: var errno = get_errno() if errno == errno.EBADF: - raise ShutdownEBADFError() + raise ShutdownError(ShutdownEBADFError()) elif errno == errno.EINVAL: - raise ShutdownEINVALError() + raise ShutdownError(ShutdownEINVALError()) elif errno == errno.ENOTCONN: - raise ShutdownENOTCONNError() + raise ShutdownError(ShutdownENOTCONNError()) elif errno == errno.ENOTSOCK: - raise ShutdownENOTSOCKError() + raise ShutdownError(ShutdownENOTSOCKError()) fn _close(fildes: c_int) -> c_int: @@ -1505,10 +1505,10 @@ fn close(file_descriptor: FileDescriptor) raises CloseError: if _close(file_descriptor.value) == -1: var errno = get_errno() if errno == errno.EBADF: - raise CloseEBADFError() + raise CloseError(CloseEBADFError()) elif errno == errno.EINTR: - raise CloseEINTRError() + raise CloseError(CloseEINTRError()) elif errno == errno.EIO: - raise CloseEIOError() + raise CloseError(CloseEIOError()) elif errno in [errno.ENOSPC, errno.EDQUOT]: - raise CloseENOSPCError() + raise CloseError(CloseENOSPCError()) diff --git a/lightbug_http/c/socket_error.mojo b/lightbug_http/c/socket_error.mojo index deec320b..edb0609b 100644 --- a/lightbug_http/c/socket_error.mojo +++ b/lightbug_http/c/socket_error.mojo @@ -4,8 +4,6 @@ Generated from socket.mojo error handling patterns. Follows the pattern from typed_errors.mojo. """ -from ffi import c_int, external_call, get_errno - from lightbug_http.utils.error import CustomError from utils import Variant @@ -1455,1266 +1453,186 @@ struct SocketEPROTONOSUPPORTError(CustomError, TrivialRegisterPassable): return Self.message -@fieldwise_init -struct AcceptError(Movable, Stringable, Writable): - """Typed error variant for accept() function.""" - - comptime type = Variant[ - AcceptEBADFError, - AcceptEINTRError, - AcceptEAGAINError, - AcceptECONNABORTEDError, - AcceptEFAULTError, - AcceptEINVALError, - AcceptEMFILEError, - AcceptENFILEError, - AcceptENOBUFSError, - AcceptENOTSOCKError, - AcceptEOPNOTSUPPError, - AcceptEPERMError, - AcceptEPROTOError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: AcceptEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptECONNABORTEDError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEMFILEError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptENFILEError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEOPNOTSUPPError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEPERMError): - self.value = value - - @implicit - fn __init__(out self, value: AcceptEPROTOError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[AcceptEBADFError](): - writer.write(self.value[AcceptEBADFError]) - elif self.value.isa[AcceptEINTRError](): - writer.write(self.value[AcceptEINTRError]) - elif self.value.isa[AcceptEAGAINError](): - writer.write(self.value[AcceptEAGAINError]) - elif self.value.isa[AcceptECONNABORTEDError](): - writer.write(self.value[AcceptECONNABORTEDError]) - elif self.value.isa[AcceptEFAULTError](): - writer.write(self.value[AcceptEFAULTError]) - elif self.value.isa[AcceptEINVALError](): - writer.write(self.value[AcceptEINVALError]) - elif self.value.isa[AcceptEMFILEError](): - writer.write(self.value[AcceptEMFILEError]) - elif self.value.isa[AcceptENFILEError](): - writer.write(self.value[AcceptENFILEError]) - elif self.value.isa[AcceptENOBUFSError](): - writer.write(self.value[AcceptENOBUFSError]) - elif self.value.isa[AcceptENOTSOCKError](): - writer.write(self.value[AcceptENOTSOCKError]) - elif self.value.isa[AcceptEOPNOTSUPPError](): - writer.write(self.value[AcceptEOPNOTSUPPError]) - elif self.value.isa[AcceptEPERMError](): - writer.write(self.value[AcceptEPERMError]) - elif self.value.isa[AcceptEPROTOError](): - writer.write(self.value[AcceptEPROTOError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct BindError(Movable, Stringable, Writable): - """Typed error variant for bind() function.""" - - comptime type = Variant[ - BindEACCESError, - BindEADDRINUSEError, - BindEBADFError, - BindEFAULTError, - BindEINVALError, - BindELOOPError, - BindENAMETOOLONGError, - BindENOMEMError, - BindENOTSOCKError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: BindEACCESError): - self.value = value - - @implicit - fn __init__(out self, value: BindEADDRINUSEError): - self.value = value - - @implicit - fn __init__(out self, value: BindEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: BindEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: BindEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: BindELOOPError): - self.value = value - - @implicit - fn __init__(out self, value: BindENAMETOOLONGError): - self.value = value - - @implicit - fn __init__(out self, value: BindENOMEMError): - self.value = value - - @implicit - fn __init__(out self, value: BindENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[BindEACCESError](): - writer.write(self.value[BindEACCESError]) - elif self.value.isa[BindEADDRINUSEError](): - writer.write(self.value[BindEADDRINUSEError]) - elif self.value.isa[BindEBADFError](): - writer.write(self.value[BindEBADFError]) - elif self.value.isa[BindEFAULTError](): - writer.write(self.value[BindEFAULTError]) - elif self.value.isa[BindEINVALError](): - writer.write(self.value[BindEINVALError]) - elif self.value.isa[BindELOOPError](): - writer.write(self.value[BindELOOPError]) - elif self.value.isa[BindENAMETOOLONGError](): - writer.write(self.value[BindENAMETOOLONGError]) - elif self.value.isa[BindENOMEMError](): - writer.write(self.value[BindENOMEMError]) - elif self.value.isa[BindENOTSOCKError](): - writer.write(self.value[BindENOTSOCKError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct CloseError(Movable, Stringable, Writable): - """Typed error variant for close() function.""" - - comptime type = Variant[CloseEBADFError, CloseEINTRError, CloseEIOError, CloseENOSPCError] - var value: Self.type - - @implicit - fn __init__(out self, value: CloseEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: CloseEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: CloseEIOError): - self.value = value - - @implicit - fn __init__(out self, value: CloseENOSPCError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[CloseEBADFError](): - writer.write(self.value[CloseEBADFError]) - elif self.value.isa[CloseEINTRError](): - writer.write(self.value[CloseEINTRError]) - elif self.value.isa[CloseEIOError](): - writer.write(self.value[CloseEIOError]) - elif self.value.isa[CloseENOSPCError](): - writer.write(self.value[CloseENOSPCError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct ConnectError(Movable, Stringable, Writable): - """Typed error variant for connect() function.""" - - comptime type = Variant[ - ConnectEACCESError, - ConnectEADDRINUSEError, - ConnectEAFNOSUPPORTError, - ConnectEAGAINError, - ConnectEALREADYError, - ConnectEBADFError, - ConnectECONNREFUSEDError, - ConnectEFAULTError, - ConnectEINPROGRESSError, - ConnectEINTRError, - ConnectEISCONNError, - ConnectENETUNREACHError, - ConnectENOTSOCKError, - ConnectETIMEDOUTError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: ConnectEACCESError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEADDRINUSEError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEAFNOSUPPORTError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEALREADYError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectECONNREFUSEDError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEINPROGRESSError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectEISCONNError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectENETUNREACHError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: ConnectETIMEDOUTError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[ConnectEACCESError](): - writer.write(self.value[ConnectEACCESError]) - elif self.value.isa[ConnectEADDRINUSEError](): - writer.write(self.value[ConnectEADDRINUSEError]) - elif self.value.isa[ConnectEAFNOSUPPORTError](): - writer.write(self.value[ConnectEAFNOSUPPORTError]) - elif self.value.isa[ConnectEAGAINError](): - writer.write(self.value[ConnectEAGAINError]) - elif self.value.isa[ConnectEALREADYError](): - writer.write(self.value[ConnectEALREADYError]) - elif self.value.isa[ConnectEBADFError](): - writer.write(self.value[ConnectEBADFError]) - elif self.value.isa[ConnectECONNREFUSEDError](): - writer.write(self.value[ConnectECONNREFUSEDError]) - elif self.value.isa[ConnectEFAULTError](): - writer.write(self.value[ConnectEFAULTError]) - elif self.value.isa[ConnectEINPROGRESSError](): - writer.write(self.value[ConnectEINPROGRESSError]) - elif self.value.isa[ConnectEINTRError](): - writer.write(self.value[ConnectEINTRError]) - elif self.value.isa[ConnectEISCONNError](): - writer.write(self.value[ConnectEISCONNError]) - elif self.value.isa[ConnectENETUNREACHError](): - writer.write(self.value[ConnectENETUNREACHError]) - elif self.value.isa[ConnectENOTSOCKError](): - writer.write(self.value[ConnectENOTSOCKError]) - elif self.value.isa[ConnectETIMEDOUTError](): - writer.write(self.value[ConnectETIMEDOUTError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct GetpeernameError(Movable, Stringable, Writable): - """Typed error variant for getpeername() function.""" - - comptime type = Variant[ - GetpeernameEBADFError, - GetpeernameEFAULTError, - GetpeernameEINVALError, - GetpeernameENOBUFSError, - GetpeernameENOTCONNError, - GetpeernameENOTSOCKError, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: GetpeernameEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: GetpeernameEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: GetpeernameEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: GetpeernameENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: GetpeernameENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: GetpeernameENOTSOCKError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[GetpeernameEBADFError](): - writer.write(self.value[GetpeernameEBADFError]) - elif self.value.isa[GetpeernameEFAULTError](): - writer.write(self.value[GetpeernameEFAULTError]) - elif self.value.isa[GetpeernameEINVALError](): - writer.write(self.value[GetpeernameEINVALError]) - elif self.value.isa[GetpeernameENOBUFSError](): - writer.write(self.value[GetpeernameENOBUFSError]) - elif self.value.isa[GetpeernameENOTCONNError](): - writer.write(self.value[GetpeernameENOTCONNError]) - elif self.value.isa[GetpeernameENOTSOCKError](): - writer.write(self.value[GetpeernameENOTSOCKError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct GetsocknameError(Movable, Stringable, Writable): - """Typed error variant for getsockname() function.""" - - comptime type = Variant[ - GetsocknameEBADFError, - GetsocknameEFAULTError, - GetsocknameEINVALError, - GetsocknameENOBUFSError, - GetsocknameENOTSOCKError, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: GetsocknameEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: GetsocknameEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: GetsocknameEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: GetsocknameENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: GetsocknameENOTSOCKError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[GetsocknameEBADFError](): - writer.write(self.value[GetsocknameEBADFError]) - elif self.value.isa[GetsocknameEFAULTError](): - writer.write(self.value[GetsocknameEFAULTError]) - elif self.value.isa[GetsocknameEINVALError](): - writer.write(self.value[GetsocknameEINVALError]) - elif self.value.isa[GetsocknameENOBUFSError](): - writer.write(self.value[GetsocknameENOBUFSError]) - elif self.value.isa[GetsocknameENOTSOCKError](): - writer.write(self.value[GetsocknameENOTSOCKError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct GetsockoptError(Movable, Stringable, Writable): - """Typed error variant for getsockopt() function.""" - - comptime type = Variant[ - GetsockoptEBADFError, - GetsockoptEFAULTError, - GetsockoptEINVALError, - GetsockoptENOPROTOOPTError, - GetsockoptENOTSOCKError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: GetsockoptEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: GetsockoptEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: GetsockoptEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: GetsockoptENOPROTOOPTError): - self.value = value - - @implicit - fn __init__(out self, value: GetsockoptENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[GetsockoptEBADFError](): - writer.write(self.value[GetsockoptEBADFError]) - elif self.value.isa[GetsockoptEFAULTError](): - writer.write(self.value[GetsockoptEFAULTError]) - elif self.value.isa[GetsockoptEINVALError](): - writer.write(self.value[GetsockoptEINVALError]) - elif self.value.isa[GetsockoptENOPROTOOPTError](): - writer.write(self.value[GetsockoptENOPROTOOPTError]) - elif self.value.isa[GetsockoptENOTSOCKError](): - writer.write(self.value[GetsockoptENOTSOCKError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct ListenError(Movable, Stringable, Writable): - """Typed error variant for listen() function.""" - - comptime type = Variant[ListenEADDRINUSEError, ListenEBADFError, ListenENOTSOCKError, ListenEOPNOTSUPPError] - var value: Self.type - - @implicit - fn __init__(out self, value: ListenEADDRINUSEError): - self.value = value - - @implicit - fn __init__(out self, value: ListenEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: ListenENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: ListenEOPNOTSUPPError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[ListenEADDRINUSEError](): - writer.write(self.value[ListenEADDRINUSEError]) - elif self.value.isa[ListenEBADFError](): - writer.write(self.value[ListenEBADFError]) - elif self.value.isa[ListenENOTSOCKError](): - writer.write(self.value[ListenENOTSOCKError]) - elif self.value.isa[ListenEOPNOTSUPPError](): - writer.write(self.value[ListenEOPNOTSUPPError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct RecvError(Movable, Stringable, Writable): - """Typed error variant for recv() function.""" - - comptime type = Variant[ - RecvEAGAINError, - RecvEBADFError, - RecvECONNREFUSEDError, - RecvEFAULTError, - RecvEINTRError, - RecvENOTCONNError, - RecvENOTSOCKError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: RecvEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: RecvEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: RecvECONNREFUSEDError): - self.value = value - - @implicit - fn __init__(out self, value: RecvEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: RecvEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: RecvENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: RecvENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[RecvEAGAINError](): - writer.write(self.value[RecvEAGAINError]) - elif self.value.isa[RecvEBADFError](): - writer.write(self.value[RecvEBADFError]) - elif self.value.isa[RecvECONNREFUSEDError](): - writer.write(self.value[RecvECONNREFUSEDError]) - elif self.value.isa[RecvEFAULTError](): - writer.write(self.value[RecvEFAULTError]) - elif self.value.isa[RecvEINTRError](): - writer.write(self.value[RecvEINTRError]) - elif self.value.isa[RecvENOTCONNError](): - writer.write(self.value[RecvENOTCONNError]) - elif self.value.isa[RecvENOTSOCKError](): - writer.write(self.value[RecvENOTSOCKError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct RecvfromError(Movable, Stringable, Writable): - """Typed error variant for recvfrom() function.""" - - comptime type = Variant[ - RecvfromEAGAINError, - RecvfromEBADFError, - RecvfromECONNRESETError, - RecvfromEINTRError, - RecvfromEINVALError, - RecvfromEIOError, - RecvfromENOBUFSError, - RecvfromENOMEMError, - RecvfromENOTCONNError, - RecvfromENOTSOCKError, - RecvfromEOPNOTSUPPError, - RecvfromETIMEDOUTError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: RecvfromEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromECONNRESETError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromEIOError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromENOMEMError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromEOPNOTSUPPError): - self.value = value - - @implicit - fn __init__(out self, value: RecvfromETIMEDOUTError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[RecvfromEAGAINError](): - writer.write(self.value[RecvfromEAGAINError]) - elif self.value.isa[RecvfromEBADFError](): - writer.write(self.value[RecvfromEBADFError]) - elif self.value.isa[RecvfromECONNRESETError](): - writer.write(self.value[RecvfromECONNRESETError]) - elif self.value.isa[RecvfromEINTRError](): - writer.write(self.value[RecvfromEINTRError]) - elif self.value.isa[RecvfromEINVALError](): - writer.write(self.value[RecvfromEINVALError]) - elif self.value.isa[RecvfromEIOError](): - writer.write(self.value[RecvfromEIOError]) - elif self.value.isa[RecvfromENOBUFSError](): - writer.write(self.value[RecvfromENOBUFSError]) - elif self.value.isa[RecvfromENOMEMError](): - writer.write(self.value[RecvfromENOMEMError]) - elif self.value.isa[RecvfromENOTCONNError](): - writer.write(self.value[RecvfromENOTCONNError]) - elif self.value.isa[RecvfromENOTSOCKError](): - writer.write(self.value[RecvfromENOTSOCKError]) - elif self.value.isa[RecvfromEOPNOTSUPPError](): - writer.write(self.value[RecvfromEOPNOTSUPPError]) - elif self.value.isa[RecvfromETIMEDOUTError](): - writer.write(self.value[RecvfromETIMEDOUTError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct SendError(Movable, Stringable, Writable): - """Typed error variant for send() function.""" - - comptime type = Variant[ - SendEAGAINError, - SendEBADFError, - SendECONNREFUSEDError, - SendECONNRESETError, - SendEDESTADDRREQError, - SendEFAULTError, - SendEINTRError, - SendEINVALError, - SendEISCONNError, - SendENOBUFSError, - SendENOMEMError, - SendENOTCONNError, - SendENOTSOCKError, - SendEOPNOTSUPPError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: SendEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: SendEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: SendECONNREFUSEDError): - self.value = value - - @implicit - fn __init__(out self, value: SendECONNRESETError): - self.value = value - - @implicit - fn __init__(out self, value: SendEDESTADDRREQError): - self.value = value - - @implicit - fn __init__(out self, value: SendEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: SendEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: SendEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: SendEISCONNError): - self.value = value - - @implicit - fn __init__(out self, value: SendENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: SendENOMEMError): - self.value = value - - @implicit - fn __init__(out self, value: SendENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: SendENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: SendEOPNOTSUPPError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[SendEAGAINError](): - writer.write(self.value[SendEAGAINError]) - elif self.value.isa[SendEBADFError](): - writer.write(self.value[SendEBADFError]) - elif self.value.isa[SendECONNREFUSEDError](): - writer.write(self.value[SendECONNREFUSEDError]) - elif self.value.isa[SendECONNRESETError](): - writer.write(self.value[SendECONNRESETError]) - elif self.value.isa[SendEDESTADDRREQError](): - writer.write(self.value[SendEDESTADDRREQError]) - elif self.value.isa[SendEFAULTError](): - writer.write(self.value[SendEFAULTError]) - elif self.value.isa[SendEINTRError](): - writer.write(self.value[SendEINTRError]) - elif self.value.isa[SendEINVALError](): - writer.write(self.value[SendEINVALError]) - elif self.value.isa[SendEISCONNError](): - writer.write(self.value[SendEISCONNError]) - elif self.value.isa[SendENOBUFSError](): - writer.write(self.value[SendENOBUFSError]) - elif self.value.isa[SendENOMEMError](): - writer.write(self.value[SendENOMEMError]) - elif self.value.isa[SendENOTCONNError](): - writer.write(self.value[SendENOTCONNError]) - elif self.value.isa[SendENOTSOCKError](): - writer.write(self.value[SendENOTSOCKError]) - elif self.value.isa[SendEOPNOTSUPPError](): - writer.write(self.value[SendEOPNOTSUPPError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct SendtoError(Movable, Stringable, Writable): - """Typed error variant for sendto() function.""" - - comptime type = Variant[ - SendtoEACCESError, - SendtoEAFNOSUPPORTError, - SendtoEAGAINError, - SendtoEBADFError, - SendtoECONNRESETError, - SendtoEDESTADDRREQError, - SendtoEHOSTUNREACHError, - SendtoEINTRError, - SendtoEINVALError, - SendtoEIOError, - SendtoEISCONNError, - SendtoELOOPError, - SendtoEMSGSIZEError, - SendtoENAMETOOLONGError, - SendtoENETDOWNError, - SendtoENETUNREACHError, - SendtoENOBUFSError, - SendtoENOMEMError, - SendtoENOTCONNError, - SendtoENOTSOCKError, - SendtoEPIPEError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: SendtoEACCESError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEAFNOSUPPORTError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEAGAINError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoECONNRESETError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEDESTADDRREQError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEHOSTUNREACHError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEINTRError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEIOError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEISCONNError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoELOOPError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEMSGSIZEError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENAMETOOLONGError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENETDOWNError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENETUNREACHError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENOMEMError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, value: SendtoEPIPEError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[SendtoEACCESError](): - writer.write(self.value[SendtoEACCESError]) - elif self.value.isa[SendtoEAFNOSUPPORTError](): - writer.write(self.value[SendtoEAFNOSUPPORTError]) - elif self.value.isa[SendtoEAGAINError](): - writer.write(self.value[SendtoEAGAINError]) - elif self.value.isa[SendtoEBADFError](): - writer.write(self.value[SendtoEBADFError]) - elif self.value.isa[SendtoECONNRESETError](): - writer.write(self.value[SendtoECONNRESETError]) - elif self.value.isa[SendtoEDESTADDRREQError](): - writer.write(self.value[SendtoEDESTADDRREQError]) - elif self.value.isa[SendtoEHOSTUNREACHError](): - writer.write(self.value[SendtoEHOSTUNREACHError]) - elif self.value.isa[SendtoEINTRError](): - writer.write(self.value[SendtoEINTRError]) - elif self.value.isa[SendtoEINVALError](): - writer.write(self.value[SendtoEINVALError]) - elif self.value.isa[SendtoEIOError](): - writer.write(self.value[SendtoEIOError]) - elif self.value.isa[SendtoEISCONNError](): - writer.write(self.value[SendtoEISCONNError]) - elif self.value.isa[SendtoELOOPError](): - writer.write(self.value[SendtoELOOPError]) - elif self.value.isa[SendtoEMSGSIZEError](): - writer.write(self.value[SendtoEMSGSIZEError]) - elif self.value.isa[SendtoENAMETOOLONGError](): - writer.write(self.value[SendtoENAMETOOLONGError]) - elif self.value.isa[SendtoENETDOWNError](): - writer.write(self.value[SendtoENETDOWNError]) - elif self.value.isa[SendtoENETUNREACHError](): - writer.write(self.value[SendtoENETUNREACHError]) - elif self.value.isa[SendtoENOBUFSError](): - writer.write(self.value[SendtoENOBUFSError]) - elif self.value.isa[SendtoENOMEMError](): - writer.write(self.value[SendtoENOMEMError]) - elif self.value.isa[SendtoENOTCONNError](): - writer.write(self.value[SendtoENOTCONNError]) - elif self.value.isa[SendtoENOTSOCKError](): - writer.write(self.value[SendtoENOTSOCKError]) - elif self.value.isa[SendtoEPIPEError](): - writer.write(self.value[SendtoEPIPEError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct SetsockoptError(Movable, Stringable, Writable): - """Typed error variant for setsockopt() function.""" - - comptime type = Variant[ - SetsockoptEBADFError, - SetsockoptEFAULTError, - SetsockoptEINVALError, - SetsockoptENOPROTOOPTError, - SetsockoptENOTSOCKError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: SetsockoptEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: SetsockoptEFAULTError): - self.value = value - - @implicit - fn __init__(out self, value: SetsockoptEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: SetsockoptENOPROTOOPTError): - self.value = value - - @implicit - fn __init__(out self, value: SetsockoptENOTSOCKError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[SetsockoptEBADFError](): - writer.write(self.value[SetsockoptEBADFError]) - elif self.value.isa[SetsockoptEFAULTError](): - writer.write(self.value[SetsockoptEFAULTError]) - elif self.value.isa[SetsockoptEINVALError](): - writer.write(self.value[SetsockoptEINVALError]) - elif self.value.isa[SetsockoptENOPROTOOPTError](): - writer.write(self.value[SetsockoptENOPROTOOPTError]) - elif self.value.isa[SetsockoptENOTSOCKError](): - writer.write(self.value[SetsockoptENOTSOCKError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct ShutdownError(Movable, Stringable, Writable): - """Typed error variant for shutdown() function.""" - - comptime type = Variant[ShutdownEBADFError, ShutdownEINVALError, ShutdownENOTCONNError, ShutdownENOTSOCKError] - var value: Self.type - - @implicit - fn __init__(out self, value: ShutdownEBADFError): - self.value = value - - @implicit - fn __init__(out self, value: ShutdownEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: ShutdownENOTCONNError): - self.value = value - - @implicit - fn __init__(out self, value: ShutdownENOTSOCKError): - self.value = value - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[ShutdownEBADFError](): - writer.write(self.value[ShutdownEBADFError]) - elif self.value.isa[ShutdownEINVALError](): - writer.write(self.value[ShutdownEINVALError]) - elif self.value.isa[ShutdownENOTCONNError](): - writer.write(self.value[ShutdownENOTCONNError]) - elif self.value.isa[ShutdownENOTSOCKError](): - writer.write(self.value[ShutdownENOTSOCKError]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) - - -@fieldwise_init -struct SocketError(Movable, Stringable, Writable): - """Typed error variant for socket() function.""" - - comptime type = Variant[ - SocketEACCESError, - SocketEAFNOSUPPORTError, - SocketEINVALError, - SocketEMFILEError, - SocketENFILEError, - SocketENOBUFSError, - SocketEPROTONOSUPPORTError, - Error, - ] - var value: Self.type - - @implicit - fn __init__(out self, value: SocketEACCESError): - self.value = value - - @implicit - fn __init__(out self, value: SocketEAFNOSUPPORTError): - self.value = value - - @implicit - fn __init__(out self, value: SocketEINVALError): - self.value = value - - @implicit - fn __init__(out self, value: SocketEMFILEError): - self.value = value - - @implicit - fn __init__(out self, value: SocketENFILEError): - self.value = value - - @implicit - fn __init__(out self, value: SocketENOBUFSError): - self.value = value - - @implicit - fn __init__(out self, value: SocketEPROTONOSUPPORTError): - self.value = value - - @implicit - fn __init__(out self, var value: Error): - self.value = value^ - - fn write_to[W: Writer, //](self, mut writer: W): - if self.value.isa[SocketEACCESError](): - writer.write(self.value[SocketEACCESError]) - elif self.value.isa[SocketEAFNOSUPPORTError](): - writer.write(self.value[SocketEAFNOSUPPORTError]) - elif self.value.isa[SocketEINVALError](): - writer.write(self.value[SocketEINVALError]) - elif self.value.isa[SocketEMFILEError](): - writer.write(self.value[SocketEMFILEError]) - elif self.value.isa[SocketENFILEError](): - writer.write(self.value[SocketENFILEError]) - elif self.value.isa[SocketENOBUFSError](): - writer.write(self.value[SocketENOBUFSError]) - elif self.value.isa[SocketEPROTONOSUPPORTError](): - writer.write(self.value[SocketEPROTONOSUPPORTError]) - elif self.value.isa[Error](): - writer.write(self.value[Error]) - - fn isa[T: AnyType](self) -> Bool: - return self.value.isa[T]() - - fn __getitem__[T: AnyType](self) -> ref [self.value] T: - return self.value[T] - - fn __str__(self) -> String: - return String.write(self) +comptime AcceptError = Variant[ + AcceptEBADFError, + AcceptEINTRError, + AcceptEAGAINError, + AcceptECONNABORTEDError, + AcceptEFAULTError, + AcceptEINVALError, + AcceptEMFILEError, + AcceptENFILEError, + AcceptENOBUFSError, + AcceptENOTSOCKError, + AcceptEOPNOTSUPPError, + AcceptEPERMError, + AcceptEPROTOError, + Error, +] + + +comptime BindError = Variant[ + BindEACCESError, + BindEADDRINUSEError, + BindEBADFError, + BindEFAULTError, + BindEINVALError, + BindELOOPError, + BindENAMETOOLONGError, + BindENOMEMError, + BindENOTSOCKError, + Error, +] + + +comptime CloseError = Variant[CloseEBADFError, CloseEINTRError, CloseEIOError, CloseENOSPCError] + + +comptime ConnectError = Variant[ + ConnectEACCESError, + ConnectEADDRINUSEError, + ConnectEAFNOSUPPORTError, + ConnectEAGAINError, + ConnectEALREADYError, + ConnectEBADFError, + ConnectECONNREFUSEDError, + ConnectEFAULTError, + ConnectEINPROGRESSError, + ConnectEINTRError, + ConnectEISCONNError, + ConnectENETUNREACHError, + ConnectENOTSOCKError, + ConnectETIMEDOUTError, + Error, +] + + +comptime GetpeernameError = Variant[ + GetpeernameEBADFError, + GetpeernameEFAULTError, + GetpeernameEINVALError, + GetpeernameENOBUFSError, + GetpeernameENOTCONNError, + GetpeernameENOTSOCKError, +] + + +comptime GetsocknameError = Variant[ + GetsocknameEBADFError, + GetsocknameEFAULTError, + GetsocknameEINVALError, + GetsocknameENOBUFSError, + GetsocknameENOTSOCKError, +] + + +comptime GetsockoptError = Variant[ + GetsockoptEBADFError, + GetsockoptEFAULTError, + GetsockoptEINVALError, + GetsockoptENOPROTOOPTError, + GetsockoptENOTSOCKError, + Error, +] + + +comptime ListenError = Variant[ListenEADDRINUSEError, ListenEBADFError, ListenENOTSOCKError, ListenEOPNOTSUPPError] + + +comptime RecvError = Variant[ + RecvEAGAINError, + RecvEBADFError, + RecvECONNREFUSEDError, + RecvEFAULTError, + RecvEINTRError, + RecvENOTCONNError, + RecvENOTSOCKError, + Error, +] + + +comptime RecvfromError = Variant[ + RecvfromEAGAINError, + RecvfromEBADFError, + RecvfromECONNRESETError, + RecvfromEINTRError, + RecvfromEINVALError, + RecvfromEIOError, + RecvfromENOBUFSError, + RecvfromENOMEMError, + RecvfromENOTCONNError, + RecvfromENOTSOCKError, + RecvfromEOPNOTSUPPError, + RecvfromETIMEDOUTError, + Error, +] + + +comptime SendError = Variant[ + SendEAGAINError, + SendEBADFError, + SendECONNREFUSEDError, + SendECONNRESETError, + SendEDESTADDRREQError, + SendEFAULTError, + SendEINTRError, + SendEINVALError, + SendEISCONNError, + SendENOBUFSError, + SendENOMEMError, + SendENOTCONNError, + SendENOTSOCKError, + SendEOPNOTSUPPError, + Error, +] + + +comptime SendtoError = Variant[ + SendtoEACCESError, + SendtoEAFNOSUPPORTError, + SendtoEAGAINError, + SendtoEBADFError, + SendtoECONNRESETError, + SendtoEDESTADDRREQError, + SendtoEHOSTUNREACHError, + SendtoEINTRError, + SendtoEINVALError, + SendtoEIOError, + SendtoEISCONNError, + SendtoELOOPError, + SendtoEMSGSIZEError, + SendtoENAMETOOLONGError, + SendtoENETDOWNError, + SendtoENETUNREACHError, + SendtoENOBUFSError, + SendtoENOMEMError, + SendtoENOTCONNError, + SendtoENOTSOCKError, + SendtoEPIPEError, + Error, +] + + +comptime SetsockoptError = Variant[ + SetsockoptEBADFError, + SetsockoptEFAULTError, + SetsockoptEINVALError, + SetsockoptENOPROTOOPTError, + SetsockoptENOTSOCKError, + Error, +] + + +comptime ShutdownError = Variant[ShutdownEBADFError, ShutdownEINVALError, ShutdownENOTCONNError, ShutdownENOTSOCKError] + + +comptime SocketError = Variant[ + SocketEACCESError, + SocketEAFNOSUPPORTError, + SocketEINVALError, + SocketEMFILEError, + SocketENFILEError, + SocketENOBUFSError, + SocketEPROTONOSUPPORTError, + Error, +] diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index 3dbcb812..69277abf 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -819,7 +819,7 @@ struct Socket[ """ # SO_RCVTIMEO requires a timeval struct: {tv_sec: Int64, tv_usec: Int64} # (16 bytes on both macOS and Linux 64-bit). - var timeval = InlineArray[Int64, 2](seconds, 0) + var timeval: InlineArray[Int64, 2] = [seconds, 0] _ = _setsockopt( self.fd.value, SOL_SOCKET, From f0cc633d7482d7e101ace986d515e7e7da8f2f54 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Feb 2026 20:15:57 +0100 Subject: [PATCH 06/27] fix int conversions --- lightbug_http/c/network.mojo | 4 ++-- lightbug_http/c/socket.mojo | 22 +++++++++++----------- lightbug_http/socket.mojo | 2 +- lightbug_http/uri.mojo | 24 ++++++++++++------------ 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index 4c9889b0..76ad4e18 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -175,7 +175,7 @@ struct sockaddr_in(TrivialRegisterPassable): port: A 16-bit integer port in host byte order, gets converted to network byte order via `htons`. binary_ip: The binary representation of the IP address. """ - self.sin_family = address_family + self.sin_family = sa_family_t(address_family) self.sin_port = htons(port) self.sin_addr = in_addr(binary_ip) self.sin_zero = StaticTuple[c_char, 8](0, 0, 0, 0, 0, 0, 0, 0) @@ -327,7 +327,7 @@ fn inet_ntop[ address_family.value, UnsafePointer(to=ip_address).bitcast[c_void](), dst.unsafe_ptr().bitcast[c_char](), - address_length.value, + UInt32(address_length.value), ) if not result: var errno = get_errno() diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index cdc0d935..9e40feb4 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -323,11 +323,11 @@ fn setsockopt( * Reference: https://man7.org/linux/man-pages/man3/setsockopt.3p.html . """ var result = _setsockopt( - socket.value, + Int32(socket.value), level, option_name, UnsafePointer(to=option_value).bitcast[c_void](), - size_of[Int32](), + UInt32(size_of[Int32]()), ) if result == -1: var errno = get_errno() @@ -499,7 +499,7 @@ fn getsockname(socket: FileDescriptor, mut address: SocketAddress) raises Getsoc * Reference: https://man7.org/linux/man-pages/man3/getsockname.3p.html . """ var sockaddr_size = address.SIZE - var result = _getsockname(socket.value, address.unsafe_ptr(), Pointer(to=sockaddr_size)) + var result = _getsockname(Int32(socket.value), address.unsafe_ptr(), Pointer(to=sockaddr_size)) if result == -1: var errno = get_errno() if errno == errno.EBADF: @@ -570,7 +570,7 @@ fn getpeername(file_descriptor: FileDescriptor) raises GetpeernameError -> Socke var remote_address = SocketAddress() var sockaddr_size = remote_address.SIZE var result = _getpeername( - file_descriptor.value, + Int32(file_descriptor.value), remote_address.unsafe_ptr(), Pointer(to=sockaddr_size), ) @@ -652,7 +652,7 @@ fn bind(socket: FileDescriptor, mut address: SocketAddress) raises BindError: #### Notes: * Reference: https://man7.org/linux/man-pages/man3/bind.3p.html . """ - var result = _bind(socket.value, Pointer(to=address.as_sockaddr_in()), address.SIZE) + var result = _bind(Int32(socket.value), Pointer(to=address.as_sockaddr_in()), address.SIZE) if result == -1: var errno = get_errno() if errno == errno.EACCES: @@ -720,7 +720,7 @@ fn listen(socket: FileDescriptor, backlog: c_int) raises ListenError: #### Notes: * Reference: https://man7.org/linux/man-pages/man3/listen.3p.html . """ - var result = _listen(socket.value, backlog) + var result = _listen(Int32(socket.value), backlog) if result == -1: var errno = get_errno() if errno == errno.EADDRINUSE: @@ -794,7 +794,7 @@ fn accept(socket: FileDescriptor) raises AcceptError -> FileDescriptor: var remote_address = sockaddr() # TODO: Should this be sizeof sockaddr? var buffer_size = socklen_t(size_of[socklen_t]()) - var result = _accept(socket.value, Pointer(to=remote_address), Pointer(to=buffer_size)) + var result = _accept(Int32(socket.value), Pointer(to=remote_address), Pointer(to=buffer_size)) if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: @@ -983,7 +983,7 @@ fn recv[ #### Notes: * Reference: https://man7.org/linux/man-pages/man3/recv.3p.html . """ - var result = _recv(socket.value, buffer.unsafe_ptr().bitcast[c_void](), length, flags) + var result = _recv(Int32(socket.value), buffer.unsafe_ptr().bitcast[c_void](), length, flags) if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: @@ -1217,7 +1217,7 @@ fn send[ #### Notes: * Reference: https://man7.org/linux/man-pages/man3/send.3p.html . """ - var result = _send(socket.value, buffer.unsafe_ptr().bitcast[c_void](), length, flags) + var result = _send(Int32(socket.value), buffer.unsafe_ptr().bitcast[c_void](), length, flags) if result == -1: var errno = get_errno() if errno in [errno.EAGAIN, errno.EWOULDBLOCK]: @@ -1444,7 +1444,7 @@ fn shutdown(socket: FileDescriptor, how: ShutdownOption) raises ShutdownError: #### Notes: * Reference: https://man7.org/linux/man-pages/man3/shutdown.3p.html . """ - var result = _shutdown(socket.value, how.value) + var result = _shutdown(Int32(socket.value), how.value) if result == -1: var errno = get_errno() if errno == errno.EBADF: @@ -1502,7 +1502,7 @@ fn close(file_descriptor: FileDescriptor) raises CloseError: #### Notes: * Reference: https://man7.org/linux/man-pages/man3/close.3p.html . """ - if _close(file_descriptor.value) == -1: + if _close(Int32(file_descriptor.value)) == -1: var errno = get_errno() if errno == errno.EBADF: raise CloseError(CloseEBADFError()) diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index 69277abf..a35a329c 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -606,7 +606,7 @@ struct Socket[ Raises: SetsockoptError: If setting the socket option fails. """ - setsockopt(self.fd, SOL_SOCKET, option_name.value, option_value) + setsockopt(self.fd, SOL_SOCKET, option_name.value, Int32(option_value)) fn connect(mut self, mut ip_address: String, port: UInt16) raises -> None: """Connect to a remote socket at address. diff --git a/lightbug_http/uri.mojo b/lightbug_http/uri.mojo index 212b1f0c..915b17d5 100644 --- a/lightbug_http/uri.mojo +++ b/lightbug_http/uri.mojo @@ -32,7 +32,7 @@ fn unquote[expand_plus: Bool = False](input_str: String, disallowed_escapes: Lis encoded_str[current_offset + 1 : current_offset + 3], base=16, ) - str_bytes.append(char_byte) + str_bytes.append(UInt8(char_byte)) except: break @@ -80,8 +80,8 @@ struct URIDelimiters: struct PortBounds: - comptime NINE: UInt8 = ord("9") - comptime ZERO: UInt8 = ord("0") + comptime NINE: UInt8 = UInt8(ord("9")) + comptime ZERO: UInt8 = UInt8(ord("0")) @fieldwise_init @@ -151,7 +151,7 @@ struct URI(Copyable, Representable, Stringable, Writable): # Assume http if no scheme is provided, fairly safe given the context of lightbug. var scheme: String = "http" if "://" in uri: - scheme = String(reader.read_until(ord(URIDelimiters.SCHEME))) + scheme = String(reader.read_until(UInt8(ord(URIDelimiters.SCHEME)))) var scheme_delimiter: ByteView[origin_of(uri)] try: scheme_delimiter = reader.read_bytes(3) @@ -170,8 +170,8 @@ struct URI(Copyable, Representable, Stringable, Writable): # Parse the user info, if exists. # TODO (@thatstoasty): Store the user information (username and password) if it exists. - if ord(URIDelimiters.AUTHORITY) in reader: - _ = reader.read_until(ord(URIDelimiters.AUTHORITY)) + if UInt8(ord(URIDelimiters.AUTHORITY)) in reader: + _ = reader.read_until(UInt8(ord(URIDelimiters.AUTHORITY))) reader.increment(1) # TODOs (@thatstoasty) @@ -179,8 +179,8 @@ struct URI(Copyable, Representable, Stringable, Writable): # Handle string host # A query right after the domain is a valid uri, but it's equivalent to example.com/?query # so we should add the normalization of paths - var host_and_port = reader.read_until(ord(URIDelimiters.PATH)) - colon = host_and_port.find(ord(URIDelimiters.SCHEME)) + var host_and_port = reader.read_until(UInt8(ord(URIDelimiters.PATH))) + colon = host_and_port.find(UInt8(ord(URIDelimiters.SCHEME))) var host: String var port: Optional[UInt16] = None if colon != -1: @@ -206,7 +206,7 @@ struct URI(Copyable, Representable, Stringable, Writable): # Reads until either the start of the query string, or the end of the uri. var unquote_reader = reader.copy() - var original_path_bytes = unquote_reader.read_until(ord(URIDelimiters.QUERY)) + var original_path_bytes = unquote_reader.read_until(UInt8(ord(URIDelimiters.QUERY))) var original_path: String if not original_path_bytes: original_path = "/" @@ -237,14 +237,14 @@ struct URI(Copyable, Representable, Stringable, Writable): var path: String = "/" var request_uri: String = "/" - if path_delimiter == ord(URIDelimiters.PATH): + if path_delimiter == UInt8(ord(URIDelimiters.PATH)): # Copy the remaining bytes to read the request uri. var request_uri_reader = reader.copy() request_uri = String(request_uri_reader.read_bytes()) # Read until the query string, or the end if there is none. path = unquote( - String(reader.read_until(ord(URIDelimiters.QUERY))), + String(reader.read_until(UInt8(ord(URIDelimiters.QUERY)))), disallowed_escapes=["/"], ) @@ -259,7 +259,7 @@ struct URI(Copyable, Representable, Stringable, Writable): return result^ var query: String = "" - if query_delimiter == ord(URIDelimiters.QUERY): + if query_delimiter == UInt8(ord(URIDelimiters.QUERY)): # TODO: Handle fragments for anchors query = String(reader.read_bytes()[1:]) From 0219b331ea44d4e92049bd769ddcad5fbacb465d Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 13:33:08 +0100 Subject: [PATCH 07/27] replace write_bytes with write_string --- lightbug_http/io/bytes.mojo | 4 ++-- lightbug_http/uri.mojo | 2 +- tests/lightbug_http/io/test_byte_writer.mojo | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index 3f659751..9219e551 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -32,7 +32,7 @@ struct ByteWriter(Writer): self._inner = Bytes(capacity=capacity) @always_inline - fn write_bytes(mut self, bytes: Span[Byte]) -> None: + fn write_string(mut self, bytes: Span[Byte]) -> None: """Writes the contents of `bytes` into the internal buffer. Args: @@ -360,7 +360,7 @@ fn create_string_from_ptr[origin: ImmutOrigin](ptr: UnsafePointer[UInt8, origin] # for i in range(length): # buf.append(ptr[i]) - result.write_bytes(Span(ptr=ptr, length=length)) + result.write_string(StringSlice(unsafe_from_utf8=Span(ptr=ptr, length=length))) return result^ diff --git a/lightbug_http/uri.mojo b/lightbug_http/uri.mojo index 915b17d5..d1de1b5c 100644 --- a/lightbug_http/uri.mojo +++ b/lightbug_http/uri.mojo @@ -45,7 +45,7 @@ fn unquote[expand_plus: Bool = False](input_str: String, disallowed_escapes: Lis if len(str_bytes) > 0: var sub_str_from_bytes = String() - sub_str_from_bytes.write_bytes(str_bytes) + sub_str_from_bytes.write_string(StringSlice(unsafe_from_utf8=str_bytes)) for disallowed in disallowed_escapes: sub_str_from_bytes = sub_str_from_bytes.replace(disallowed, "") sub_strings.append(sub_str_from_bytes) diff --git a/tests/lightbug_http/io/test_byte_writer.mojo b/tests/lightbug_http/io/test_byte_writer.mojo index 2639afb4..47efd08c 100644 --- a/tests/lightbug_http/io/test_byte_writer.mojo +++ b/tests/lightbug_http/io/test_byte_writer.mojo @@ -25,7 +25,7 @@ def test_consuming_write(): def test_write(): var w = ByteWriter() w.write("Hello", ", ") - w.write_bytes("World!".as_bytes()) + w.write_string("World!".as_bytes()) var result: List[Byte] = [ 72, 101, From b435285b5a281a096a9ad298ea26613c6d96daf4 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 13:36:20 +0100 Subject: [PATCH 08/27] fix remaining server compilation errors --- lightbug_http/address.mojo | 4 ++-- lightbug_http/io/bytes.mojo | 2 +- lightbug_http/utils/owning_list.mojo | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index 4b0d562a..99370137 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -586,7 +586,7 @@ fn parse_ipv6_bracketed_address[ Returns: Tuple of (host, colon_index_offset). """ - if address[0:1] != "[": + if address[0:1] != StringSlice("["): return address, UInt16(0) var end_bracket_index = address.find("]") @@ -597,7 +597,7 @@ fn parse_ipv6_bracketed_address[ raise ParseError(ParseMissingPortError()) var colon_index = end_bracket_index + 1 - if address[colon_index : colon_index + 1] != ":": + if address[colon_index : colon_index + 1] != StringSlice(":"): raise ParseError(ParseMissingPortError()) return address[1:end_bracket_index], UInt16(end_bracket_index + 1) diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index 9219e551..23b1a5e2 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -11,7 +11,7 @@ comptime Bytes = List[Byte] @always_inline fn byte[s: StringSlice]() -> Byte: - __comptime_assert len(s) == 1, "StringSlice must be of length 1 to convert to Byte." + comptime assert len(s) == 1, "StringSlice must be of length 1 to convert to Byte." return s.as_bytes()[0] diff --git a/lightbug_http/utils/owning_list.mojo b/lightbug_http/utils/owning_list.mojo index 32441656..23ec0dc0 100644 --- a/lightbug_http/utils/owning_list.mojo +++ b/lightbug_http/utils/owning_list.mojo @@ -251,7 +251,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) var new_data = alloc[Self.T](new_capacity) @parameter - if Self.T.__moveinit__is_trivial: + if Self.T.__move_ctor_is_trivial: memcpy(dest=new_data, src=self.data, count=len(self)) else: for i in range(len(self)): From 566b29171923e19e3a2373591edc1a8ac02da25e Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 14:35:04 +0100 Subject: [PATCH 09/27] update pixi.lock --- pixi.lock | 218 +++++++++++++++++++++++++++--------------------------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/pixi.lock b/pixi.lock index ee4bb108..2a1f7669 100644 --- a/pixi.lock +++ b/pixi.lock @@ -40,10 +40,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -97,10 +97,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -146,10 +146,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -212,10 +212,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -269,10 +269,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -318,10 +318,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -435,11 +435,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -590,11 +590,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -735,11 +735,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -850,10 +850,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -907,10 +907,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -956,10 +956,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -1023,10 +1023,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -1081,10 +1081,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -1131,10 +1131,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -3054,10 +3054,10 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 25778 timestamp: 1759055530601 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026022717-release.conda +- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda noarch: python - sha256: 0f0ab2f64bb4ab1894b2c57d54399c6b5c75221e6c7e3330c6340de7e6fa6eb5 - md5: b9de2d4ff087e633552873b413ab340a + sha256: 4d4e6512d54bd5f299b685c54f1c909c278df9c5d93dc8c5c71c40ac7e1a8b61 + md5: 8a5a2f5809c6bc50d9e80647d301585c depends: - python >=3.10 - click >=8.0.0 @@ -3067,8 +3067,8 @@ packages: - platformdirs >=2 - tomli >=1.1.0 license: MIT - size: 137585 - timestamp: 1772213460841 + size: 137589 + timestamp: 1772343706785 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -3080,72 +3080,72 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026022717-release.conda - sha256: bc6ab6fb14691830b2822a2b181ca50455fcdec1b0ac2b269cfd71fad7e3ce25 - md5: 8e3aa23ad118400f4a580385512d79f2 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda + sha256: e58e1fbc54e6f9ece751526f28224fb7984f484e3f232e87b293ddfd575baa3b + md5: d1db5028e44c4436ba88323ad5bf13b9 depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022717 release - - mblack ==26.2.0.dev2026022717 release + - mojo-compiler ==0.26.2.0.dev2026030105 release + - mblack ==26.2.0.dev2026030105 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 89035384 - timestamp: 1772213460841 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026022717-release.conda - sha256: 5449c7f93e8ce219af893b0cfa7293b3dbeaa9b8e619eb396f8abbc7c5804d53 - md5: 79db16064a6434e1bd949cb250d9b4a4 + size: 89045624 + timestamp: 1772343706785 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda + sha256: bc4ee00ffa9985e3dd890065464bb3bc6435e48062d6be6f6d980a4662d45b2f + md5: de383975aca82c1f4af93b1789b5b8b3 depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022717 release - - mblack ==26.2.0.dev2026022717 release + - mojo-compiler ==0.26.2.0.dev2026030105 release + - mblack ==26.2.0.dev2026030105 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 87708051 - timestamp: 1772213472504 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026022717-release.conda - sha256: 53a47ff778b15eda6472699ae904635b01c3a114d42720450491b10b42c80a80 - md5: f298597804bdc77830e662e2e1ef444d + size: 87719705 + timestamp: 1772343753750 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda + sha256: 0d97392aa8c4cf771840d95ac77b8a77840d23da8b121ec6976dddb444ac49ed + md5: 8a2b686bfc4acf992b617c374af37900 depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026022717 release - - mblack ==26.2.0.dev2026022717 release + - mojo-compiler ==0.26.2.0.dev2026030105 release + - mblack ==26.2.0.dev2026030105 release - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 75792236 - timestamp: 1772213491 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - sha256: f0b50c3da97d5f8b435db7b1892c02a05bbefa15fdde606b05d88be9e8c78005 - md5: 1c2ca9a1f5fe14383a8c17957e5bbbe5 + size: 75810301 + timestamp: 1772343746570 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + sha256: 6ab238cd1de8bc1df836dcbc647373a0298fdbeb37db732a0542898b5bf499e2 + md5: 9b6de160b4199860cfd3b6cd4fd5c198 depends: - - mojo-python ==0.26.2.0.dev2026022717 release + - mojo-python ==0.26.2.0.dev2026030105 release license: LicenseRef-Modular-Proprietary - size: 87885086 - timestamp: 1772213460840 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - sha256: aba55db5744956faa1b0b03a69186507f3447c6d96689b03fe355f914c9e3729 - md5: 6586bf1e577cba97407fb577f38a784c + size: 87989870 + timestamp: 1772343706784 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + sha256: 462e8fff80d2511ce5b404ce7c9da3d8a254282c5480c6e81516aaf555f0d36e + md5: 2d3b66073f675e48f7ab11dfe655743f depends: - - mojo-python ==0.26.2.0.dev2026022717 release + - mojo-python ==0.26.2.0.dev2026030105 release license: LicenseRef-Modular-Proprietary - size: 85087098 - timestamp: 1772213472501 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026022717-release.conda - sha256: e681f020dfd4d201aa186fb726908679df6aa66f482826b540f355f369fcab73 - md5: 391336db267a56b7348d8321af7863d2 + size: 85191114 + timestamp: 1772343753747 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda + sha256: 9255a2a07631f879f0b04e7ec3b60b7ef2b290e60faad7a5da202fe74ffb273b + md5: 0d915ccf1a28f30570bbe6c6902aca49 depends: - - mojo-python ==0.26.2.0.dev2026022717 release + - mojo-python ==0.26.2.0.dev2026030105 release license: LicenseRef-Modular-Proprietary - size: 66389971 - timestamp: 1772213490995 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026022717-release.conda + size: 66494667 + timestamp: 1772343746562 +- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda noarch: python - sha256: e211dc8d85f082c78344a497eea6dcef58fc8011089b60cf990c02a99daef62f - md5: 61d08469d447f5652f97e9ed856790fe + sha256: 7086cbbeb4a0c485183ac2107dd743d6aab24dd14c7c4c30214fa931a1ae0b1d + md5: deb99d3185900e51408d3aaf4e50e3f8 depends: - python license: LicenseRef-Modular-Proprietary - size: 679530 - timestamp: 1772213460836 + size: 681903 + timestamp: 1772343706781 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a md5: 32f78e9d06e8593bc4bbf1338da06f5f From 2c08fb9c8c824e8db35c33d67b3cea8394be7368 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 14:37:28 +0100 Subject: [PATCH 10/27] fix parameter warnings --- lightbug_http/address.mojo | 12 ++++-------- lightbug_http/c/network.mojo | 3 +-- lightbug_http/c/socket.mojo | 3 +-- lightbug_http/io/bytes.mojo | 3 +-- lightbug_http/utils/owning_list.mojo | 3 +-- 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index 50b1b809..bd730b38 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -661,14 +661,12 @@ fn parse_address[ if address == AddressConstants.LOCALHOST: - @parameter - if network.is_ipv4(): + comptime if network.is_ipv4(): return HostPort(AddressConstants.IPV4_LOCALHOST, DEFAULT_IP_PORT) elif network.is_ipv6(): return HostPort(AddressConstants.IPV6_LOCALHOST, DEFAULT_IP_PORT) - @parameter - if network.is_ip_protocol(): + comptime if network.is_ip_protocol(): if network == NetworkType.ip6 and address.find(":") != -1: return HostPort(String(address), DEFAULT_IP_PORT) @@ -699,8 +697,7 @@ fn parse_address[ port = parse_port(address[colon_index + 1 :]) if host == AddressConstants.LOCALHOST: - @parameter - if network.is_ipv4(): + comptime if network.is_ipv4(): return HostPort(AddressConstants.IPV4_LOCALHOST, port) elif network.is_ipv6(): return HostPort(AddressConstants.IPV6_LOCALHOST, port) @@ -740,8 +737,7 @@ fn binary_ip_to_string[address_family: AddressFamily](ip_address: UInt32) raises The IP address as a string. """ - @parameter - if address_family == AddressFamily.AF_INET: + comptime if address_family == AddressFamily.AF_INET: return inet_ntop[address_family, AddressLength.INET_ADDRSTRLEN](ip_address) else: return inet_ntop[address_family, AddressLength.INET6_ADDRSTRLEN](ip_address) diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index 76ad4e18..cc8137c8 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -402,8 +402,7 @@ fn inet_pton[address_family: AddressFamily](var src: String) raises InetPtonErro """ var ip_buffer: ExternalMutUnsafePointer[c_void] - @parameter - if address_family == AddressFamily.AF_INET6: + comptime if address_family == AddressFamily.AF_INET6: ip_buffer = stack_allocation[16, c_void]() else: ip_buffer = stack_allocation[4, c_void]() diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 9e40feb4..71474d93 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -822,8 +822,7 @@ fn accept(socket: FileDescriptor) raises AcceptError -> FileDescriptor: elif errno == errno.EPROTO: raise AcceptError(AcceptEPROTOError()) - @parameter - if CompilationTarget.is_linux(): + comptime if CompilationTarget.is_linux(): if errno == errno.EPERM: raise AcceptError(AcceptEPERMError()) diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index 23b1a5e2..943a5571 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -58,8 +58,7 @@ struct ByteWriter(Writer): args: The data to write. """ - @parameter - for i in range(args.__len__()): + comptime for i in range(args.__len__()): args[i].write_to(self) @always_inline diff --git a/lightbug_http/utils/owning_list.mojo b/lightbug_http/utils/owning_list.mojo index 23ec0dc0..7ed1db0e 100644 --- a/lightbug_http/utils/owning_list.mojo +++ b/lightbug_http/utils/owning_list.mojo @@ -250,8 +250,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) fn _realloc(mut self, new_capacity: Int): var new_data = alloc[Self.T](new_capacity) - @parameter - if Self.T.__move_ctor_is_trivial: + comptime if Self.T.__move_ctor_is_trivial: memcpy(dest=new_data, src=self.data, count=len(self)) else: for i in range(len(self)): From 7aad640b56d6c6b7b4ac4e23bb1333c0e0006d01 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 14:58:13 +0100 Subject: [PATCH 11/27] remove bytes.memmove --- lightbug_http/http/chunked.mojo | 15 ++++++------- lightbug_http/io/bytes.mojo | 40 --------------------------------- 2 files changed, 7 insertions(+), 48 deletions(-) diff --git a/lightbug_http/http/chunked.mojo b/lightbug_http/http/chunked.mojo index 7afbab70..4673a8de 100644 --- a/lightbug_http/http/chunked.mojo +++ b/lightbug_http/http/chunked.mojo @@ -1,7 +1,7 @@ import sys from sys import size_of -from lightbug_http.io.bytes import Bytes, memmove +from lightbug_http.io.bytes import Bytes from lightbug_http.strings import BytesConstant from memory import memcpy @@ -129,18 +129,16 @@ struct HTTPChunkedDecoder(Defaultable): var avail = buffer_len - src if avail < self.bytes_left_in_chunk: if dst != src: - memmove(buf.unsafe_ptr() + dst, buf.unsafe_ptr() + src, avail) + for _i in range(avail): + buf[dst + _i] = buf[src + _i] src += avail dst += avail self.bytes_left_in_chunk -= avail break if dst != src: - memmove( - buf.unsafe_ptr() + dst, - buf.unsafe_ptr() + src, - self.bytes_left_in_chunk, - ) + for _i in range(self.bytes_left_in_chunk): + buf[dst + _i] = buf[src + _i] src += self.bytes_left_in_chunk dst += self.bytes_left_in_chunk @@ -197,7 +195,8 @@ struct HTTPChunkedDecoder(Defaultable): # Move remaining data to beginning of buffer if dst != src and src < buffer_len: - memmove(buf.unsafe_ptr() + dst, buf.unsafe_ptr() + src, buffer_len - src) + for _i in range(buffer_len - src): + buf[dst + _i] = buf[src + _i] var new_bufsz = dst diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index 943a5571..bf6a6462 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -305,46 +305,6 @@ struct ByteReader[origin: ImmutOrigin](Copyable, Sized): fn consume(var self, bytes_len: Int = -1) -> Bytes: return Bytes(self^._inner[self.read_pos : self.read_pos + len(self) + 1]) - -fn memmove[ - T: Copyable, dest_origin: MutOrigin, src_origin: MutOrigin -](dest: UnsafePointer[T, dest_origin], src: UnsafePointer[T, src_origin], count: Int,): - """ - Copies count elements from src to dest, handling overlapping memory regions safely. - """ - if count <= 0: - return - - if dest == src: - return - - # Check if memory regions overlap - var dest_addr = Int(dest) - var src_addr = Int(src) - var element_size = size_of[T]() - var total_bytes = count * element_size - - var dest_end = dest_addr + total_bytes - var src_end = src_addr + total_bytes - - # Check for overlap: regions overlap if one starts before the other ends - var overlaps = (dest_addr < src_end) and (src_addr < dest_end) - - if not overlaps: - # No overlap - use fast memcpy - memcpy(dest=dest, src=src, count=count) - elif dest_addr < src_addr: - # Destination is before source - copy forwards (left to right) - for i in range(count): - (dest + i).init_pointee_copy((src + i)[]) - else: - # Destination is after source - copy backwards (right to left) - var i = count - 1 - while i >= 0: - (dest + i).init_pointee_copy((src + i)[]) - i -= 1 - - fn create_string_from_ptr[origin: ImmutOrigin](ptr: UnsafePointer[UInt8, origin], length: Int) -> String: """Create a String from a pointer and length. From 0a1dfbeae2fe1837db018dbcba26530efe50d18d Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 1 Mar 2026 20:52:03 +0100 Subject: [PATCH 12/27] relax JsonOK constraint --- lightbug_http/http/json.mojo | 10 ++++++---- test.mojo | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lightbug_http/http/json.mojo b/lightbug_http/http/json.mojo index 7476072f..91ceb717 100644 --- a/lightbug_http/http/json.mojo +++ b/lightbug_http/http/json.mojo @@ -23,11 +23,12 @@ fn JsonOK(body: String) -> HTTPResponse: return OK(body, "application/json") -fn JsonOK[T: JsonSerializable](value: T) -> HTTPResponse: +fn JsonOK[T: AnyType](value: T) -> HTTPResponse: """Return a 200 OK response, serializing the value to JSON. Parameters: - T: A type that implements JsonSerializable. + T: Any struct type. Types with fields that have non-trivial destructors + must also conform to Defaultable. Args: value: The value to serialize to JSON. @@ -50,11 +51,12 @@ fn json_decode(req: HTTPRequest) raises -> JSON: return parse(req.get_body()) -fn json_decode[T: JsonDeserializable](req: HTTPRequest) raises -> T: +fn json_decode[T: Movable & ImplicitlyDestructible](req: HTTPRequest) raises -> T: """Deserialize the request body into a typed struct. Parameters: - T: A type that implements JsonDeserializable (must also be Defaultable). + T: Any struct conforming to Movable & ImplicitlyDestructible. Types with + fields that have non-trivial destructors must also conform to Defaultable. Args: req: The HTTP request to deserialize JSON from. diff --git a/test.mojo b/test.mojo index da1ee8b8..4f91e285 100644 --- a/test.mojo +++ b/test.mojo @@ -1,8 +1,8 @@ -from lightbug_http.http.json import JsonOK, json_decode, JsonError, JsonSerializable, JsonDeserializable -from emberjson import serialize, deserialize +from lightbug_http.http.json import JsonOK, json_decode, JsonError +from emberjson import deserialize @fieldwise_init -struct Message(JsonSerializable, Defaultable, Movable): +struct Message(Movable, Defaultable): var message: String fn __init__(out self): From 1c4e839d62e1032d0226baf036af9925af8f2386 Mon Sep 17 00:00:00 2001 From: Val Date: Mon, 16 Mar 2026 20:18:09 +0100 Subject: [PATCH 13/27] wip refactoring --- lightbug_http/__init__.mojo | 2 +- lightbug_http/http/json.mojo | 42 +---------------- lightbug_http/http/response.mojo | 26 +++++++++++ lightbug_http/service.mojo | 4 +- test.mojo | 7 +-- tests/lightbug_http/http/test_json.mojo | 62 ++++++++++++++----------- 6 files changed, 70 insertions(+), 73 deletions(-) diff --git a/lightbug_http/__init__.mojo b/lightbug_http/__init__.mojo index d7fee55e..706df32e 100644 --- a/lightbug_http/__init__.mojo +++ b/lightbug_http/__init__.mojo @@ -4,4 +4,4 @@ from lightbug_http.service import Counter, HTTPService, Welcome from lightbug_http.uri import URI from lightbug_http.cookie import Cookie, RequestCookieJar, ResponseCookieJar -from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, SeeOther, StatusCode, JsonOK, json_decode, JsonError, JsonSerializable, JsonDeserializable +from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, SeeOther, StatusCode, Json, json_decode, JsonSerializable, JsonDeserializable diff --git a/lightbug_http/http/json.mojo b/lightbug_http/http/json.mojo index 91ceb717..4ce2744d 100644 --- a/lightbug_http/http/json.mojo +++ b/lightbug_http/http/json.mojo @@ -1,39 +1,13 @@ from emberjson import ( parse, - to_string, - serialize, deserialize, try_deserialize, JSON, JsonSerializable, JsonDeserializable, ) -from lightbug_http.header import Header, HeaderKey, Headers -from lightbug_http.http.common_response import OK -from lightbug_http.http.response import HTTPResponse from lightbug_http.http.request import HTTPRequest - - -fn JsonOK(body: String) -> HTTPResponse: - """Return a 200 OK response with JSON content type. - - Args: - body: A pre-serialized JSON string. - """ - return OK(body, "application/json") - - -fn JsonOK[T: AnyType](value: T) -> HTTPResponse: - """Return a 200 OK response, serializing the value to JSON. - - Parameters: - T: Any struct type. Types with fields that have non-trivial destructors - must also conform to Defaultable. - - Args: - value: The value to serialize to JSON. - """ - return OK(serialize(value), "application/json") +from lightbug_http.http.response import Json fn json_decode(req: HTTPRequest) raises -> JSON: @@ -68,17 +42,3 @@ fn json_decode[T: Movable & ImplicitlyDestructible](req: HTTPRequest) raises -> An error if the body is not valid JSON or doesn't match the expected schema. """ return deserialize[T](String(req.get_body())) - - -fn JsonError(message: String) -> HTTPResponse: - """Return a 400 Bad Request response with a JSON error body. - - Args: - message: The error message to include. - """ - return HTTPResponse( - String('{"error": "', message, '"}').as_bytes(), - headers=Headers(Header(HeaderKey.CONTENT_TYPE, "application/json")), - status_code=400, - status_text="Bad Request", - ) diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index bba97b38..7f9b406d 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -1,3 +1,4 @@ +from emberjson import serialize from lightbug_http.connection import TCPConnection, default_buffer_size from lightbug_http.header import ParsedResponseHeaders, parse_response_headers from lightbug_http.http.chunked import HTTPChunkedDecoder @@ -45,6 +46,17 @@ comptime ResponseParseError = Variant[ ] +@fieldwise_init +struct Json[T: AnyType]: + """Wraps a value to be serialized as a JSON HTTP response body. + + Parameters: + T: Any struct type to serialize as JSON. + """ + + var value: T + + struct StatusCode: """HTTP status codes (RFC 9110).""" @@ -289,6 +301,20 @@ struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): if HeaderKey.DATE not in self.headers: self.headers[HeaderKey.DATE] = http_date_now() + fn __init__[T: AnyType](out self, var body: Json[T]): + """Serialize a typed value as JSON and return a 200 OK response. + + Parameters: + T: Any struct type to serialize as JSON. + + Args: + body: The Json-wrapped value to serialize. + """ + self = HTTPResponse( + body_bytes=serialize(body.value).as_bytes(), + headers=Headers(Header(HeaderKey.CONTENT_TYPE, "application/json")), + ) + fn __init__( out self, mut reader: ByteReader, diff --git a/lightbug_http/service.mojo b/lightbug_http/service.mojo index 3ec244fd..c3a2bb4a 100644 --- a/lightbug_http/service.mojo +++ b/lightbug_http/service.mojo @@ -1,7 +1,7 @@ from lightbug_http.header import HeaderKey from lightbug_http.io.bytes import Bytes -from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound, JsonOK +from lightbug_http.http import OK, HTTPRequest, HTTPResponse, NotFound trait HTTPService: @@ -58,7 +58,7 @@ struct TechEmpowerRouter(HTTPService): if req.uri.path == "/plaintext": return OK("Hello, World!", "text/plain") elif req.uri.path == "/json": - return JsonOK('{"message": "Hello, World!"}') + return OK('{"message": "Hello, World!"}', "application/json") return OK("Hello world!") # text/plain is the default diff --git a/test.mojo b/test.mojo index 4f91e285..f4772830 100644 --- a/test.mojo +++ b/test.mojo @@ -1,4 +1,5 @@ -from lightbug_http.http.json import JsonOK, json_decode, JsonError +from lightbug_http.http.json import Json, json_decode +from lightbug_http.http.response import HTTPResponse from emberjson import deserialize @fieldwise_init @@ -9,9 +10,9 @@ struct Message(Movable, Defaultable): self.message = "" fn main() raises: - # Test serialization via JsonOK + # Test serialization via Json wrapper var msg = Message("Hello, World!") - var res = JsonOK(msg) + var res = HTTPResponse(Json(msg)) print("status:", res.status_code) print("body:", String(res.get_body())) diff --git a/tests/lightbug_http/http/test_json.mojo b/tests/lightbug_http/http/test_json.mojo index ac550fac..d808fb1a 100644 --- a/tests/lightbug_http/http/test_json.mojo +++ b/tests/lightbug_http/http/test_json.mojo @@ -1,48 +1,58 @@ climport testing from testing import assert_equal, assert_true -from emberjson import parse +from emberjson import parse, deserialize from lightbug_http.header import HeaderKey -from lightbug_http.http.json import JsonOK, JsonError +from lightbug_http.http import OK, HTTPResponse +from lightbug_http.http.response import Json -def test_json_ok_status_and_content_type(): - var res = JsonOK('{"message": "hello"}') - assert_equal(res.status_code, 200) - assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") +@fieldwise_init +struct Message(Movable, Defaultable): + var text: String + fn __init__(out self): + self.text = "" -def test_json_ok_preserves_body(): - var body = '{"key": "value", "num": 42}' - var res = JsonOK(body) - assert_equal(String(res.get_body()), body) +@fieldwise_init +struct Point(Movable, Defaultable): + var x: Int + var y: Int -def test_json_ok_empty_object(): - var res = JsonOK("{}") - assert_equal(String(res.get_body()), "{}") - assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") + fn __init__(out self): + self.x = 0 + self.y = 0 -def test_json_error_status_and_content_type(): - var res = JsonError("invalid input") - assert_equal(res.status_code, 400) +def test_json_response_status_and_content_type(): + var res = HTTPResponse(Json(Message("hello"))) + assert_equal(res.status_code, 200) assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") -def test_json_error_contains_message(): - var res = JsonError("bad request") +def test_json_response_body_is_valid_json(): + var res = HTTPResponse(Json(Message("hello"))) var body = String(res.get_body()) - assert_true("bad request" in body, "error body should contain the message") - assert_true("error" in body, "error body should contain 'error' key") + var parsed = parse(body) + assert_equal(String(parsed["text"]), '"hello"') -def test_json_error_is_valid_json(): - var res = JsonError("something went wrong") +def test_json_response_multiple_fields(): + var res = HTTPResponse(Json(Point(3, 7))) var body = String(res.get_body()) - # Verify the error response body is parseable JSON - var json = parse(body) - assert_equal(String(json["error"]), '"something went wrong"') + var parsed = parse(body) + assert_equal(Int(parsed["x"]), 3) + assert_equal(Int(parsed["y"]), 7) + + +def test_json_ok_string_passthrough(): + # Pre-serialized JSON strings go through OK directly + var body = '{"key": "value"}' + var res = OK(body, "application/json") + assert_equal(res.status_code, 200) + assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") + assert_equal(String(res.get_body()), body) def main(): From bd28fc6b5fc4ad441b859f560364a22277cec073 Mon Sep 17 00:00:00 2001 From: Val Date: Fri, 27 Mar 2026 20:01:32 +0100 Subject: [PATCH 14/27] wip moving to 26.2 --- .gitignore | 2 +- lightbug.mojo | 13 + lightbug_http/address.mojo | 6 +- lightbug_http/c/address.mojo | 6 +- lightbug_http/c/aliases.mojo | 4 +- lightbug_http/c/network.mojo | 6 +- lightbug_http/c/socket.mojo | 24 +- lightbug_http/connection.mojo | 10 +- lightbug_http/cookie/cookie.mojo | 2 +- lightbug_http/cookie/duration.mojo | 2 +- lightbug_http/cookie/request_cookie_jar.mojo | 2 +- lightbug_http/cookie/response_cookie_jar.mojo | 4 +- lightbug_http/cookie/same_site.mojo | 13 +- lightbug_http/header.mojo | 26 +- lightbug_http/http/parsing.mojo | 6 +- lightbug_http/http/request.mojo | 2 +- lightbug_http/http/response.mojo | 10 +- lightbug_http/io/bytes.mojo | 14 +- lightbug_http/server.mojo | 4 +- lightbug_http/socket.mojo | 22 +- lightbug_http/uri.mojo | 6 +- lightbug_http/utils/error.mojo | 2 +- lightbug_http/utils/owning_list.mojo | 12 +- pixi.lock | 1601 ++++++++--------- pixi.toml | 18 +- 25 files changed, 876 insertions(+), 941 deletions(-) create mode 100644 lightbug.mojo diff --git a/.gitignore b/.gitignore index 762878fb..1b802eaa 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,4 @@ __pycache__ .mcp.json .claude CLAUDE.md -.kli/** \ No newline at end of file +*.xml \ No newline at end of file diff --git a/lightbug.mojo b/lightbug.mojo new file mode 100644 index 00000000..775de2d4 --- /dev/null +++ b/lightbug.mojo @@ -0,0 +1,13 @@ +from lightbug_http import Welcome +from lightbug_http.server import Server +from os.env import getenv + + +fn main() raises: + var server = Server() + var handler = Welcome() + + var host = getenv("DEFAULT_SERVER_HOST", "localhost") + var port = getenv("DEFAULT_SERVER_PORT", "8080") + + server.listen_and_serve(host + ":" + port, handler) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index bd730b38..df7845e5 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -37,8 +37,6 @@ trait Addr( Defaultable, Equatable, ImplicitlyCopyable, - Representable, - Stringable, Writable, ): comptime _type: StaticString @@ -685,12 +683,12 @@ fn parse_address[ # TODO (Mikhail): StringSlice does byte level slicing, so this can be # invalid for multi-byte UTF-8 characters. Perhaps we instead assert that it's # an ascii string instead. - if address[0:1] == "[": + if address[byte=0:1] == "[": var bracket_offset: UInt16 (host, bracket_offset) = parse_ipv6_bracketed_address(address) validate_no_brackets(address, bracket_offset) else: - host = address[:colon_index] + host = address[byte=:colon_index] if host.find(":") != -1: raise ParseError(ParseTooManyColonsError()) diff --git a/lightbug_http/c/address.mojo b/lightbug_http/c/address.mojo index 6371102e..c9b42fdf 100644 --- a/lightbug_http/c/address.mojo +++ b/lightbug_http/c/address.mojo @@ -4,7 +4,7 @@ from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsaf @fieldwise_init -struct AddressInformation(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct AddressInformation(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: c_int comptime AI_PASSIVE = Self(1) comptime AI_CANONNAME = Self(2) @@ -42,7 +42,7 @@ struct AddressInformation(Copyable, Equatable, Stringable, Writable, TrivialRegi # TODO: These might vary on each platform...we should confirm this. # Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h#L250 @fieldwise_init -struct AddressFamily(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct AddressFamily(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: c_int comptime AF_UNSPEC = Self(0) comptime AF_INET = Self(2) @@ -71,7 +71,7 @@ struct AddressFamily(Copyable, Equatable, Stringable, Writable, TrivialRegisterP @fieldwise_init -struct AddressLength(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct AddressLength(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: Int comptime INET_ADDRSTRLEN = Self(16) comptime INET6_ADDRSTRLEN = Self(46) diff --git a/lightbug_http/c/aliases.mojo b/lightbug_http/c/aliases.mojo index 020c356c..9ce73cdc 100644 --- a/lightbug_http/c/aliases.mojo +++ b/lightbug_http/c/aliases.mojo @@ -1,4 +1,4 @@ -comptime ExternalMutUnsafePointer = UnsafePointer[origin=MutExternalOrigin] -comptime ExternalImmutUnsafePointer = UnsafePointer[origin=ImmutExternalOrigin] +comptime ExternalMutUnsafePointer[type: AnyType] = UnsafePointer[type, MutExternalOrigin] +comptime ExternalImmutUnsafePointer[type: AnyType] = UnsafePointer[type, ImmutExternalOrigin] comptime c_void = NoneType diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index cc8137c8..9d98bdec 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -260,8 +260,8 @@ struct addrinfo(TrivialRegisterPassable): fn _inet_ntop( af: c_int, - src: ImmutUnsafePointer[c_void], - dst: MutUnsafePointer[c_char], + src: ImmutUnsafePointer[c_void, _], + dst: MutUnsafePointer[c_char, _], size: socklen_t, ) raises -> ExternalImmutUnsafePointer[c_char]: """Libc POSIX `inet_ntop` function. @@ -344,7 +344,7 @@ fn inet_ntop[ return String(unsafe_from_utf8_ptr=dst.unsafe_ptr()) -fn _inet_pton(af: c_int, src: ImmutUnsafePointer[c_char], dst: MutUnsafePointer[c_void]) -> c_int: +fn _inet_pton(af: c_int, src: ImmutUnsafePointer[c_char, _], dst: MutUnsafePointer[c_void, _]) -> c_int: """Libc POSIX `inet_pton` function. Converts a presentation format address (that is, printable form as held in a character string) to network format (usually a struct in_addr or some other internal binary representation, in network byte order). It returns 1 if the address was valid for the specified address family, or 0 if the address was not parseable in the specified address family, diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 71474d93..5e73b4e6 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -8,7 +8,7 @@ from memory import stack_allocation @fieldwise_init -struct ShutdownOption(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct ShutdownOption(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: c_int comptime SHUT_RD = Self(0) comptime SHUT_WR = Self(1) @@ -36,7 +36,7 @@ comptime SOL_SOCKET = 0xFFFF # TODO: These are probably platform specific, on MacOS I have these values, but we should check on Linux. # Taken from: https://github.com/openbsd/src/blob/master/sys/sys/socket.h @fieldwise_init -struct SocketOption(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct SocketOption(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: c_int comptime SO_DEBUG = Self(0x0001) comptime SO_ACCEPTCONN = Self(0x0002) @@ -139,7 +139,7 @@ comptime O_CLOEXEC = 524288 # Socket Type constants @fieldwise_init -struct SocketType(Copyable, Equatable, Stringable, Writable, TrivialRegisterPassable): +struct SocketType(Copyable, Equatable, Writable, TrivialRegisterPassable): var value: c_int comptime SOCK_STREAM = Self(1) comptime SOCK_DGRAM = Self(2) @@ -354,7 +354,7 @@ fn _getsockopt[ socket: c_int, level: c_int, option_name: c_int, - option_value: ImmutUnsafePointer[c_void], + option_value: ImmutUnsafePointer[c_void, _], option_len: Pointer[socklen_t, origin], ) -> c_int: """Libc POSIX `getsockopt` function. @@ -447,7 +447,7 @@ fn getsockopt( fn _getsockname[ origin: MutOrigin -](socket: c_int, address: MutUnsafePointer[sockaddr], address_len: Pointer[socklen_t, origin],) -> c_int: +](socket: c_int, address: MutUnsafePointer[sockaddr, _], address_len: Pointer[socklen_t, origin],) -> c_int: """Libc POSIX `getsockname` function. Args: @@ -516,7 +516,7 @@ fn getsockname(socket: FileDescriptor, mut address: SocketAddress) raises Getsoc fn _getpeername[ origin: MutOrigin -](sockfd: c_int, addr: MutUnsafePointer[sockaddr], address_len: Pointer[socklen_t, origin],) -> c_int: +](sockfd: c_int, addr: MutUnsafePointer[sockaddr, _], address_len: Pointer[socklen_t, origin],) -> c_int: """Libc POSIX `getpeername` function. Args: @@ -924,7 +924,7 @@ fn connect(socket: FileDescriptor, mut address: SocketAddress) raises ConnectErr fn _recv( socket: c_int, - buffer: MutUnsafePointer[c_void], + buffer: MutUnsafePointer[c_void, _], length: c_size_t, flags: c_int, ) -> c_ssize_t: @@ -1012,10 +1012,10 @@ fn _recvfrom[ origin: MutOrigin ]( socket: c_int, - buffer: MutUnsafePointer[c_void], + buffer: MutUnsafePointer[c_void, _], length: c_size_t, flags: c_int, - address: MutUnsafePointer[sockaddr], + address: MutUnsafePointer[sockaddr, _], address_len: Pointer[socklen_t, origin], ) -> c_ssize_t: """Libc POSIX `recvfrom` function. @@ -1142,7 +1142,7 @@ fn recvfrom[ fn _send( socket: c_int, - buffer: ImmutUnsafePointer[c_void], + buffer: ImmutUnsafePointer[c_void, _], length: c_size_t, flags: c_int, ) -> c_ssize_t: @@ -1258,10 +1258,10 @@ fn send[ fn _sendto( socket: c_int, - message: ImmutUnsafePointer[c_void], + message: ImmutUnsafePointer[c_void, _], length: c_size_t, flags: c_int, - dest_addr: ImmutUnsafePointer[sockaddr], + dest_addr: ImmutUnsafePointer[sockaddr, _], dest_len: socklen_t, ) -> c_ssize_t: """Libc POSIX `sendto` function diff --git a/lightbug_http/connection.mojo b/lightbug_http/connection.mojo index 5e46f581..03c8c5e6 100644 --- a/lightbug_http/connection.mojo +++ b/lightbug_http/connection.mojo @@ -85,7 +85,7 @@ struct ListenFailedError(CustomError, TrivialRegisterPassable): @fieldwise_init -struct ListenerError(Movable, Stringable, Writable): +struct ListenerError(Movable, Writable): """Error variant for listener creation operations. Represents failures during address parsing, socket creation, binding, or listening. @@ -353,7 +353,7 @@ struct TCPConnection[network: NetworkType = NetworkType.tcp4]: """ return self.socket.receive(buf) - fn write(self, buf: Span[Byte]) raises SendError -> UInt: + fn write(self, buf: Span[Byte, _]) raises SendError -> UInt: """Write all data to the TCP connection, handling partial sends. Args: @@ -461,7 +461,7 @@ struct UDPConnection[ return self.socket.receive_from(dest) - fn write_to(mut self, src: Span[Byte], mut address: UDPAddr) raises SendtoError -> UInt: + fn write_to(mut self, src: Span[Byte, _], mut address: UDPAddr) raises SendtoError -> UInt: """Writes data to the underlying file descriptor. Args: @@ -477,7 +477,7 @@ struct UDPConnection[ return self.socket.send_to(src, address.ip, address.port) - fn write_to(mut self, src: Span[Byte], mut host: String, port: UInt16) raises SendtoError -> UInt: + fn write_to(mut self, src: Span[Byte, _], mut host: String, port: UInt16) raises SendtoError -> UInt: """Writes data to the underlying file descriptor. Args: @@ -529,7 +529,7 @@ struct UDPConnection[ @fieldwise_init -struct CreateConnectionError(Movable, Stringable, Writable): +struct CreateConnectionError(Movable, Writable): """Error variant for create_connection operations. Can be CSocketError from socket creation or SocketConnectError from connect. """ diff --git a/lightbug_http/cookie/cookie.mojo b/lightbug_http/cookie/cookie.mojo index 953f1f96..75a6395d 100644 --- a/lightbug_http/cookie/cookie.mojo +++ b/lightbug_http/cookie/cookie.mojo @@ -3,7 +3,7 @@ from utils import Variant @fieldwise_init -struct InvalidCookieError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct InvalidCookieError(Movable, Writable, TrivialRegisterPassable): """Error raised when a cookie is invalid.""" fn write_to[W: Writer, //](self, mut writer: W): diff --git a/lightbug_http/cookie/duration.mojo b/lightbug_http/cookie/duration.mojo index bd5f298b..429d4e47 100644 --- a/lightbug_http/cookie/duration.mojo +++ b/lightbug_http/cookie/duration.mojo @@ -1,5 +1,5 @@ @fieldwise_init -struct Duration(Copyable): +struct Duration(Copyable, ImplicitlyCopyable): var total_seconds: Int fn __init__( diff --git a/lightbug_http/cookie/request_cookie_jar.mojo b/lightbug_http/cookie/request_cookie_jar.mojo index 7436acd7..28fac47c 100644 --- a/lightbug_http/cookie/request_cookie_jar.mojo +++ b/lightbug_http/cookie/request_cookie_jar.mojo @@ -6,7 +6,7 @@ from small_time.small_time import parse_time_with_format @fieldwise_init -struct RequestCookieJar(Copyable, Stringable, Writable): +struct RequestCookieJar(Copyable, Writable): var _inner: Dict[String, String] fn __init__(out self): diff --git a/lightbug_http/cookie/response_cookie_jar.mojo b/lightbug_http/cookie/response_cookie_jar.mojo index 29bf533f..d973bb96 100644 --- a/lightbug_http/cookie/response_cookie_jar.mojo +++ b/lightbug_http/cookie/response_cookie_jar.mojo @@ -9,7 +9,7 @@ from lightbug_http.cookie.cookie import InvalidCookieError @fieldwise_init -struct CookieParseError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct CookieParseError(Movable, Writable, TrivialRegisterPassable): """Error raised when a cookie header string fails to parse.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -56,7 +56,7 @@ struct ResponseCookieKey(ImplicitlyCopyable, KeyElement): @fieldwise_init -struct ResponseCookieJar(Copyable, Sized, Stringable, Writable): +struct ResponseCookieJar(Copyable, Sized, Writable): var _inner: Dict[ResponseCookieKey, Cookie] fn __init__(out self): diff --git a/lightbug_http/cookie/same_site.mojo b/lightbug_http/cookie/same_site.mojo index 76d91aaa..b909ac2b 100644 --- a/lightbug_http/cookie/same_site.mojo +++ b/lightbug_http/cookie/same_site.mojo @@ -1,5 +1,5 @@ @fieldwise_init -struct SameSite(Copyable, Stringable): +struct SameSite(Copyable, ImplicitlyCopyable, Writable): var value: UInt8 comptime none = SameSite(0) @@ -23,10 +23,13 @@ struct SameSite(Copyable, Stringable): fn __eq__(self, other: Self) -> Bool: return self.value == other.value - fn __str__(self) -> String: + fn write_to[W: Writer, //](self, mut writer: W): if self.value == 0: - return materialize[SameSite.NONE]() + writer.write(SameSite.NONE) elif self.value == 1: - return materialize[SameSite.LAX]() + writer.write(SameSite.LAX) else: - return materialize[SameSite.STRICT]() + writer.write(SameSite.STRICT) + + fn __str__(self) -> String: + return String.write(self) diff --git a/lightbug_http/header.mojo b/lightbug_http/header.mojo index 5ad834a2..5ea430f8 100644 --- a/lightbug_http/header.mojo +++ b/lightbug_http/header.mojo @@ -109,7 +109,7 @@ struct HeaderKey: @fieldwise_init -struct HeaderKeyNotFoundError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct HeaderKeyNotFoundError(Movable, Writable, TrivialRegisterPassable): """Error raised when a header key is not found.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -120,7 +120,7 @@ struct HeaderKeyNotFoundError(Movable, Stringable, Writable, TrivialRegisterPass @fieldwise_init -struct InvalidHTTPRequestError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct InvalidHTTPRequestError(Movable, Writable, TrivialRegisterPassable): """Error raised when the HTTP request is malformed.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -131,7 +131,7 @@ struct InvalidHTTPRequestError(Movable, Stringable, Writable, TrivialRegisterPas @fieldwise_init -struct IncompleteHTTPRequestError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct IncompleteHTTPRequestError(Movable, Writable, TrivialRegisterPassable): """Error raised when the HTTP request is incomplete (need more data).""" fn write_to[W: Writer, //](self, mut writer: W): @@ -142,7 +142,7 @@ struct IncompleteHTTPRequestError(Movable, Stringable, Writable, TrivialRegister @fieldwise_init -struct InvalidHTTPResponseError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct InvalidHTTPResponseError(Movable, Writable, TrivialRegisterPassable): """Error raised when the HTTP response is malformed.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -153,7 +153,7 @@ struct InvalidHTTPResponseError(Movable, Stringable, Writable, TrivialRegisterPa @fieldwise_init -struct IncompleteHTTPResponseError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct IncompleteHTTPResponseError(Movable, Writable, TrivialRegisterPassable): """Error raised when the HTTP response is incomplete.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -164,7 +164,7 @@ struct IncompleteHTTPResponseError(Movable, Stringable, Writable, TrivialRegiste @fieldwise_init -struct EmptyBufferError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct EmptyBufferError(Movable, Writable, TrivialRegisterPassable): """Error raised when buffer has no data available.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -175,7 +175,7 @@ struct EmptyBufferError(Movable, Stringable, Writable, TrivialRegisterPassable): @fieldwise_init -struct RequestParseError(Movable, Stringable, Writable): +struct RequestParseError(Movable, Writable): """Error variant for HTTP request parsing. Can be InvalidHTTPRequestError, IncompleteHTTPRequestError, or EmptyBufferError. @@ -219,7 +219,7 @@ struct RequestParseError(Movable, Stringable, Writable): @fieldwise_init -struct ResponseParseError(Movable, Stringable, Writable): +struct ResponseParseError(Movable, Writable): """Error variant for HTTP response parsing.""" comptime type = Variant[InvalidHTTPResponseError, IncompleteHTTPResponseError, EmptyBufferError] @@ -304,7 +304,7 @@ struct ParsedResponseHeaders(Movable): @fieldwise_init -struct Header(Copyable, Stringable, Writable): +struct Header(Copyable, Writable): """A single HTTP header key-value pair.""" var key: String @@ -386,7 +386,7 @@ fn write_header_latin1(mut writer: ByteWriter, key: String, value: String): @fieldwise_init -struct Headers(Copyable, Stringable, Writable): +struct Headers(Copyable, Writable): """Collection of HTTP headers. Header keys are normalized to lowercase for case-insensitive lookup. @@ -458,7 +458,7 @@ struct Headers(Copyable, Stringable, Writable): fn parse_request_headers( - buffer: Span[Byte], + buffer: Span[Byte, _], last_len: Int = 0, ) raises RequestParseError -> ParsedRequestHeaders: """Parse HTTP request headers from a buffer. @@ -531,7 +531,7 @@ fn parse_request_headers( fn parse_response_headers( - buffer: Span[Byte], + buffer: Span[Byte, _], last_len: Int = 0, ) raises ResponseParseError -> ParsedResponseHeaders: """Parse HTTP response headers from a buffer. @@ -610,7 +610,7 @@ fn parse_response_headers( ) -fn find_header_end(buffer: Span[Byte], search_start: Int = 0) -> Optional[Int]: +fn find_header_end(buffer: Span[Byte, _], search_start: Int = 0) -> Optional[Int]: """Find the end of HTTP headers in a buffer. Searches for the \\r\\n\\r\\n sequence that marks the end of headers. diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index edf1988f..df64b13f 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -17,7 +17,7 @@ struct HTTPHeader(Copyable): @fieldwise_init -struct ParseError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct ParseError(Movable, Writable, TrivialRegisterPassable): """Invalid HTTP syntax error.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -28,7 +28,7 @@ struct ParseError(Movable, Stringable, Writable, TrivialRegisterPassable): @fieldwise_init -struct IncompleteError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct IncompleteError(Movable, Writable, TrivialRegisterPassable): """Need more data to complete parsing.""" fn write_to[W: Writer, //](self, mut writer: W): @@ -39,7 +39,7 @@ struct IncompleteError(Movable, Stringable, Writable, TrivialRegisterPassable): @fieldwise_init -struct HTTPParseError(Movable, Stringable, Writable): +struct HTTPParseError(Movable, Writable): """Error variant for HTTP parsing operations.""" comptime type = Variant[ParseError, IncompleteError] diff --git a/lightbug_http/http/request.mojo b/lightbug_http/http/request.mojo index c43f7ee2..0b9295df 100644 --- a/lightbug_http/http/request.mojo +++ b/lightbug_http/http/request.mojo @@ -69,7 +69,7 @@ comptime strSlash = "/" @fieldwise_init -struct HTTPRequest(Copyable, Encodable, Stringable, Writable): +struct HTTPRequest(Copyable, Encodable, Writable): """Represents a parsed HTTP request. This type is constructed from already-parsed components. The server is responsible diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index 7f9b406d..435318c4 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -135,7 +135,7 @@ struct StatusCode: @fieldwise_init -struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): +struct HTTPResponse(Encodable, Movable, Sized, Writable): var headers: Headers var cookies: ResponseCookieJar var body_raw: Bytes @@ -145,7 +145,7 @@ struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): var protocol: String @staticmethod - fn from_bytes(b: Span[Byte]) raises ResponseParseError -> HTTPResponse: + fn from_bytes(b: Span[Byte, _]) raises ResponseParseError -> HTTPResponse: var cookies = ResponseCookieJar() var properties: ParsedResponseHeaders @@ -179,7 +179,7 @@ struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): raise ResponseParseError(ResponseBodyReadError(detail=String(body_err))) @staticmethod - fn from_bytes(b: Span[Byte], conn: TCPConnection) raises ResponseParseError -> HTTPResponse: + fn from_bytes(b: Span[Byte, _], conn: TCPConnection) raises ResponseParseError -> HTTPResponse: var cookies = ResponseCookieJar() var properties: ParsedResponseHeaders @@ -279,7 +279,7 @@ struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): fn __init__( out self, - body_bytes: Span[Byte], + body_bytes: Span[Byte, _], headers: Headers = Headers(), cookies: ResponseCookieJar = ResponseCookieJar(), status_code: Int = 200, @@ -391,7 +391,7 @@ struct HTTPResponse(Encodable, Movable, Sized, Stringable, Writable): except e: raise Error(String(e)) - fn read_chunks(mut self, chunks: Span[Byte]) raises: + fn read_chunks(mut self, chunks: Span[Byte, _]) raises: var reader = ByteReader(chunks) while True: var size = atol(String(reader.read_line()), 16) diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index bf6a6462..65991019 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -32,7 +32,7 @@ struct ByteWriter(Writer): self._inner = Bytes(capacity=capacity) @always_inline - fn write_string(mut self, bytes: Span[Byte]) -> None: + fn write_string(mut self, bytes: Span[Byte, _]) -> None: """Writes the contents of `bytes` into the internal buffer. Args: @@ -69,7 +69,7 @@ struct ByteWriter(Writer): return self._inner^ -struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Stringable): +struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized): """Convenience wrapper around a Span of Bytes.""" var _inner: Span[Byte, Self.origin] @@ -90,7 +90,7 @@ struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Strin return True return False - fn __contains__(self, b: Span[Byte]) -> Bool: + fn __contains__(self, b: Span[Byte, _]) -> Bool: if len(b) > len(self._inner): return False @@ -125,7 +125,7 @@ struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Strin return False return True - fn __eq__(self, other: Span[Byte]) -> Bool: + fn __eq__(self, other: Span[Byte, _]) -> Bool: # both empty if not self._inner and not other: return True @@ -148,7 +148,7 @@ struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Strin return False return True - fn __ne__(self, other: Span[Byte]) -> Bool: + fn __ne__(self, other: Span[Byte, _]) -> Bool: return not self == other fn __iter__(self) -> _SpanIter[Byte, Self.origin]: @@ -174,7 +174,7 @@ struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Strin @fieldwise_init -struct OutOfBoundsError(Stringable, Writable): +struct OutOfBoundsError(Writable): var message: String fn __init__(out self): @@ -188,7 +188,7 @@ struct OutOfBoundsError(Stringable, Writable): @fieldwise_init -struct EndOfReaderError(Stringable, Writable): +struct EndOfReaderError(Writable): var message: String fn __init__(out self): diff --git a/lightbug_http/server.mojo b/lightbug_http/server.mojo index 98840f25..fd24301c 100644 --- a/lightbug_http/server.mojo +++ b/lightbug_http/server.mojo @@ -26,7 +26,7 @@ from lightbug_http.http import HTTPRequest, HTTPResponse, encode @fieldwise_init -struct ServerError(Movable, Stringable, Writable): +struct ServerError(Movable, Writable): """Error variant for server operations.""" comptime type = Variant[ @@ -203,7 +203,7 @@ struct ProvisionPoolExhaustedError(CustomError, TrivialRegisterPassable): @fieldwise_init -struct ProvisionError(Movable, Stringable, Writable): +struct ProvisionError(Movable, Writable): """Error variant for provision pool operations.""" comptime type = Variant[ProvisionPoolExhaustedError] diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index 6c9535a4..92fa7312 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -73,7 +73,7 @@ struct EOF(Movable, TrivialRegisterPassable): @fieldwise_init -struct InvalidCloseErrorConversionError(Movable, Stringable, Writable, TrivialRegisterPassable): +struct InvalidCloseErrorConversionError(Movable, Writable, TrivialRegisterPassable): fn write_to[W: Writer, //](self, mut writer: W): writer.write("InvalidCloseErrorConversionError: Cannot convert EBADF to FatalCloseError") @@ -82,7 +82,7 @@ struct InvalidCloseErrorConversionError(Movable, Stringable, Writable, TrivialRe @fieldwise_init -struct SocketRecvError(Movable, Stringable, Writable): +struct SocketRecvError(Movable, Writable): """Error variant for socket receive operations. Can be RecvError from the syscall or EOF if connection closed cleanly. """ @@ -115,7 +115,7 @@ struct SocketRecvError(Movable, Stringable, Writable): @fieldwise_init -struct SocketRecvfromError(Movable, Stringable, Writable): +struct SocketRecvfromError(Movable, Writable): """Error variant for socket recvfrom operations. Can be RecvfromError from the syscall or EOF if connection closed cleanly. """ @@ -148,7 +148,7 @@ struct SocketRecvfromError(Movable, Stringable, Writable): @fieldwise_init -struct SocketAcceptError(Movable, Stringable, Writable): +struct SocketAcceptError(Movable, Writable): """Error variant for socket accept operations. Can be AcceptError or GetpeernameError from the syscall, SocketClosedError, or InetNtopError from binary_ip_to_string. """ @@ -193,7 +193,7 @@ struct SocketAcceptError(Movable, Stringable, Writable): @fieldwise_init -struct SocketBindError(Movable, Stringable, Writable): +struct SocketBindError(Movable, Writable): """Error variant for socket bind operations. Can be BindError from bind(), SocketGetsocknameError from get_sock_name(), or InetPtonError from inet_pton. """ @@ -232,7 +232,7 @@ struct SocketBindError(Movable, Stringable, Writable): @fieldwise_init -struct SocketConnectError(Movable, Stringable, Writable): +struct SocketConnectError(Movable, Writable): """Error variant for socket connect operations. Can be ConnectError from the syscall or SocketAcceptError from get_peer_name. """ @@ -265,7 +265,7 @@ struct SocketConnectError(Movable, Stringable, Writable): @fieldwise_init -struct SocketGetsocknameError(Movable, Stringable, Writable): +struct SocketGetsocknameError(Movable, Writable): """Error variant for socket getsockname operations. Can be GetsocknameError from the syscall, SocketClosedError, or InetNtopError from binary_ip_to_string. """ @@ -304,7 +304,7 @@ struct SocketGetsocknameError(Movable, Stringable, Writable): @fieldwise_init -struct FatalCloseError(Movable, Stringable, Writable): +struct FatalCloseError(Movable, Writable): """Error type for Socket.close() that excludes EBADF. EBADF is excluded because it indicates the socket is already closed, @@ -361,7 +361,7 @@ struct Socket[ address: Addr, sock_type: SocketType = SocketType.SOCK_STREAM, address_family: AddressFamily = AddressFamily.AF_INET, -](Movable, Representable, Stringable, Writable): +](Movable, Writable): """Represents a network file descriptor. Wraps around a file descriptor and provides network functions. Parameters: @@ -624,10 +624,10 @@ struct Socket[ var remote = self.get_peer_name() self.remote_address = Self.address(remote[0], remote[1]) - fn send(self, buffer: Span[Byte]) raises SendError -> UInt: + fn send(self, buffer: Span[Byte, _]) raises SendError -> UInt: return send(self.fd, buffer, UInt(len(buffer)), 0) - fn send_to(self, src: Span[Byte], mut host: String, port: UInt16) raises -> UInt: + fn send_to(self, src: Span[Byte, _], mut host: String, port: UInt16) raises -> UInt: """Send data to the a remote address by connecting to the remote socket before sending. The socket must be not already be connected to a remote socket. diff --git a/lightbug_http/uri.mojo b/lightbug_http/uri.mojo index d1de1b5c..921eb17b 100644 --- a/lightbug_http/uri.mojo +++ b/lightbug_http/uri.mojo @@ -85,7 +85,7 @@ struct PortBounds: @fieldwise_init -struct Scheme(Equatable, Hashable, ImplicitlyCopyable, Representable, Stringable, Writable): +struct Scheme(Equatable, Hashable, ImplicitlyCopyable, Writable): var value: UInt8 comptime HTTP = Self(0) comptime HTTPS = Self(1) @@ -109,7 +109,7 @@ struct Scheme(Equatable, Hashable, ImplicitlyCopyable, Representable, Stringable return String.write(self) -struct URIParseError(Stringable, Writable): +struct URIParseError(Writable): var message: String fn __init__(out self, var message: String): @@ -123,7 +123,7 @@ struct URIParseError(Stringable, Writable): @fieldwise_init -struct URI(Copyable, Representable, Stringable, Writable): +struct URI(Copyable, Writable): var _original_path: String var scheme: String var path: String diff --git a/lightbug_http/utils/error.mojo b/lightbug_http/utils/error.mojo index a2321986..b2f2e037 100644 --- a/lightbug_http/utils/error.mojo +++ b/lightbug_http/utils/error.mojo @@ -1,4 +1,4 @@ -trait CustomError(Movable, Stringable, Writable): +trait CustomError(Movable, Writable): """Trait for error marker structs with comptime messages. Provides default implementations for write_to and __str__ that use diff --git a/lightbug_http/utils/owning_list.mojo b/lightbug_http/utils/owning_list.mojo index 7ed1db0e..a49dd2d4 100644 --- a/lightbug_http/utils/owning_list.mojo +++ b/lightbug_http/utils/owning_list.mojo @@ -171,7 +171,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) return len(self) > 0 @no_inline - fn __str__[U: Representable & Movable, //](self: OwningList[U, *_]) -> String: + fn __str__[U: Writable & Movable, //](self: OwningList[U, *_]) -> String: """Returns a string representation of a `List`. When the compiler supports conditional methods, then a simple `String(my_list)` will @@ -181,7 +181,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) Parameters: U: The type of the elements in the list. Must implement the - traits `Representable` and `Movable`. + traits `Writable` and `Movable`. Returns: A string representation of the list. @@ -191,12 +191,12 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) return output^ @no_inline - fn write_to[W: Writer, U: Representable & Movable, //](self: OwningList[U, *_], mut writer: W): + fn write_to[W: Writer, U: Writable & Movable, //](self: OwningList[U, *_], mut writer: W): """Write `my_list.__str__()` to a `Writer`. Parameters: W: A type conforming to the Writable trait. - U: The type of the List elements. Must have the trait `Representable & Movable`. + U: The type of the List elements. Must have the trait `Writable & Movable`. Args: writer: The object to write to. @@ -209,7 +209,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) writer.write("]") @no_inline - fn __repr__[U: Representable & Movable, //](self: OwningList[U, *_]) -> String: + fn __repr__[U: Writable & Movable, //](self: OwningList[U, *_]) -> String: """Returns a string representation of a `List`. Note that since we can't condition methods on a trait yet, @@ -227,7 +227,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) Parameters: U: The type of the elements in the list. Must implement the - traits `Representable` and `Movable`. + traits `Writable` and `Movable`. Returns: A string representation of the list. diff --git a/pixi.lock b/pixi.lock index 2a1f7669..ad2eade0 100644 --- a/pixi.lock +++ b/pixi.lock @@ -19,37 +19,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -57,16 +55,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../small-time + build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -76,37 +74,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -114,16 +110,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -132,30 +128,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -163,15 +159,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../small-time + build: h60d57d3_0 default: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -191,37 +187,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -229,16 +223,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../small-time + build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -248,37 +242,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -286,16 +278,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -304,30 +296,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -335,15 +327,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../small-time + build: h60d57d3_0 integration-tests: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -361,7 +353,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.2.0-py313hf159716_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda @@ -370,7 +362,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-2.0.0-py313hf46b229_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda @@ -389,7 +381,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -397,9 +389,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/httptools-0.7.1-py313h07c4f96_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda @@ -408,50 +400,48 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuv-1.51.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py313hf6604e3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -459,15 +449,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pydantic-core-2.41.5-py313h843e2db_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.2-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda @@ -477,21 +467,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda @@ -500,23 +488,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.42.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.42.0-h76e4700_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/watchfiles-1.1.1-py313h5c7d99a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/websockets-16.0-py313h54dd161_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../small-time + build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/backports.zstd-1.3.0-py313h3d57138_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.2.0-py313hb260801_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_9.conda @@ -525,7 +515,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py313h897158f_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda @@ -544,7 +534,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -552,9 +542,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/httptools-0.7.1-py313h6194ac5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jeepney-0.9.0-pyhd8ed1ab_0.conda @@ -563,50 +553,48 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyha804496_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.2.0-h1b7bec0_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.86.4-hf53f6bf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuv-1.51.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py313h11e5ff7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.47-hf841c20_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyha804496_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -614,15 +602,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pydantic-core-2.41.5-py313h5e7b836_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.2-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda @@ -632,21 +620,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/rapidfuzz-3.14.3-py313he352c24_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda @@ -655,23 +641,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.42.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.42.0-h76e4700_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uvloop-0.22.1-py313h6194ac5_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchfiles-1.1.1-py313he77ad87_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/websockets-16.0-py313h62ef0ea_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../small-time + build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/backports.zstd-1.3.0-py313h48bb75e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.2.0-py313hde1f3bb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -680,7 +668,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cachecontrol-with-filecache-0.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2026.2.25-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-2.0.0-py313h224173a_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda @@ -697,7 +685,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-core-0.127.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.1.0-pyhd8ed1ab_0.conda @@ -705,52 +693,52 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/httptools-0.7.1-py313h6535dbc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.28.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.1.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jaraco.classes-3.4.0-pyhcf101f3_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/keyring-24.3.1-pyh534df25_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-6_h51639a9_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-6_hb0561ab_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_18.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-6_hd9741b5_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.32-openmp_he657e61_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libuv-1.51.0-h6caf38d_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.1-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h65a2061_1.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.3-py313he4a34aa_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pkginfo-1.12.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-core-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-plugin-export-1.8.0-pyhd8ed1ab_1.conda @@ -758,15 +746,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-2.12.5-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pydantic-core-2.41.5-py313h2c089d5_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.2.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.2-pyhc364b38_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-installer-0.7.0-pyhff2d567_1.conda @@ -776,20 +764,18 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rapidfuzz-3.14.3-py313h0e822ff_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-14.3.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2026.1.14.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/typer-0.24.0-pyhcf101f3_0.conda @@ -798,17 +784,19 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.15.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.6.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.42.0-pyhc90fa1f_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.42.0-h76e4700_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uvloop-0.22.1-py313h6535dbc_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.39.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchfiles-1.1.1-py313h0b74987_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/websockets-16.0-py313h6688731_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xattr-1.3.0-py313h41b806d_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: ../small-time + build: h60d57d3_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl unit-tests: channels: @@ -829,37 +817,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -867,16 +853,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../small-time + build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -886,37 +872,35 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -924,16 +908,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -942,30 +926,30 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -973,15 +957,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../small-time + build: h60d57d3_0 util: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -1001,38 +985,36 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: hb0f4dca_0 - - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.12-hc97d973_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -1040,16 +1022,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../small-time + build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -1059,38 +1041,36 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: he8cfe8b_0 - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.2-he30d5cf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libmpdec-4.0.0-he30d5cf_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.13.12-h4c0d347_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -1098,16 +1078,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../small-time + build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda @@ -1116,31 +1096,31 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 build: h60d57d3_0 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.9.1-pyhc90fa1f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pathspec-1.0.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.12-h20e6be0_100_cp313.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-gil-3.13.12-h4df99d1_100.conda @@ -1148,15 +1128,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - - conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../small-time + build: h60d57d3_0 packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -1246,9 +1226,9 @@ packages: - pkg:pypi/annotated-types?source=hash-mapping size: 18074 timestamp: 1733247158254 -- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.12.1-pyhcf101f3_0.conda - sha256: eb0c4e2b24f1fbefaf96ce6c992c6bd64340bc3c06add4d7415ab69222b201da - md5: 11a2b8c732d215d977998ccd69a9d5e8 +- conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.13.0-pyhcf101f3_0.conda + sha256: f09aed24661cd45ba54a43772504f05c0698248734f9ae8cd289d314ac89707e + md5: af2df4b9108808da3dc76710fe50eae2 depends: - exceptiongroup >=1.0.2 - idna >=2.8 @@ -1257,13 +1237,14 @@ packages: - python constrains: - trio >=0.32.0 - - uvloop >=0.21 + - uvloop >=0.22.1 + - winloop >=0.2.3 license: MIT license_family: MIT purls: - pkg:pypi/anyio?source=compressed-mapping - size: 145175 - timestamp: 1767719033569 + size: 146764 + timestamp: 1774359453364 - conda: https://conda.anaconda.org/conda-forge/linux-64/backports.zstd-1.3.0-py313h18e8e13_0.conda sha256: 9552afbec37c4d8d0e83a5c4c6b3c7f4b8785f935094ce3881e0a249045909ce md5: d9e90792551a527200637e23a915dd79 @@ -1479,17 +1460,17 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 291376 timestamp: 1761203583358 -- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda - sha256: b32f8362e885f1b8417bac2b3da4db7323faa12d5db62b7fd6691c02d60d6f59 - md5: a22d1fd9bf98827e280a02875d9a007a +- conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.6-pyhd8ed1ab_0.conda + sha256: d86dfd428b2e3c364fa90e07437c8405d635aa4ef54b25ab51d9c712be4112a5 + md5: 49ee13eb9b8f44d63879c69b8a40a74b depends: - python >=3.10 license: MIT license_family: MIT purls: - - pkg:pypi/charset-normalizer?source=hash-mapping - size: 50965 - timestamp: 1760437331772 + - pkg:pypi/charset-normalizer?source=compressed-mapping + size: 58510 + timestamp: 1773660086450 - conda: https://conda.anaconda.org/conda-forge/noarch/cleo-2.1.0-pyhd8ed1ab_1.conda sha256: efed3fcc0cf751b27d7f493654c5f2fba664a263664bcde9bc3a7424c080c20a md5: 0bbf06825d478dc823a7cea431b9108c @@ -1564,7 +1545,7 @@ packages: license: Apache-2.0 AND BSD-3-Clause AND PSF-2.0 AND MIT license_family: BSD purls: - - pkg:pypi/cryptography?source=compressed-mapping + - pkg:pypi/cryptography?source=hash-mapping size: 1718868 timestamp: 1770772833949 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.5-py313h2e85185_0.conda @@ -1810,16 +1791,16 @@ packages: - pkg:pypi/fastapi?source=hash-mapping size: 89283 timestamp: 1766768870504 -- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.24.3-pyhd8ed1ab_0.conda - sha256: 6d576ed3bd0e7c57b1144f0b2014de9ea3fab9786316bc3e748105d44e0140a0 - md5: 9dbb20eec24beb026291c20a35ce1ff9 +- conda: https://conda.anaconda.org/conda-forge/noarch/filelock-3.25.2-pyhd8ed1ab_0.conda + sha256: dddea9ec53d5e179de82c24569d41198f98db93314f0adae6b15195085d5567f + md5: f58064cec97b12a7136ebb8a6f8a129b depends: - python >=3.10 license: Unlicense purls: - pkg:pypi/filelock?source=compressed-mapping - size: 24808 - timestamp: 1771468713029 + size: 25845 + timestamp: 1773314012590 - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.16.0-pyhcf101f3_1.conda sha256: 96cac6573fd35ae151f4d6979bab6fbc90cb6b1fb99054ba19eb075da9822fcb md5: b8993c19b0c32a2f7b66cbb58ca27069 @@ -1943,9 +1924,9 @@ packages: - pkg:pypi/hyperframe?source=hash-mapping size: 17397 timestamp: 1737618427549 -- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.2-h33c6efd_0.conda - sha256: 142a722072fa96cf16ff98eaaf641f54ab84744af81754c292cb81e0881c0329 - md5: 186a18e3ba246eccfc7cff00cd19a870 +- conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda + sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a + md5: c80d8a3b84358cb967fa81e7075fbc8a depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -1953,29 +1934,29 @@ packages: license: MIT license_family: MIT purls: [] - size: 12728445 - timestamp: 1767969922681 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.2-hcab7f73_0.conda - sha256: dcbaa3042084ac58685e3ef4547e4c4be9d37dc52b92ea18581288af95e48b52 - md5: 998ee7d53e32f7ab57fc35707285527e + size: 12723451 + timestamp: 1773822285671 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda + sha256: 49ba6aed2c6b482bb0ba41078057555d29764299bc947b990708617712ef6406 + md5: 546da38c2fa9efacf203e2ad3f987c59 depends: - libgcc >=14 - libstdcxx >=14 license: MIT license_family: MIT purls: [] - size: 12851689 - timestamp: 1772208964788 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.2-hef89b57_0.conda - sha256: 24bc62335106c30fecbcc1dba62c5eba06d18b90ea1061abd111af7b9c89c2d7 - md5: 114e6bfe7c5ad2525eb3597acdbf2300 + size: 12837286 + timestamp: 1773822650615 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda + sha256: 3a7907a17e9937d3a46dfd41cffaf815abad59a569440d1e25177c15fd0684e5 + md5: f1182c91c0de31a7abd40cedf6a5ebef depends: - __osx >=11.0 license: MIT license_family: MIT purls: [] - size: 12389400 - timestamp: 1772209104304 + size: 12361647 + timestamp: 1773822915649 - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda sha256: ae89d0299ada2a3162c2614a9d26557a92aa6a77120ce142f8e0109bbf0342b0 md5: 53abe63df7e10a6ba605dc5f9f961d36 @@ -1987,19 +1968,19 @@ packages: - pkg:pypi/idna?source=hash-mapping size: 50721 timestamp: 1760286526795 -- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda - sha256: c18ab120a0613ada4391b15981d86ff777b5690ca461ea7e9e49531e8f374745 - md5: 63ccfdc3a3ce25b027b8767eb722fca8 +- conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda + sha256: 82ab2a0d91ca1e7e63ab6a4939356667ef683905dea631bc2121aa534d347b16 + md5: 080594bf4493e6bae2607e65390c520a depends: - - python >=3.9 + - python >=3.10 - zipp >=3.20 - python license: Apache-2.0 license_family: APACHE purls: - - pkg:pypi/importlib-metadata?source=hash-mapping - size: 34641 - timestamp: 1747934053147 + - pkg:pypi/importlib-metadata?source=compressed-mapping + size: 34387 + timestamp: 1773931568510 - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.5.2-pyhd8ed1ab_0.conda sha256: acc1d991837c0afb67c75b77fdc72b4bf022aac71fedd8b9ea45918ac9b08a80 md5: c85c76dc67d75619a92f51dfbce06992 @@ -2149,53 +2130,54 @@ packages: purls: [] size: 129048 timestamp: 1754906002667 -- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 - md5: 3f43953b7d3fb3aaa1d0d0723d91e368 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda + sha256: 3e307628ca3527448dd1cb14ad7bb9d04d1d28c7d4c5f97ba196ae984571dd25 + md5: fb53fb07ce46a575c5d004bbc96032c2 + depends: + - __glibc >=2.17,<3.0.a0 + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 license: MIT license_family: MIT purls: [] - size: 1370023 - timestamp: 1719463201255 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.conda - sha256: 0ec272afcf7ea7fbf007e07a3b4678384b7da4047348107b2ae02630a570a815 - md5: 29c10432a2ca1472b53f299ffb2ffa37 - depends: - - keyutils >=1.6.1,<2.0a0 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - - openssl >=3.3.1,<4.0a0 + size: 1386730 + timestamp: 1769769569681 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda + sha256: b53999d888dda53c506b264e8c02b5f5c8e022c781eda0718f007339e6bc90ba + md5: d9ca108bd680ea86a963104b6b3e95ca + depends: + - keyutils >=1.6.3,<2.0a0 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - libgcc >=14 + - libstdcxx >=14 + - openssl >=3.5.5,<4.0a0 license: MIT license_family: MIT purls: [] - size: 1474620 - timestamp: 1719463205834 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b - md5: c6dc8a0fdec13a0565936655c33069a1 + size: 1517436 + timestamp: 1769773395215 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda + sha256: c0a0bf028fe7f3defcdcaa464e536cf1b202d07451e18ad83fdd169d15bef6ed + md5: e446e1822f4da8e5080a9de93474184d depends: - __osx >=11.0 - - libcxx >=16 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - openssl >=3.3.1,<4.0a0 + - libcxx >=19 + - libedit >=3.1.20250104,<3.2.0a0 + - libedit >=3.1.20250104,<4.0a0 + - openssl >=3.5.5,<4.0a0 license: MIT license_family: MIT purls: [] - size: 1155530 - timestamp: 1719463474401 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda - sha256: 565941ac1f8b0d2f2e8f02827cbca648f4d18cd461afc31f15604cd291b5c5f3 - md5: 12bd9a3f089ee6c9266a37dab82afabd + size: 1160828 + timestamp: 1769770119811 +- conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda + sha256: 3d584956604909ff5df353767f3a2a2f60e07d070b328d109f30ac40cd62df6c + md5: 18335a698559cdbcd86150a48bf54ba6 depends: - __glibc >=2.17,<3.0.a0 - zstd >=1.5.7,<1.6.0a0 @@ -2204,11 +2186,11 @@ packages: license: GPL-3.0-only license_family: GPL purls: [] - size: 725507 - timestamp: 1770267139900 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_101.conda - sha256: 44527364aa333be631913451c32eb0cae1e09343827e9ce3ccabd8d962584226 - md5: 35b2ae7fadf364b8e5fb8185aaeb80e5 + size: 728002 + timestamp: 1774197446916 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda + sha256: 7abd913d81a9bf00abb699e8987966baa2065f5132e37e815f92d90fc6bba530 + md5: a21644fc4a83da26452a718dc9468d5f depends: - zstd >=1.5.7,<1.6.0a0 constrains: @@ -2216,117 +2198,111 @@ packages: license: GPL-3.0-only license_family: GPL purls: [] - size: 875924 - timestamp: 1770267209884 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda - build_number: 5 - sha256: 18c72545080b86739352482ba14ba2c4815e19e26a7417ca21a95b76ec8da24c - md5: c160954f7418d7b6e87eaf05a8913fa9 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 + size: 875596 + timestamp: 1774197520746 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda + build_number: 6 + sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 + md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e + depends: + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 constrains: + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas - mkl <2026 - - liblapack 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18213 - timestamp: 1765818813880 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-5_haddc8a3_openblas.conda - build_number: 5 - sha256: 700f3c03d0fba8e687a345404a45fbabe781c1cf92242382f62cef2948745ec4 - md5: 5afcea37a46f76ec1322943b3c4dfdc0 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 + size: 18621 + timestamp: 1774503034895 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda + build_number: 6 + sha256: 7374c744c37786bfa4cfd30bbbad13469882e5d9f32ed792922b447b7e369554 + md5: 652bb20bb4618cacd11e17ae070f47ce + depends: + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 constrains: + - blas 2.306 openblas - mkl <2026 - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18369 - timestamp: 1765818610617 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-5_h51639a9_openblas.conda - build_number: 5 - sha256: 620a6278f194dcabc7962277da6835b1e968e46ad0c8e757736255f5ddbfca8d - md5: bcc025e2bbaf8a92982d20863fe1fb69 - depends: - - libopenblas >=0.3.30,<0.3.31.0a0 - - libopenblas >=0.3.30,<1.0a0 + size: 18682 + timestamp: 1774503047392 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.11.0-6_h51639a9_openblas.conda + build_number: 6 + sha256: 979227fc03628925037ab2dfda008eb7b5592644d9c2c21dd285cefe8c42553d + md5: e551103471911260488a02155cef9c94 + depends: + - libopenblas >=0.3.32,<0.3.33.0a0 + - libopenblas >=0.3.32,<1.0a0 constrains: - - libcblas 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas + - liblapacke 3.11.0 6*_openblas + - liblapack 3.11.0 6*_openblas + - blas 2.306 openblas + - libcblas 3.11.0 6*_openblas - mkl <2026 license: BSD-3-Clause - license_family: BSD purls: [] - size: 18546 - timestamp: 1765819094137 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda - build_number: 5 - sha256: 0cbdcc67901e02dc17f1d19e1f9170610bd828100dc207de4d5b6b8ad1ae7ad8 - md5: 6636a2b6f1a87572df2970d3ebc87cc0 - depends: - - libblas 3.11.0 5_h4a7cf45_openblas + size: 18859 + timestamp: 1774504387211 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda + build_number: 6 + sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 + md5: 36ae340a916635b97ac8a0655ace2a35 + depends: + - libblas 3.11.0 6_h4a7cf45_openblas constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapack 3.11.0 5*_openblas + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18194 - timestamp: 1765818837135 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-5_hd72aa62_openblas.conda - build_number: 5 - sha256: 3fad5c9de161dccb4e42c8b1ae8eccb33f4ed56bccbcced9cbb0956ae7869e61 - md5: 0b2f1143ae2d0aa4c991959d0daaf256 - depends: - - libblas 3.11.0 5_haddc8a3_openblas + size: 18622 + timestamp: 1774503050205 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda + build_number: 6 + sha256: 5dd9e872cf8ebd632f31cd3a5ca6d3cb331f4d3a90bfafbe572093afeb77632b + md5: 939e300b110db241a96a1bed438c315b + depends: + - libblas 3.11.0 6_haddc8a3_openblas constrains: - - liblapack 3.11.0 5*_openblas - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas + - liblapacke 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18371 - timestamp: 1765818618899 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-5_hb0561ab_openblas.conda - build_number: 5 - sha256: 38809c361bbd165ecf83f7f05fae9b791e1baa11e4447367f38ae1327f402fc0 - md5: efd8bd15ca56e9d01748a3beab8404eb - depends: - - libblas 3.11.0 5_h51639a9_openblas + size: 18689 + timestamp: 1774503058069 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-6_hb0561ab_openblas.conda + build_number: 6 + sha256: 2e6b3e9b1ab672133b70fc6730e42290e952793f132cb5e72eee22835463eba0 + md5: 805c6d31c5621fd75e53dfcf21fb243a + depends: + - libblas 3.11.0 6_h51639a9_openblas constrains: - - liblapacke 3.11.0 5*_openblas - - liblapack 3.11.0 5*_openblas - - blas 2.305 openblas + - liblapacke 3.11.0 6*_openblas + - blas 2.306 openblas + - liblapack 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18548 - timestamp: 1765819108956 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.0-h55c6f16_1.conda - sha256: ce1049fa6fda9cf08ff1c50fb39573b5b0ea6958375d8ea7ccd8456ab81a0bcb - md5: e9c56daea841013e7774b5cd46f41564 + size: 18863 + timestamp: 1774504433388 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda + sha256: d1402087c8792461bfc081629e8aa97e6e577a31ae0b84e6b9cc144a18f48067 + md5: 4280e0a7fd613b271e022e60dea0138c depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 568910 - timestamp: 1772001095642 + size: 568094 + timestamp: 1774439202359 - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda sha256: d789471216e7aba3c184cd054ed61ce3f6dac6f87a50ec69291b9297f8c18724 md5: c277e0a4d549b03ac1e9d6cbbe3d017b @@ -2472,26 +2448,6 @@ packages: purls: [] size: 401974 timestamp: 1771378877463 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_18.conda - sha256: e318a711400f536c81123e753d4c797a821021fb38970cebfb3f454126016893 - md5: d5e96b1ed75ca01906b3d2469b4ce493 - depends: - - libgcc 15.2.0 he0feb66_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27526 - timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.2.0-he9431aa_18.conda - sha256: 83bb0415f59634dccfa8335d4163d1f6db00a27b36666736f9842b650b92cf2f - md5: 4feebd0fbf61075a1a9c2e9b3936c257 - depends: - - libgcc 15.2.0 h8acb6b2_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27568 - timestamp: 1771378136019 - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee md5: 9063115da5bc35fdc3e1002e69b9ef6e @@ -2633,51 +2589,48 @@ packages: purls: [] size: 791226 timestamp: 1754910975665 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda - build_number: 5 - sha256: c723b6599fcd4c6c75dee728359ef418307280fa3e2ee376e14e85e5bbdda053 - md5: b38076eb5c8e40d0106beda6f95d7609 +- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda + build_number: 6 + sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d + md5: 881d801569b201c2e753f03c84b85e15 depends: - - libblas 3.11.0 5_h4a7cf45_openblas + - libblas 3.11.0 6_h4a7cf45_openblas constrains: - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas - - libcblas 3.11.0 5*_openblas + - blas 2.306 openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18200 - timestamp: 1765818857876 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-5_h88aeb00_openblas.conda - build_number: 5 - sha256: 692222d186d3ffbc99eaf04b5b20181fd26aee1edec1106435a0a755c57cce86 - md5: 88d1e4133d1182522b403e9ba7435f04 - depends: - - libblas 3.11.0 5_haddc8a3_openblas + size: 18624 + timestamp: 1774503065378 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.11.0-6_h88aeb00_openblas.conda + build_number: 6 + sha256: 67472a3cb761ff95527387ea0367883a22f9fbda1283b9880e5ad644fafd0735 + md5: e23a27b52fb320687239e2c5ae4d7540 + depends: + - libblas 3.11.0 6_haddc8a3_openblas constrains: - - liblapacke 3.11.0 5*_openblas - - blas 2.305 openblas - - libcblas 3.11.0 5*_openblas + - blas 2.306 openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18392 - timestamp: 1765818627104 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-5_hd9741b5_openblas.conda - build_number: 5 - sha256: 735a6e6f7d7da6f718b6690b7c0a8ae4815afb89138aa5793abe78128e951dbb - md5: ca9d752201b7fa1225bca036ee300f2b - depends: - - libblas 3.11.0 5_h51639a9_openblas + size: 18702 + timestamp: 1774503068721 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.11.0-6_hd9741b5_openblas.conda + build_number: 6 + sha256: 21606b7346810559e259807497b86f438950cf19e71838e44ebaf4bd2b35b549 + md5: ee33d2d05a7c5ea1f67653b37eb74db1 + depends: + - libblas 3.11.0 6_h51639a9_openblas constrains: - - libcblas 3.11.0 5*_openblas - - blas 2.305 openblas - - liblapacke 3.11.0 5*_openblas + - liblapacke 3.11.0 6*_openblas + - libcblas 3.11.0 6*_openblas + - blas 2.306 openblas license: BSD-3-Clause - license_family: BSD purls: [] - size: 18551 - timestamp: 1765819121855 + size: 18863 + timestamp: 1774504467905 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -2743,80 +2696,78 @@ packages: purls: [] size: 73690 timestamp: 1769482560514 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda - sha256: 199d79c237afb0d4780ccd2fbf829cea80743df60df4705202558675e07dd2c5 - md5: be43915efc66345cccb3c310b6ed0374 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda + sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 + md5: 89d61bc91d3f39fda0ca10fcd3c68594 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.30,<0.3.31.0a0 + - openblas >=0.3.32,<0.3.33.0a0 license: BSD-3-Clause - license_family: BSD purls: [] - size: 5927939 - timestamp: 1763114673331 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_4.conda - sha256: 794a7270ea049ec931537874cd8d2de0ef4b3cef71c055cfd8b4be6d2f4228b0 - md5: 11d7d57b7bdd01da745bbf2b67020b2e + size: 5928890 + timestamp: 1774471724897 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.32-pthreads_h9d3fd7e_0.conda + sha256: 51fcf5eb1fc43bfeca5bf3aa3f51546e92e5a92047ba47146dcea555142e30f8 + md5: 5d2ce5cf40443d055ec6d33840192265 depends: - libgcc >=14 - libgfortran - libgfortran5 >=14.3.0 constrains: - - openblas >=0.3.30,<0.3.31.0a0 + - openblas >=0.3.32,<0.3.33.0a0 license: BSD-3-Clause - license_family: BSD purls: [] - size: 4959359 - timestamp: 1763114173544 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.30-openmp_ha158390_4.conda - sha256: ebbbc089b70bcde87c4121a083c724330f02a690fb9d7c6cd18c30f1b12504fa - md5: a6f6d3a31bb29e48d37ce65de54e2df0 + size: 5122134 + timestamp: 1774471612323 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.32-openmp_he657e61_0.conda + sha256: 713e453bde3531c22a660577e59bf91ef578dcdfd5edb1253a399fa23514949a + md5: 3a1111a4b6626abebe8b978bb5a323bf depends: - __osx >=11.0 - libgfortran - libgfortran5 >=14.3.0 - llvm-openmp >=19.1.7 constrains: - - openblas >=0.3.30,<0.3.31.0a0 + - openblas >=0.3.32,<0.3.33.0a0 license: BSD-3-Clause - license_family: BSD purls: [] - size: 4284132 - timestamp: 1768547079205 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 - md5: a587892d3c13b6621a6091be690dbca2 + size: 4308797 + timestamp: 1774472508546 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.21-h280c20c_3.conda + sha256: 64e5c80cbce4680a2d25179949739a6def695d72c40ca28f010711764e372d97 + md5: 7af961ef4aa2c1136e11dd43ded245ab depends: - - libgcc-ng >=12 + - libgcc >=14 + - __glibc >=2.17,<3.0.a0 license: ISC purls: [] - size: 205978 - timestamp: 1716828628198 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.20-h68df207_0.conda - sha256: 448df5ea3c5cf1af785aad46858d7a5be0522f4234a4dc9bb764f4d11ff3b981 - md5: 2e4a8f23bebdcb85ca8e5a0fbe75666a + size: 277661 + timestamp: 1772479381288 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsodium-1.0.21-h80f16a2_3.conda + sha256: d6112f3a7e7ffcd726ce653724f979b528cb8a19675fc06016a5d360ef94e9a4 + md5: 9e1fe4202543fa5b6ab58dbf12d34ced depends: - - libgcc-ng >=12 + - libgcc >=14 license: ISC purls: [] - size: 177394 - timestamp: 1716828514515 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - sha256: fade8223e1e1004367d7101dd17261003b60aa576df6d7802191f8972f7470b1 - md5: a7ce36e284c5faaf93c220dfc39e3abd + size: 272649 + timestamp: 1772479384085 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda + sha256: df603472ea1ebd8e7d4fb71e4360fe48d10b11c240df51c129de1da2ff9e8227 + md5: 7cc5247987e6d115134ebab15186bc13 depends: - __osx >=11.0 license: ISC purls: [] - size: 164972 - timestamp: 1716828607917 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-hf4e2dac_0.conda - sha256: 04596fcee262a870e4b7c9807224680ff48d4d0cc0dac076a602503d3dc6d217 - md5: da5be73701eecd0e8454423fd6ffcf30 + size: 248039 + timestamp: 1772479570912 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda + sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 + md5: fd893f6a3002a635b5e50ceb9dd2c0f4 depends: - __glibc >=2.17,<3.0.a0 - icu >=78.2,<79.0a0 @@ -2824,30 +2775,30 @@ packages: - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 942808 - timestamp: 1768147973361 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.51.2-h10b116e_0.conda - sha256: 5f8230ccaf9ffaab369adc894ef530699e96111dac0a8ff9b735a871f8ba8f8b - md5: 4e3ba0d5d192f99217b85f07a0761e64 + size: 951405 + timestamp: 1772818874251 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libsqlite-3.52.0-h10b116e_0.conda + sha256: 1ddaf91b44fae83856276f4cb7ce544ffe41d4b55c1e346b504c6b45f19098d6 + md5: 77891484f18eca74b8ad83694da9815e depends: - icu >=78.2,<79.0a0 - libgcc >=14 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 944688 - timestamp: 1768147991301 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.51.2-h1ae2325_0.conda - sha256: 6e9b9f269732cbc4698c7984aa5b9682c168e2a8d1e0406e1ff10091ca046167 - md5: 4b0bf313c53c3e89692f020fb55d5f2c + size: 952296 + timestamp: 1772818881550 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda + sha256: beb0fd5594d6d7c7cd42c992b6bb4d66cbb39d6c94a8234f15956da99a04306c + md5: f6233a3fddc35a2ec9f617f79d6f3d71 depends: - __osx >=11.0 - icu >=78.2,<79.0a0 - libzlib >=1.3.1,<2.0a0 license: blessing purls: [] - size: 909777 - timestamp: 1768148320535 + size: 918420 + timestamp: 1772819478684 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -2873,26 +2824,6 @@ packages: purls: [] size: 5541411 timestamp: 1771378162499 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 - md5: 6235adb93d064ecdf3d44faee6f468de - depends: - - libstdcxx 15.2.0 h934c35e_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27575 - timestamp: 1771378314494 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-ng-15.2.0-hdbbeba8_18.conda - sha256: 035a31cde134e706e30029a837a31f729ad32b7c5bca023271dfe91a8ba6c896 - md5: 699d294376fe18d80b7ce7876c3a875d - depends: - - libstdcxx 15.2.0 hef695bb_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27645 - timestamp: 1771378204663 - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee md5: db409b7c1720428638e7c0d509d3e1b5 @@ -2945,56 +2876,53 @@ packages: purls: [] size: 421195 timestamp: 1753948426421 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda - sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 - md5: edb0dca6bc32e4f4789199455a1dbeb8 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda + sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 + md5: d87ff7921124eccd67248aa483c23fec depends: - __glibc >=2.17,<3.0.a0 - - libgcc >=13 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 60963 - timestamp: 1727963148474 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda - sha256: 5a2c1eeef69342e88a98d1d95bff1603727ab1ff4ee0e421522acd8813439b84 - md5: 08aad7cbe9f5a6b460d0976076b6ae64 - depends: - - libgcc >=13 + size: 63629 + timestamp: 1774072609062 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda + sha256: eb111e32e5a7313a5bf799c7fb2419051fa2fe7eff74769fac8d5a448b309f7f + md5: 502006882cf5461adced436e410046d1 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 66657 - timestamp: 1727963199518 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 + size: 69833 + timestamp: 1774072605429 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda + sha256: 361415a698514b19a852f5d1123c5da746d4642139904156ddfca7c922d23a05 + md5: bc5a5721b6439f2f62a84f2548136082 depends: - __osx >=11.0 constrains: - - zlib 1.3.1 *_2 + - zlib 1.3.2 *_2 license: Zlib license_family: Other purls: [] - size: 46438 - timestamp: 1727963202283 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.0-hc7d1edf_0.conda - sha256: 0daeedb3872ad0fdd6f0d7e7165c63488e8a315d7057907434145fba0c1e7b3d - md5: ff0820b5588b20be3b858552ecf8ffae + size: 47759 + timestamp: 1774072956767 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.1-hc7d1edf_0.conda + sha256: c6f67e928f47603aca7e4b83632d8f3e82bd698051c7c0b34fcce3796eb9b63c + md5: 5a44f53783d87427790fc8692542f1bb depends: - __osx >=11.0 constrains: - - openmp 22.1.0|22.1.0.* - intel-openmp <0.0a0 + - openmp 22.1.1|22.1.1.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 285558 - timestamp: 1772028716784 + size: 285912 + timestamp: 1774349644882 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda sha256: 7b1da4b5c40385791dbc3cc85ceea9fad5da680a27d5d3cb8bfaa185e304a89e md5: 5b5203189eb668f042ac2b0826244964 @@ -3007,9 +2935,9 @@ packages: - pkg:pypi/markdown-it-py?source=hash-mapping size: 64736 timestamp: 1754951288511 -- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda - sha256: a530a411bdaaf0b1e4de8869dfaca46cb07407bc7dc0702a9e231b0e5ce7ca85 - md5: c14389156310b8ed3520d84f854be1ee +- conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_1.conda + sha256: 72ed7c0216541d65a17b171bf2eec4a3b81e9158d8ed48e59e1ecd3ae302d263 + md5: aeb9b9da79fd0258b3db091d1fefcd71 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -3021,11 +2949,11 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 25909 - timestamp: 1759055357045 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_0.conda - sha256: c03eb8f5a4659ce31e698a328372f6b0357644d557ea0dc01fe0c5897c231c48 - md5: 59fc93a010d6e8a08a4fa32424d86a82 + size: 26100 + timestamp: 1772445154165 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_1.conda + sha256: e17b67ce69e04c9ac2b4d1e5458c924226cc8fba590f26c49983a2285879df56 + md5: ff5f5c0af92d01fff0aff006a8eb78a8 depends: - libgcc >=14 - python >=3.13,<3.14.0a0 @@ -3036,11 +2964,11 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 26403 - timestamp: 1759056219797 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h7d74516_0.conda - sha256: e06902a1bf370fdd4ada0a8c81c504868fdb7e9971b72c6bd395aa4e5a497bd2 - md5: 3df5979cc0b761dda0053ffdb0bca3ea + size: 26561 + timestamp: 1772446359098 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h65a2061_1.conda + sha256: f62892a42948c61aa0a13d9a36ff811651f0a1102331223594aecf3cc042bece + md5: 0195d558b0c0ab8f4af3089af83067c5 depends: - __osx >=11.0 - python >=3.13,<3.14.0a0 @@ -3052,12 +2980,12 @@ packages: license_family: BSD purls: - pkg:pypi/markupsafe?source=hash-mapping - size: 25778 - timestamp: 1759055530601 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.2.0.dev2026030105-release.conda + size: 26009 + timestamp: 1772445537524 +- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda noarch: python - sha256: 4d4e6512d54bd5f299b685c54f1c909c278df9c5d93dc8c5c71c40ac7e1a8b61 - md5: 8a5a2f5809c6bc50d9e80647d301585c + sha256: e475adff7f6af009de6882000366e5ec8eea42f8887dfa0d75e66e6742a51316 + md5: f92b43fce0b4baa1805e4050e4f23b7f depends: - python >=3.10 - click >=8.0.0 @@ -3066,9 +2994,9 @@ packages: - pathspec >=0.9.0 - platformdirs >=2 - tomli >=1.1.0 - license: MIT - size: 137589 - timestamp: 1772343706785 + license: LicenseRef-Modular-Proprietary + size: 134400 + timestamp: 1774590287794 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -3080,72 +3008,72 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.2.0.dev2026030105-release.conda - sha256: e58e1fbc54e6f9ece751526f28224fb7984f484e3f232e87b293ddfd575baa3b - md5: d1db5028e44c4436ba88323ad5bf13b9 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda + sha256: d1f64f62a3377f7aaeab624bbce2754b3579145723a14af7af8fd972e0105839 + md5: 8d12cfe0ecd21d51ab30abe1090a1fe5 depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026030105 release - - mblack ==26.2.0.dev2026030105 release + - mojo-compiler ==0.26.3.0.dev2026032705 + - mblack ==26.3.0.dev2026032705 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 89045624 - timestamp: 1772343706785 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.2.0.dev2026030105-release.conda - sha256: bc4ee00ffa9985e3dd890065464bb3bc6435e48062d6be6f6d980a4662d45b2f - md5: de383975aca82c1f4af93b1789b5b8b3 + size: 90721218 + timestamp: 1774590358778 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda + sha256: 703d46f5488c40c4bda2e918d60db78881ec1ecd9ca1abd40a712c4780add6f6 + md5: bf6b51e9437e33862fe76524bb5313ff depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026030105 release - - mblack ==26.2.0.dev2026030105 release + - mojo-compiler ==0.26.3.0.dev2026032705 + - mblack ==26.3.0.dev2026032705 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 87719705 - timestamp: 1772343753750 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.2.0.dev2026030105-release.conda - sha256: 0d97392aa8c4cf771840d95ac77b8a77840d23da8b121ec6976dddb444ac49ed - md5: 8a2b686bfc4acf992b617c374af37900 + size: 89361202 + timestamp: 1774590521634 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda + sha256: 56d6a9ab464a77db3d6633fd2a838a15054977f1996622255a21dd553b75b2e1 + md5: c043a91acf25470be327b6aa1dd304ca depends: - python >=3.10 - - mojo-compiler ==0.26.2.0.dev2026030105 release - - mblack ==26.2.0.dev2026030105 release + - mojo-compiler ==0.26.3.0.dev2026032705 + - mblack ==26.3.0.dev2026032705 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 75810301 - timestamp: 1772343746570 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - sha256: 6ab238cd1de8bc1df836dcbc647373a0298fdbeb37db732a0542898b5bf499e2 - md5: 9b6de160b4199860cfd3b6cd4fd5c198 + size: 82147210 + timestamp: 1774590421259 +- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + sha256: 637b049734efaaa916c4dc9024a450469a8895134b53aef48184788944462572 + md5: 7d36be1e7df9bc08ff1c2f096228413d depends: - - mojo-python ==0.26.2.0.dev2026030105 release + - mojo-python ==0.26.3.0.dev2026032705 license: LicenseRef-Modular-Proprietary - size: 87989870 - timestamp: 1772343706784 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - sha256: 462e8fff80d2511ce5b404ce7c9da3d8a254282c5480c6e81516aaf555f0d36e - md5: 2d3b66073f675e48f7ab11dfe655743f + size: 90011677 + timestamp: 1774590363178 +- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + sha256: 79f4911434eeeba8a350e7c61a8321b14633a186ad6eac85454d1cfb27067bca + md5: 1d02fef89633e597c202eff0c9bffa48 depends: - - mojo-python ==0.26.2.0.dev2026030105 release + - mojo-python ==0.26.3.0.dev2026032705 license: LicenseRef-Modular-Proprietary - size: 85191114 - timestamp: 1772343753747 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.2.0.dev2026030105-release.conda - sha256: 9255a2a07631f879f0b04e7ec3b60b7ef2b290e60faad7a5da202fe74ffb273b - md5: 0d915ccf1a28f30570bbe6c6902aca49 + size: 87242384 + timestamp: 1774590530705 +- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda + sha256: c31adeaa56bf6aca01b7e43f348a502a30ccf64912fd8e1526b0279a78504ba4 + md5: a79142a782f2b26e5e24b38bb06e099d depends: - - mojo-python ==0.26.2.0.dev2026030105 release + - mojo-python ==0.26.3.0.dev2026032705 license: LicenseRef-Modular-Proprietary - size: 66494667 - timestamp: 1772343746562 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.2.0.dev2026030105-release.conda + size: 68208824 + timestamp: 1774590421532 +- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda noarch: python - sha256: 7086cbbeb4a0c485183ac2107dd743d6aab24dd14c7c4c30214fa931a1ae0b1d - md5: deb99d3185900e51408d3aaf4e50e3f8 + sha256: 3f0b5a9281829f4f8a7b6390a608dd7afc2590d2a0015c231f88298a9a6beb17 + md5: 153a21c2953a61d6c59d1ffc50d5e169 depends: - - python + - python >=3.10 license: LicenseRef-Modular-Proprietary - size: 681903 - timestamp: 1772343706781 + size: 23197 + timestamp: 1774590287643 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a md5: 32f78e9d06e8593bc4bbf1338da06f5f @@ -3242,37 +3170,37 @@ packages: purls: [] size: 797030 timestamp: 1738196177597 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda - sha256: 2eb8be25a7504f058a153a84be70471e0ebbf6bd0411ae2b6d34904b89d86fe3 - md5: ca9c6ba4beac38cb3d0a85afde27f94c +- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py313hf6604e3_0.conda + sha256: bcf75998ea3ae133df3580fb427d1054b006b093799430f499fd7ce8207d34c7 + md5: c4a9d2e77eb9fee983a70cf5f047c202 depends: - python + - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - liblapack >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - python_abi 3.13.* *_cp313 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=hash-mapping - size: 8857152 - timestamp: 1770098515258 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.2-py313h11e5ff7_1.conda - sha256: 7acd65fef10bb9bb6385e154e3a55c60b3320b0886005bf93ef14f3ea027d4e9 - md5: b40ed3c04212930574f77fc500436106 + - pkg:pypi/numpy?source=compressed-mapping + size: 8857056 + timestamp: 1773839226294 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.4.3-py313h11e5ff7_0.conda + sha256: 35a3ea7b8d2963920ef45acecf983c24c165e32d8592bac8728515d741e7af44 + md5: b9bfd5cc1515f36131b1aa087a24e574 depends: - python - libgcc >=14 - libstdcxx >=14 - python 3.13.* *_cp313 - - python_abi 3.13.* *_cp313 - - libcblas >=3.9.0,<4.0a0 - liblapack >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - python_abi 3.13.* *_cp313 - libblas >=3.9.0,<4.0a0 constrains: - numpy-base <0a0 @@ -3280,15 +3208,15 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 7931090 - timestamp: 1770098524373 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.2-py313h16eae64_1.conda - sha256: 3e23ed9eb63d9ce4dc585aad6b65e0197d7e9f28877acf7114cc64f33763a420 - md5: e34e9c58a0ee3eca3def3bb477797621 + size: 7930822 + timestamp: 1773839278435 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.4.3-py313he4a34aa_0.conda + sha256: d55c3f4b13486bf8e3cadaf731a5d9b67aa9deb51f7c30e381b948a9ada20ef0 + md5: 03b99caf1270c27febfcceb4f1090af7 depends: - python - - __osx >=11.0 - python 3.13.* *_cp313 + - __osx >=11.0 - libcxx >=19 - liblapack >=3.9.0,<4.0a0 - libblas >=3.9.0,<4.0a0 @@ -3299,9 +3227,9 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/numpy?source=hash-mapping - size: 6925963 - timestamp: 1770098439599 + - pkg:pypi/numpy?source=compressed-mapping + size: 6924384 + timestamp: 1773839167287 - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c md5: f61eb8cd60ff9057122a3d338b99c00f @@ -3406,9 +3334,9 @@ packages: - pkg:pypi/pkginfo?source=hash-mapping size: 30536 timestamp: 1739984682585 -- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.2-pyhcf101f3_0.conda - sha256: 7f263219cecf0ba6d74c751efa60c4676ce823157ca90aa43ebba5ac615ca0fa - md5: 4fefefb892ce9cc1539405bec2f1a6cd +- conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.9.4-pyhcf101f3_0.conda + sha256: 0289f0a38337ee201d984f8f31f11f6ef076cfbbfd0ab9181d12d9d1d099bf46 + md5: 82c1787f2a65c0155ef9652466ee98d6 depends: - python >=3.10 - python @@ -3416,8 +3344,8 @@ packages: license_family: MIT purls: - pkg:pypi/platformdirs?source=compressed-mapping - size: 25643 - timestamp: 1771233827084 + size: 25646 + timestamp: 1773199142345 - conda: https://conda.anaconda.org/conda-forge/noarch/poetry-1.8.5-pyh534df25_0.conda sha256: c5ab8a98f25d6416ef40761db1d8f5cea3ea67a28051d3d17829347c63dede67 md5: 669f9224d31f304bc632f346734d987a @@ -3605,9 +3533,9 @@ packages: - pkg:pypi/pydantic-core?source=hash-mapping size: 1778337 timestamp: 1762989007829 -- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.0-pyhcf101f3_1.conda - sha256: 6a25f3b7a92833534eb9d09e3b4ba00195fbf459ec608d15dc9e31f81b67e972 - md5: 83984e3edee8f7312c0aa860682ee145 +- conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-extra-types-2.11.1-pyhcf101f3_0.conda + sha256: 385a900cf5d1d39dafab6088537c58a32d572fd237d7c4598def92c4c1120cb8 + md5: 96513760035d70917819a2840155d23a depends: - python >=3.10 - pydantic >=2.5.2 @@ -3623,9 +3551,9 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pydantic-extra-types?source=hash-mapping - size: 68665 - timestamp: 1770023146886 + - pkg:pypi/pydantic-extra-types?source=compressed-mapping + size: 72040 + timestamp: 1773664659868 - conda: https://conda.anaconda.org/conda-forge/noarch/pydantic-settings-2.13.1-pyhd8ed1ab_0.conda sha256: 343988d65c08477a87268d4fbeba59d0295514143965d2755ac4519b73155479 md5: cc0da73801948100ae97383b8da12993 @@ -3752,24 +3680,24 @@ packages: size: 12770674 timestamp: 1770272314517 python_site_packages_path: lib/python3.13/site-packages -- conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.0-pyh332efcf_0.conda - sha256: 195e483a12bcec40b817f4001d4d4b8ea1cb2de66a62aeabfff6e32e29b3f407 - md5: dbbb75958b0b03842dcf9be2f200fc10 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-build-1.4.2-pyhc364b38_1.conda + sha256: 3f76a55e524728cd4092d78dd01107c8c3e91a66842317b49c7c8209a332c4f1 + md5: 09971b38d49f16c47a8769aeb171ef3d depends: + - python >=3.9 - colorama - importlib-metadata >=4.6 - - packaging >=19.0 + - packaging >=24.0 - pyproject_hooks - - python >=3.10 - tomli >=1.1.0 + - python constrains: - build <0 license: MIT - license_family: MIT purls: - pkg:pypi/build?source=hash-mapping - size: 26687 - timestamp: 1767988747352 + size: 28291 + timestamp: 1774469084833 - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 md5: 5b8d21249ff20967101ffa321cab24e8 @@ -3783,18 +3711,17 @@ packages: - pkg:pypi/python-dateutil?source=hash-mapping size: 233310 timestamp: 1751104122689 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda - sha256: aa98e0b1f5472161318f93224f1cfec1355ff69d2f79f896c0b9e033e4a6caf9 - md5: 083725d6cd3dc007f06d04bcf1e613a2 +- conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.2-pyhcf101f3_0.conda + sha256: 74e417a768f59f02a242c25e7db0aa796627b5bc8c818863b57786072aeb85e5 + md5: 130584ad9f3a513cdd71b1fdc1244e9c depends: - python >=3.10 - - python license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/python-dotenv?source=hash-mapping - size: 26922 - timestamp: 1761503229008 + - pkg:pypi/python-dotenv?source=compressed-mapping + size: 27848 + timestamp: 1772388605021 - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.21.2-pyhe01879c_0.conda sha256: df9aa74e9e28e8d1309274648aac08ec447a92512c33f61a8de0afa9ce32ebe8 md5: 23029aae904a2ba587daba708208012f @@ -3878,7 +3805,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=compressed-mapping + - pkg:pypi/pyyaml?source=hash-mapping size: 194182 timestamp: 1770223431084 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.3-py313h65a2061_1.conda @@ -3893,7 +3820,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/pyyaml?source=compressed-mapping + - pkg:pypi/pyyaml?source=hash-mapping size: 188763 timestamp: 1770224094408 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda @@ -3911,7 +3838,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=compressed-mapping + - pkg:pypi/pyzmq?source=hash-mapping size: 211567 timestamp: 1771716961404 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda @@ -3928,7 +3855,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=compressed-mapping + - pkg:pypi/pyzmq?source=hash-mapping size: 212585 timestamp: 1771716963309 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda @@ -3945,7 +3872,7 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/pyzmq?source=compressed-mapping + - pkg:pypi/pyzmq?source=hash-mapping size: 191641 timestamp: 1771717073430 - conda: https://conda.anaconda.org/conda-forge/linux-64/rapidfuzz-3.14.3-py313h7033f15_1.conda @@ -4030,24 +3957,23 @@ packages: purls: [] size: 313930 timestamp: 1765813902568 -- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.5-pyhcf101f3_1.conda - sha256: 7813c38b79ae549504b2c57b3f33394cea4f2ad083f0994d2045c2e24cb538c5 - md5: c65df89a0b2e321045a9e01d1337b182 +- conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.33.0-pyhcf101f3_0.conda + sha256: fbc7183778e1f9976ae7d812986c227f9d43f841326ac03b5f43f1ac93fa8f3b + md5: bee5ed456361bfe8af502beaf5db82e2 depends: - python >=3.10 - - certifi >=2017.4.17 + - certifi >=2023.5.7 - charset-normalizer >=2,<4 - idna >=2.5,<4 - - urllib3 >=1.21.1,<3 + - urllib3 >=1.26,<3 - python constrains: - chardet >=3.0.2,<6 license: Apache-2.0 - license_family: APACHE purls: - pkg:pypi/requests?source=compressed-mapping - size: 63602 - timestamp: 1766926974520 + size: 63788 + timestamp: 1774462091279 - conda: https://conda.anaconda.org/conda-forge/noarch/requests-toolbelt-1.0.0-pyhd8ed1ab_1.conda sha256: c0b815e72bb3f08b67d60d5e02251bbb0164905b5f72942ff5b6d2a339640630 md5: 66de8645e324fda0ea6ef28c2f99a2ab @@ -4087,7 +4013,7 @@ packages: license: MIT license_family: MIT purls: - - pkg:pypi/rich-toolkit?source=compressed-mapping + - pkg:pypi/rich-toolkit?source=hash-mapping size: 32484 timestamp: 1771977622605 - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda @@ -4143,7 +4069,7 @@ packages: - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 -- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e +- conda: ../small-time name: small_time version: 26.2.0 build: h60d57d3_0 @@ -4151,9 +4077,8 @@ packages: variants: target_platform: osx-arm64 depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - channel: null -- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + - mojo-compiler >=0.26.2.0,<0.27 +- conda: ../small-time name: small_time version: 26.2.0 build: hb0f4dca_0 @@ -4161,9 +4086,8 @@ packages: variants: target_platform: linux-64 depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - channel: null -- conda: git+https://github.com/thatstoasty/small-time?branch=26.2#1b64590486bde08b53062018a515424ab781cc1e + - mojo-compiler >=0.26.2.0,<0.27 +- conda: ../small-time name: small_time version: 26.2.0 build: he8cfe8b_0 @@ -4171,8 +4095,7 @@ packages: variants: target_platform: linux-aarch64 depends: - - mojo-compiler >=0.26.1.0,<0.26.2.0 - channel: null + - mojo-compiler >=0.26.2.0,<0.27 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad md5: 03fe290994c5e4ec17293cfb6bdce520 @@ -4236,18 +4159,17 @@ packages: purls: [] size: 3127137 timestamp: 1769460817696 -- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.0-pyhcf101f3_0.conda - sha256: 62940c563de45790ba0f076b9f2085a842a65662268b02dd136a8e9b1eaf47a8 - md5: 72e780e9aa2d0a3295f59b1874e3768b +- conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda + sha256: 91cafdb64268e43e0e10d30bd1bef5af392e69f00edd34dfaf909f69ab2da6bd + md5: b5325cf06a000c5b14970462ff5e4d58 depends: - python >=3.10 - python license: MIT - license_family: MIT purls: - - pkg:pypi/tomli?source=compressed-mapping - size: 21453 - timestamp: 1768146676791 + - pkg:pypi/tomli?source=hash-mapping + size: 21561 + timestamp: 1774492402955 - conda: https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.14.0-pyha770c72_0.conda sha256: b35082091c8efd084e51bc3a4a2d3b07897eff232aaf58cbc0f959b6291a6a93 md5: 385dca77a8b0ec6fa9b92cb62d09b43b @@ -4259,9 +4181,9 @@ packages: - pkg:pypi/tomlkit?source=hash-mapping size: 39224 timestamp: 1768476626454 -- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.3-py313h07c4f96_0.conda - sha256: 6006d4e5a6ff99be052c939e43adee844a38f2dc148f44a7c11aa0011fd3d811 - md5: 82da2dcf1ea3e298f2557b50459809e0 +- conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda + sha256: 9e8497e1ecca77d03c6be2d3b5f901dfe0ab99686af4fb94ab418b7d449ac547 + md5: 6c0b0ae017b5bfd9c8d718217efd8f14 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -4270,12 +4192,12 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/tornado?source=hash-mapping - size: 878109 - timestamp: 1765458900582 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.3-py313he149459_0.conda - sha256: 06e69d338c1724a1340dc374c758fb75c36b069caa5a1994fbf461ae2d42e4fd - md5: 236667bf319279d8d0a9581ebb4337f0 + - pkg:pypi/tornado?source=compressed-mapping + size: 882996 + timestamp: 1774358035145 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda + sha256: a7e81ec39fdbf383eae736e90b14c2ca8c4135898d8591e38e548199e1e8cd0d + md5: 72cdaf3d2963ec20c0b54154fe871985 depends: - libgcc >=14 - python >=3.13,<3.14.0a0 @@ -4283,12 +4205,12 @@ packages: license: Apache-2.0 license_family: Apache purls: - - pkg:pypi/tornado?source=hash-mapping - size: 879449 - timestamp: 1765460007029 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.4-py313h6535dbc_0.conda - sha256: a8130a361b7bc21190836ba8889276cc263fcb09f52bf22efcaed1de98179948 - md5: 67a85c1b5c17124eaf9194206afd5159 + - pkg:pypi/tornado?source=compressed-mapping + size: 883411 + timestamp: 1774359392374 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda + sha256: c5b0ee042d8a0b88a3823226dc95b794c042c498aee330aa9b4d78bfad01d099 + md5: 303333dd882dfeb303cc8bfac178464b depends: - __osx >=11.0 - python >=3.13,<3.14.0a0 @@ -4298,8 +4220,8 @@ packages: license_family: Apache purls: - pkg:pypi/tornado?source=hash-mapping - size: 877647 - timestamp: 1765836696426 + size: 883472 + timestamp: 1774358832451 - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_1.conda sha256: f39a5620c6e8e9e98357507262a7869de2ae8cc07da8b7f84e517c9fd6c2b959 md5: 019a7385be9af33791c989871317e1ed @@ -4394,9 +4316,9 @@ packages: - pkg:pypi/urllib3?source=hash-mapping size: 103172 timestamp: 1767817860341 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.41.0-pyhc90fa1f_0.conda - sha256: 199731b8a86d18d89a9236225cf3e618aef467f628bc6f6bb2875a28f24f3dd4 - md5: 10d80692c8c9c05b7d4b0a1531208ad7 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-0.42.0-pyhc90fa1f_0.conda + sha256: f6522b921e7434775cd283c9b2382e5344db226e58bd36b294a1553700d0d1f9 + md5: c6ad593e48d81ab822b7ac6b9b054a0d depends: - __unix - click >=7.0 @@ -4407,15 +4329,15 @@ packages: license: BSD-3-Clause license_family: BSD purls: - - pkg:pypi/uvicorn?source=hash-mapping - size: 54913 - timestamp: 1771328143244 -- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.41.0-he9f3e0c_0.conda - sha256: 034d62c37fadadafe8b5c923beaed2279d0f4ad8df731f3e86d12760fa33ccbc - md5: 2ada177289a251ffcfeae37e9f28dc3a + - pkg:pypi/uvicorn?source=compressed-mapping + size: 54908 + timestamp: 1773659868807 +- conda: https://conda.anaconda.org/conda-forge/noarch/uvicorn-standard-0.42.0-h76e4700_0.conda + sha256: 98f2619d66c477745272b8ec10dd4737055848372a007af3228bb9fb1547e894 + md5: 6eb0881849490cee741779c698f68d45 depends: - __unix - - uvicorn ==0.41.0 pyhc90fa1f_0 + - uvicorn ==0.42.0 pyhc90fa1f_0 - websockets >=10.4 - httptools >=0.6.3 - watchfiles >=0.20 @@ -4425,8 +4347,8 @@ packages: license: BSD-3-Clause license_family: BSD purls: [] - size: 4145 - timestamp: 1771328143246 + size: 4141 + timestamp: 1773659868807 - conda: https://conda.anaconda.org/conda-forge/linux-64/uvloop-0.22.1-py313h07c4f96_1.conda sha256: 77a220ecf6c1467f94d6adda5fb1296f558f3f3044842dc0a52881eab5908dc0 md5: 266caaa8701a13482ea924a77897b1e4 @@ -4625,47 +4547,46 @@ packages: purls: [] size: 83386 timestamp: 1753484079473 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h387f397_9.conda - sha256: 47cfe31255b91b4a6fa0e9dbaf26baa60ac97e033402dbc8b90ba5fee5ffe184 - md5: 8035e5b54c08429354d5d64027041cad +- conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda + sha256: 325d370b28e2b9cc1f765c5b4cdb394c91a5d958fbd15da1a14607a28fee09f6 + md5: 755b096086851e1193f3b10347415d7c depends: - - libstdcxx >=14 - libgcc >=14 - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libsodium >=1.0.20,<1.0.21.0a0 - - krb5 >=1.21.3,<1.22.0a0 + - libstdcxx >=14 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.21,<1.0.22.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 310648 - timestamp: 1757370847287 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hefbcea8_9.conda - sha256: 8a1efaf97a00d62d68939abe40f7a35ace8910eec777d5535b8c32d0079750bd - md5: 5676806bba055c901a62f969cb3fbe02 + size: 311150 + timestamp: 1772476812121 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda + sha256: 32f77d565687a8241ebfb66fe630dcb197efc84f6a8b59df8260b1191b7deb2c + md5: ac79d51c73c8fbe6ef6e9067191b7f1a depends: - - libstdcxx >=14 - libgcc >=14 - - krb5 >=1.21.3,<1.22.0a0 - - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=14 + - libsodium >=1.0.21,<1.0.22.0a0 + - krb5 >=1.22.2,<1.23.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 350254 - timestamp: 1757370867477 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h888dc83_9.conda - sha256: b6f9c130646e5971f6cad708e1eee278f5c7eea3ca97ec2fdd36e7abb764a7b8 - md5: 26f39dfe38a2a65437c29d69906a0f68 + size: 350773 + timestamp: 1772476818466 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda + sha256: 2705360c72d4db8de34291493379ffd13b09fd594d0af20c9eefa8a3f060d868 + md5: e85dcd3bde2b10081cdcaeae15797506 depends: - __osx >=11.0 - libcxx >=19 - - libsodium >=1.0.20,<1.0.21.0a0 - - krb5 >=1.21.3,<1.22.0a0 + - krb5 >=1.22.2,<1.23.0a0 + - libsodium >=1.0.21,<1.0.22.0a0 license: MPL-2.0 license_family: MOZILLA purls: [] - size: 244772 - timestamp: 1757371008525 + size: 245246 + timestamp: 1772476886668 - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda sha256: b4533f7d9efc976511a73ef7d4a2473406d7f4c750884be8e8620b0ce70f4dae md5: 30cd29cb87d819caead4d55184c1d115 diff --git a/pixi.toml b/pixi.toml index b21b55e7..25ac5dfa 100644 --- a/pixi.toml +++ b/pixi.toml @@ -34,29 +34,29 @@ build_and_publish = [{ task = "build" }, { task = "publish" }] [package] name = "lightbug_http" -version = "0.26.1.2" +version = "0.26.2.0" [package.build] backend = { name = "pixi-build-mojo", version = "*" } [dependencies] -mojo = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} +mojo = ">=0.26.2.0,<0.27" +small_time = {path = "../small-time"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.host-dependencies] -mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} +mojo-compiler = ">=0.26.2.0,<0.27" +small_time = {path = "../small-time"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.build-dependencies] -mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} +mojo-compiler = ">=0.26.2.0,<0.27" +small_time = {path = "../small-time"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [package.run-dependencies] -mojo-compiler = ">=0.26.2.0.dev2026020205,<0.27" -small_time = {git = "https://github.com/thatstoasty/small-time.git", branch = "26.2"} +mojo-compiler = ">=0.26.2.0,<0.27" +small_time = {path = "../small-time"} emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} [feature.util.dependencies] From 2c5bcbcd061cd903714bafce4a78bfca0826a5b5 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 15:36:34 +0100 Subject: [PATCH 15/27] wip fixing compilation errors --- lightbug_http/address.mojo | 10 +- lightbug_http/http/parsing.mojo | 2 +- lightbug_http/http/response.mojo | 8 +- lightbug_http/io/bytes.mojo | 7 +- lightbug_http/uri.mojo | 6 +- pixi.lock | 298 +++++++++++++++---------------- pixi.toml | 18 +- 7 files changed, 173 insertions(+), 176 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index df7845e5..f5461a65 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -580,7 +580,7 @@ fn parse_ipv6_bracketed_address[ Returns: Tuple of (host, colon_index_offset). """ - if address[0:1] != StringSlice("["): + if address[byte=0:1] != StringSlice("["): return address, UInt16(0) var end_bracket_index = address.find("]") @@ -591,10 +591,10 @@ fn parse_ipv6_bracketed_address[ raise ParseError(ParseMissingPortError()) var colon_index = end_bracket_index + 1 - if address[colon_index : colon_index + 1] != StringSlice(":"): + if address[byte=colon_index : colon_index + 1] != StringSlice(":"): raise ParseError(ParseMissingPortError()) - return address[1:end_bracket_index], UInt16(end_bracket_index + 1) + return address[byte=1:end_bracket_index], UInt16(end_bracket_index + 1) fn validate_no_brackets[ @@ -604,9 +604,9 @@ fn validate_no_brackets[ var segment: StringSlice[origin] if end_idx is None: - segment = address[Int(start_idx) :] + segment = address[byte=Int(start_idx) :] else: - segment = address[Int(start_idx) : Int(end_idx.value())] + segment = address[byte=Int(start_idx) : Int(end_idx.value())] if segment.find("[") != -1: raise ParseError(ParseUnexpectedBracketError()) diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index df64b13f..61de8107 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -281,7 +281,7 @@ fn parse_headers[ get_token_to_eol(buf, value, value_len) while value_len > 0: - var c = value[value_len - 1 : value_len] + var c = value[byte=value_len - 1 : value_len] ref c_byte = c.as_bytes()[0] if c_byte != BytesConstant.whitespace and c_byte != BytesConstant.TAB: break diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index 435318c4..93e0585a 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -46,15 +46,17 @@ comptime ResponseParseError = Variant[ ] -@fieldwise_init -struct Json[T: AnyType]: +struct Json[T: Movable]: """Wraps a value to be serialized as a JSON HTTP response body. Parameters: T: Any struct type to serialize as JSON. """ - var value: T + var value: Self.T + + fn __init__(out self, owned value: Self.T): + self.value = value^ struct StatusCode: diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index 65991019..df483a2e 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -69,7 +69,7 @@ struct ByteWriter(Writer): return self._inner^ -struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized): +struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized, Writable): """Convenience wrapper around a Span of Bytes.""" var _inner: Span[Byte, Self.origin] @@ -110,8 +110,11 @@ struct ByteView[origin: ImmutOrigin](Boolable, Copyable, Equatable, Sized): fn __getitem__(self, slc: ContiguousSlice) -> Self: return Self(self._inner[slc]) + fn write_to[W: Writer, //](self, mut writer: W): + writer.write(StringSlice(unsafe_from_utf8=self._inner)) + fn __str__(self) -> String: - return String(unsafe_from_utf8=self._inner) + return String.write(self) fn __eq__(self, other: Self) -> Bool: # both empty diff --git a/lightbug_http/uri.mojo b/lightbug_http/uri.mojo index 921eb17b..07b0a13f 100644 --- a/lightbug_http/uri.mojo +++ b/lightbug_http/uri.mojo @@ -19,7 +19,7 @@ fn unquote[expand_plus: Bool = False](input_str: String, disallowed_escapes: Lis var str_bytes = List[UInt8]() while current_idx < len(percent_idxs): var slice_end = percent_idxs[current_idx] - sub_strings.append(String(encoded_str[slice_start:slice_end])) + sub_strings.append(String(encoded_str[byte=slice_start:slice_end])) var current_offset = slice_end while current_idx < len(percent_idxs): @@ -29,7 +29,7 @@ fn unquote[expand_plus: Bool = False](input_str: String, disallowed_escapes: Lis try: char_byte = atol( - encoded_str[current_offset + 1 : current_offset + 3], + encoded_str[byte=current_offset + 1 : current_offset + 3], base=16, ) str_bytes.append(UInt8(char_byte)) @@ -54,7 +54,7 @@ fn unquote[expand_plus: Bool = False](input_str: String, disallowed_escapes: Lis slice_start = current_offset current_idx += 1 - sub_strings.append(String(encoded_str[slice_start:])) + sub_strings.append(String(encoded_str[byte=slice_start:])) return StaticString("").join(sub_strings) diff --git a/pixi.lock b/pixi.lock index ad2eade0..690c6590 100644 --- a/pixi.lock +++ b/pixi.lock @@ -4,7 +4,6 @@ environments: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ options: @@ -17,8 +16,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -38,10 +35,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -63,6 +60,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../EmberJson + build: hb0f4dca_0 - conda: ../small-time build: hb0f4dca_0 linux-aarch64: @@ -72,8 +71,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -93,10 +90,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -118,6 +115,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../EmberJson + build: he8cfe8b_0 - conda: ../small-time build: he8cfe8b_0 osx-arm64: @@ -126,8 +125,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -142,10 +139,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -166,13 +163,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../EmberJson + build: h60d57d3_0 - conda: ../small-time build: h60d57d3_0 default: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ options: @@ -185,8 +183,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -206,10 +202,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -231,6 +227,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../EmberJson + build: hb0f4dca_0 - conda: ../small-time build: hb0f4dca_0 linux-aarch64: @@ -240,8 +238,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -261,10 +257,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -286,6 +282,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../EmberJson + build: he8cfe8b_0 - conda: ../small-time build: he8cfe8b_0 osx-arm64: @@ -294,8 +292,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -310,10 +306,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -334,13 +330,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../EmberJson + build: h60d57d3_0 - conda: ../small-time build: h60d57d3_0 integration-tests: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ indexes: @@ -375,8 +372,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -425,11 +420,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.1.2-py313h7037e92_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -498,6 +493,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../EmberJson + build: hb0f4dca_0 - conda: ../small-time build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl @@ -528,8 +525,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -578,11 +573,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py313hfa222a2_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/msgpack-python-1.1.2-py313he6111f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -651,6 +646,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../EmberJson + build: he8cfe8b_0 - conda: ../small-time build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl @@ -679,8 +676,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -723,11 +718,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-22.1.1-hc7d1edf_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.3-py313h65a2061_1.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.1.2-py313ha61f8ec_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda @@ -795,6 +790,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda + - conda: ../EmberJson + build: h60d57d3_0 - conda: ../small-time build: h60d57d3_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl @@ -802,7 +799,6 @@ environments: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ options: @@ -815,8 +811,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -836,10 +830,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -861,6 +855,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../EmberJson + build: hb0f4dca_0 - conda: ../small-time build: hb0f4dca_0 linux-aarch64: @@ -870,8 +866,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -891,10 +885,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -916,6 +910,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../EmberJson + build: he8cfe8b_0 - conda: ../small-time build: he8cfe8b_0 osx-arm64: @@ -924,8 +920,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -940,10 +934,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -964,13 +958,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../EmberJson + build: h60d57d3_0 - conda: ../small-time build: h60d57d3_0 util: channels: - url: https://conda.anaconda.org/conda-forge/ - url: https://repo.prefix.dev/mojo-community/ - - url: https://conda.modular.com/max-nightly/ - url: https://conda.modular.com/max/ - url: https://repo.prefix.dev/modular-community/ options: @@ -983,8 +978,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: hb0f4dca_0 - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1005,10 +998,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda @@ -1030,6 +1023,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda + - conda: ../EmberJson + build: hb0f4dca_0 - conda: ../small-time build: hb0f4dca_0 linux-aarch64: @@ -1039,8 +1034,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: he8cfe8b_0 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1061,10 +1054,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.2.0-hef695bb_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.3-h1022ec0_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.2-hdc9db2a_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.1-h546c87b_1.conda @@ -1086,6 +1079,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda + - conda: ../EmberJson + build: he8cfe8b_0 - conda: ../small-time build: he8cfe8b_0 osx-arm64: @@ -1094,8 +1089,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda - - conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 - build: h60d57d3_0 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1111,10 +1104,10 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.21-h1a92334_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.52.0-h1ae2325_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.2-h8088a28_2.conda - - conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - - conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + - conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + - conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.1.0-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.1-hd24854e_1.conda @@ -1135,6 +1128,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda + - conda: ../EmberJson + build: h60d57d3_0 - conda: ../small-time build: h60d57d3_0 packages: @@ -1691,7 +1686,7 @@ packages: purls: [] size: 7077 timestamp: 1756221480651 -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 +- conda: ../EmberJson name: emberjson version: 0.3.1 build: h60d57d3_0 @@ -1700,8 +1695,7 @@ packages: target_platform: osx-arm64 depends: - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 +- conda: ../EmberJson name: emberjson version: 0.3.1 build: hb0f4dca_0 @@ -1710,8 +1704,7 @@ packages: target_platform: linux-64 depends: - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null -- conda: git+https://github.com/bgreni/emberjson?rev=583a72d#583a72da339c6ee252dce157af4689601b645985 +- conda: ../EmberJson name: emberjson version: 0.3.1 build: he8cfe8b_0 @@ -1720,7 +1713,6 @@ packages: target_platform: linux-aarch64 depends: - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 - channel: null - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 md5: 8e662bd460bda79b1ea39194e3c4c9ab @@ -2982,10 +2974,10 @@ packages: - pkg:pypi/markupsafe?source=hash-mapping size: 26009 timestamp: 1772445537524 -- conda: https://conda.modular.com/max-nightly/noarch/mblack-26.3.0.dev2026032705-release.conda +- conda: https://conda.modular.com/max/noarch/mblack-26.2.0-release.conda noarch: python - sha256: e475adff7f6af009de6882000366e5ec8eea42f8887dfa0d75e66e6742a51316 - md5: f92b43fce0b4baa1805e4050e4f23b7f + sha256: 3c2fceb89cefca899dcd7c8f26a6202acacb2a073e4cb2ef365514a465d01dcd + md5: dd13667299b9b66b8b314dc8d95b54a3 depends: - python >=3.10 - click >=8.0.0 @@ -2995,8 +2987,8 @@ packages: - platformdirs >=2 - tomli >=1.1.0 license: LicenseRef-Modular-Proprietary - size: 134400 - timestamp: 1774590287794 + size: 133798 + timestamp: 1773780198354 - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_1.conda sha256: 78c1bbe1723449c52b7a9df1af2ee5f005209f67e40b6e1d3c7619127c43b1c7 md5: 592132998493b3ff25fd7479396e8351 @@ -3008,72 +3000,72 @@ packages: - pkg:pypi/mdurl?source=hash-mapping size: 14465 timestamp: 1733255681319 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-0.26.3.0.dev2026032705-release.conda - sha256: d1f64f62a3377f7aaeab624bbce2754b3579145723a14af7af8fd972e0105839 - md5: 8d12cfe0ecd21d51ab30abe1090a1fe5 +- conda: https://conda.modular.com/max/linux-64/mojo-0.26.2.0-release.conda + sha256: 4d7047466c13d92b1c8eb19c6d203a8503afbd2b1ad63eb5289a8f4bbf4d2945 + md5: 61318988733a695066b39704f6e08bd2 depends: - python >=3.10 - - mojo-compiler ==0.26.3.0.dev2026032705 - - mblack ==26.3.0.dev2026032705 + - mojo-compiler ==0.26.2.0 + - mblack ==26.2.0 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 90721218 - timestamp: 1774590358778 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-0.26.3.0.dev2026032705-release.conda - sha256: 703d46f5488c40c4bda2e918d60db78881ec1ecd9ca1abd40a712c4780add6f6 - md5: bf6b51e9437e33862fe76524bb5313ff + size: 89753715 + timestamp: 1773797215278 +- conda: https://conda.modular.com/max/linux-aarch64/mojo-0.26.2.0-release.conda + sha256: 12c7912b10e3eae7681c811bcffd50b3f5338affd334b944329e29ebb8aa5ea7 + md5: b8ae42f497c077d8473006280b4dcbfd depends: - python >=3.10 - - mojo-compiler ==0.26.3.0.dev2026032705 - - mblack ==26.3.0.dev2026032705 + - mojo-compiler ==0.26.2.0 + - mblack ==26.2.0 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 89361202 - timestamp: 1774590521634 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-0.26.3.0.dev2026032705-release.conda - sha256: 56d6a9ab464a77db3d6633fd2a838a15054977f1996622255a21dd553b75b2e1 - md5: c043a91acf25470be327b6aa1dd304ca + size: 88482960 + timestamp: 1773797133971 +- conda: https://conda.modular.com/max/osx-arm64/mojo-0.26.2.0-release.conda + sha256: e35b8d34564b30189c5a985990466b4283f9e1d897baf23fe9ddbcbc9283459c + md5: 12e4d8397c451b7c8a55ff5a759ce00b depends: - python >=3.10 - - mojo-compiler ==0.26.3.0.dev2026032705 - - mblack ==26.3.0.dev2026032705 + - mojo-compiler ==0.26.2.0 + - mblack ==26.2.0 - jupyter_client >=8.6.2,<8.7 license: LicenseRef-Modular-Proprietary - size: 82147210 - timestamp: 1774590421259 -- conda: https://conda.modular.com/max-nightly/linux-64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - sha256: 637b049734efaaa916c4dc9024a450469a8895134b53aef48184788944462572 - md5: 7d36be1e7df9bc08ff1c2f096228413d + size: 81534498 + timestamp: 1773797099755 +- conda: https://conda.modular.com/max/linux-64/mojo-compiler-0.26.2.0-release.conda + sha256: e53f30d72a65e6b0a67745e6988f978d8f6ecc14531420631c9719eb9c7b9c2b + md5: e3a673daa0ddf3ca6af297daee4ceab5 depends: - - mojo-python ==0.26.3.0.dev2026032705 + - mojo-python ==0.26.2.0 license: LicenseRef-Modular-Proprietary - size: 90011677 - timestamp: 1774590363178 -- conda: https://conda.modular.com/max-nightly/linux-aarch64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - sha256: 79f4911434eeeba8a350e7c61a8321b14633a186ad6eac85454d1cfb27067bca - md5: 1d02fef89633e597c202eff0c9bffa48 + size: 89091679 + timestamp: 1773797216619 +- conda: https://conda.modular.com/max/linux-aarch64/mojo-compiler-0.26.2.0-release.conda + sha256: 411c03f7c144546627935f9f9723f56000930cba15958863bbae7a9df00694a8 + md5: 875d529084aac8f9ac3d725bc28c5b5b depends: - - mojo-python ==0.26.3.0.dev2026032705 + - mojo-python ==0.26.2.0 license: LicenseRef-Modular-Proprietary - size: 87242384 - timestamp: 1774590530705 -- conda: https://conda.modular.com/max-nightly/osx-arm64/mojo-compiler-0.26.3.0.dev2026032705-release.conda - sha256: c31adeaa56bf6aca01b7e43f348a502a30ccf64912fd8e1526b0279a78504ba4 - md5: a79142a782f2b26e5e24b38bb06e099d + size: 86460703 + timestamp: 1773797163008 +- conda: https://conda.modular.com/max/osx-arm64/mojo-compiler-0.26.2.0-release.conda + sha256: e82cb7ce1a756876a233d364d5397adca5ad7e20fff5204c1c7e93aefe4549b5 + md5: 96e3ec50a2ea4abdb9fc4f3f89dc874b depends: - - mojo-python ==0.26.3.0.dev2026032705 + - mojo-python ==0.26.2.0 license: LicenseRef-Modular-Proprietary - size: 68208824 - timestamp: 1774590421532 -- conda: https://conda.modular.com/max-nightly/noarch/mojo-python-0.26.3.0.dev2026032705-release.conda + size: 67499721 + timestamp: 1773797103208 +- conda: https://conda.modular.com/max/noarch/mojo-python-0.26.2.0-release.conda noarch: python - sha256: 3f0b5a9281829f4f8a7b6390a608dd7afc2590d2a0015c231f88298a9a6beb17 - md5: 153a21c2953a61d6c59d1ffc50d5e169 + sha256: 2d9e350cfe7a0ae5d96dea13c082b09f21aac8ac4caa3e5def6b075930348fa1 + md5: 67a4fc0d47e84d3a91c4f12cc912c7ac depends: - python >=3.10 license: LicenseRef-Modular-Proprietary - size: 23197 - timestamp: 1774590287643 + size: 22936 + timestamp: 1773780198161 - conda: https://conda.anaconda.org/conda-forge/noarch/more-itertools-10.8.0-pyhcf101f3_1.conda sha256: 449609f0d250607a300754474350a3b61faf45da183d3071e9720e453c765b8a md5: 32f78e9d06e8593bc4bbf1338da06f5f @@ -4077,7 +4069,7 @@ packages: variants: target_platform: osx-arm64 depends: - - mojo-compiler >=0.26.2.0,<0.27 + - mojo-compiler >=0.26.2.0,<0.26.3.0 - conda: ../small-time name: small_time version: 26.2.0 @@ -4086,7 +4078,7 @@ packages: variants: target_platform: linux-64 depends: - - mojo-compiler >=0.26.2.0,<0.27 + - mojo-compiler >=0.26.2.0,<0.26.3.0 - conda: ../small-time name: small_time version: 26.2.0 @@ -4095,7 +4087,7 @@ packages: variants: target_platform: linux-aarch64 depends: - - mojo-compiler >=0.26.2.0,<0.27 + - mojo-compiler >=0.26.2.0,<0.26.3.0 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad md5: 03fe290994c5e4ec17293cfb6bdce520 diff --git a/pixi.toml b/pixi.toml index 25ac5dfa..193ddacb 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,6 +1,6 @@ [workspace] authors = ["saviorand"] -channels = ["conda-forge", "https://repo.prefix.dev/mojo-community", "https://conda.modular.com/max-nightly/", "https://conda.modular.com/max", "https://repo.prefix.dev/modular-community"] +channels = ["conda-forge", "https://repo.prefix.dev/mojo-community", "https://conda.modular.com/max", "https://repo.prefix.dev/modular-community"] description = "Simple and fast HTTP framework for Mojo!" platforms = ["osx-arm64", "linux-64", "linux-aarch64"] license = "MIT" @@ -40,24 +40,24 @@ version = "0.26.2.0" backend = { name = "pixi-build-mojo", version = "*" } [dependencies] -mojo = ">=0.26.2.0,<0.27" +mojo = ">=0.26.2.0,<0.26.3.0" small_time = {path = "../small-time"} -emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} +emberjson = {path = "../EmberJson"} [package.host-dependencies] -mojo-compiler = ">=0.26.2.0,<0.27" +mojo-compiler = ">=0.26.2.0,<0.26.3.0" small_time = {path = "../small-time"} -emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} +emberjson = {path = "../EmberJson"} [package.build-dependencies] -mojo-compiler = ">=0.26.2.0,<0.27" +mojo-compiler = ">=0.26.2.0,<0.26.3.0" small_time = {path = "../small-time"} -emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} +emberjson = {path = "../EmberJson"} [package.run-dependencies] -mojo-compiler = ">=0.26.2.0,<0.27" +mojo-compiler = ">=0.26.2.0,<0.26.3.0" small_time = {path = "../small-time"} -emberjson = {git = "https://github.com/bgreni/EmberJson.git", rev = "583a72d"} +emberjson = {path = "../EmberJson"} [feature.util.dependencies] isort = ">=7.0.0,<8" From 53dcb195b8f32a1edabae79580413881b82b61c2 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 19:41:49 +0100 Subject: [PATCH 16/27] get the example to compile --- lightbug_http/address.mojo | 2 +- lightbug_http/http/parsing.mojo | 2 +- lightbug_http/http/response.mojo | 2 +- lightbug_http/server.mojo | 10 +++------- pixi.lock | 6 +++--- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index f5461a65..e135e7da 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -692,7 +692,7 @@ fn parse_address[ if host.find(":") != -1: raise ParseError(ParseTooManyColonsError()) - port = parse_port(address[colon_index + 1 :]) + port = parse_port(address[byte=colon_index + 1 :]) if host == AddressConstants.LOCALHOST: comptime if network.is_ipv4(): diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index 61de8107..c41f4f90 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -287,7 +287,7 @@ fn parse_headers[ break value_len -= 1 - headers[num_headers].value = String(value[:value_len]) if value_len < len(value) else value + headers[num_headers].value = String(value[byte=:value_len]) if value_len < len(value) else value headers[num_headers].value_len = value_len num_headers += 1 diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index 93e0585a..efaf7fe8 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -303,7 +303,7 @@ struct HTTPResponse(Encodable, Movable, Sized, Writable): if HeaderKey.DATE not in self.headers: self.headers[HeaderKey.DATE] = http_date_now() - fn __init__[T: AnyType](out self, var body: Json[T]): + fn __init__[T: Movable](out self, var body: Json[T]): """Serialize a typed value as JSON and return a 200 OK response. Parameters: diff --git a/lightbug_http/server.mojo b/lightbug_http/server.mojo index fd24301c..6d00e075 100644 --- a/lightbug_http/server.mojo +++ b/lightbug_http/server.mojo @@ -291,7 +291,7 @@ fn handle_connection[ try: bytes_read = conn.read(buffer) except read_err: - if read_err.isa[EOF]() or read_err.isa[SocketClosedError](): + if read_err.isa[EOF](): provision.state = ConnectionState.closed() break # On keep-alive connections, treat timeout (EAGAIN) as clean close @@ -331,11 +331,7 @@ fn handle_connection[ provision.last_parse_len, ) except parse_err: - if parse_err.isa[RequestParseError](): - # TODO: Differentiate errors - _send_error_response(conn, BadRequest()) - else: - _send_error_response(conn, BadRequest()) + _send_error_response(conn, BadRequest()) provision.state = ConnectionState.closed() break @@ -380,7 +376,7 @@ fn handle_connection[ try: bytes_read = conn.read(buffer) except read_err: - if read_err.isa[EOF]() or read_err.isa[SocketClosedError](): + if read_err.isa[EOF](): provision.state = ConnectionState.closed() break raise read_err^ diff --git a/pixi.lock b/pixi.lock index 690c6590..761f59b3 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1694,7 +1694,7 @@ packages: variants: target_platform: osx-arm64 depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + - mojo-compiler >=0.26.2.0,<0.27 - conda: ../EmberJson name: emberjson version: 0.3.1 @@ -1703,7 +1703,7 @@ packages: variants: target_platform: linux-64 depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + - mojo-compiler >=0.26.2.0,<0.27 - conda: ../EmberJson name: emberjson version: 0.3.1 @@ -1712,7 +1712,7 @@ packages: variants: target_platform: linux-aarch64 depends: - - mojo-compiler >=0.26.2.0.dev2026020205,<0.27 + - mojo-compiler >=0.26.2.0,<0.27 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 md5: 8e662bd460bda79b1ea39194e3c4c9ab From dcc813ae283ff9fee2f8f864f69b3683a84eeca9 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 19:43:05 +0100 Subject: [PATCH 17/27] fix warnings --- lightbug | Bin 0 -> 389784 bytes lightbug.mojo | 2 +- lightbug_http/address.mojo | 4 ++-- lightbug_http/c/address.mojo | 2 +- lightbug_http/c/network.mojo | 8 ++++---- lightbug_http/c/socket.mojo | 6 +++--- lightbug_http/c/socket_error.mojo | 2 +- lightbug_http/connection.mojo | 6 +++--- lightbug_http/cookie/cookie.mojo | 2 +- lightbug_http/cookie/expiration.mojo | 2 +- lightbug_http/cookie/response_cookie_jar.mojo | 6 +++--- lightbug_http/header.mojo | 4 ++-- lightbug_http/http/chunked.mojo | 4 ++-- lightbug_http/http/parsing.mojo | 2 +- lightbug_http/http/request.mojo | 2 +- lightbug_http/http/response.mojo | 2 +- lightbug_http/io/bytes.mojo | 6 +++--- lightbug_http/server.mojo | 2 +- lightbug_http/socket.mojo | 6 +++--- lightbug_http/uri.mojo | 2 +- lightbug_http/utils/owning_list.mojo | 12 ++++++------ 21 files changed, 41 insertions(+), 41 deletions(-) create mode 100755 lightbug diff --git a/lightbug b/lightbug new file mode 100755 index 0000000000000000000000000000000000000000..c100cd56a9a3403546c877a6051ad054ef9d7ac1 GIT binary patch literal 389784 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 b;`kGWjl~CVkWK=tTOCsH{C}VPJN*9uca-3! literal 0 HcmV?d00001 diff --git a/lightbug.mojo b/lightbug.mojo index 775de2d4..2ae1823c 100644 --- a/lightbug.mojo +++ b/lightbug.mojo @@ -1,6 +1,6 @@ from lightbug_http import Welcome from lightbug_http.server import Server -from os.env import getenv +from std.os.env import getenv fn main() raises: diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index e135e7da..a20c45e8 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -1,4 +1,4 @@ -from ffi import CompilationTarget, c_char, c_int, c_uchar, external_call +from std.ffi import CompilationTarget, c_char, c_int, c_uchar, external_call from lightbug_http.c.address import AddressFamily, AddressLength from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsafePointer, c_void @@ -15,7 +15,7 @@ from lightbug_http.c.network import ( from lightbug_http.c.socket import SocketType, socket from lightbug_http.socket import Socket from lightbug_http.utils.error import CustomError -from utils import Variant +from std.utils import Variant comptime MAX_PORT = 65535 diff --git a/lightbug_http/c/address.mojo b/lightbug_http/c/address.mojo index c9b42fdf..5163f287 100644 --- a/lightbug_http/c/address.mojo +++ b/lightbug_http/c/address.mojo @@ -1,4 +1,4 @@ -from ffi import c_int +from std.ffi import c_int from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsafePointer, c_void diff --git a/lightbug_http/c/network.mojo b/lightbug_http/c/network.mojo index 9d98bdec..ca50043f 100644 --- a/lightbug_http/c/network.mojo +++ b/lightbug_http/c/network.mojo @@ -1,11 +1,11 @@ -from ffi import c_char, c_int, c_uint, c_ushort, external_call, get_errno -from sys.info import size_of +from std.ffi import c_char, c_int, c_uint, c_ushort, external_call, get_errno +from std.sys.info import size_of from lightbug_http.c.address import AddressFamily, AddressLength from lightbug_http.c.aliases import ExternalImmutUnsafePointer, ExternalMutUnsafePointer, c_void from lightbug_http.utils.error import CustomError -from memory import stack_allocation -from utils import StaticTuple, Variant +from std.memory import stack_allocation +from std.utils import StaticTuple, Variant @fieldwise_init diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 5e73b4e6..9ddfa006 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -1,10 +1,10 @@ -from ffi import c_int, c_size_t, c_ssize_t, c_uchar, external_call, get_errno -from sys.info import CompilationTarget, size_of +from std.ffi import c_int, c_size_t, c_ssize_t, c_uchar, external_call, get_errno +from std.sys.info import CompilationTarget, size_of from lightbug_http.c.aliases import c_void from lightbug_http.c.network import SocketAddress, sockaddr, sockaddr_in, socklen_t from lightbug_http.c.socket_error import * -from memory import stack_allocation +from std.memory import stack_allocation @fieldwise_init diff --git a/lightbug_http/c/socket_error.mojo b/lightbug_http/c/socket_error.mojo index edb0609b..4d6de853 100644 --- a/lightbug_http/c/socket_error.mojo +++ b/lightbug_http/c/socket_error.mojo @@ -5,7 +5,7 @@ Follows the pattern from typed_errors.mojo. """ from lightbug_http.utils.error import CustomError -from utils import Variant +from std.utils import Variant # Accept errors diff --git a/lightbug_http/connection.mojo b/lightbug_http/connection.mojo index 03c8c5e6..ab894839 100644 --- a/lightbug_http/connection.mojo +++ b/lightbug_http/connection.mojo @@ -1,5 +1,5 @@ -from sys.info import CompilationTarget -from time import sleep +from std.sys.info import CompilationTarget +from std.time import sleep from lightbug_http.address import HostPort, NetworkType, ParseError, TCPAddr, UDPAddr, parse_address from lightbug_http.c.address import AddressFamily @@ -31,7 +31,7 @@ from lightbug_http.socket import ( UDPSocket, ) from lightbug_http.utils.error import CustomError -from utils import Variant +from std.utils import Variant comptime default_buffer_size = 4096 diff --git a/lightbug_http/cookie/cookie.mojo b/lightbug_http/cookie/cookie.mojo index 75a6395d..40994228 100644 --- a/lightbug_http/cookie/cookie.mojo +++ b/lightbug_http/cookie/cookie.mojo @@ -1,5 +1,5 @@ from lightbug_http.header import HeaderKey -from utils import Variant +from std.utils import Variant @fieldwise_init diff --git a/lightbug_http/cookie/expiration.mojo b/lightbug_http/cookie/expiration.mojo index 2c24a573..25d8573e 100644 --- a/lightbug_http/cookie/expiration.mojo +++ b/lightbug_http/cookie/expiration.mojo @@ -1,4 +1,4 @@ -from collections import Optional +from std.collections import Optional from small_time.small_time import SmallTime, parse_time_with_format diff --git a/lightbug_http/cookie/response_cookie_jar.mojo b/lightbug_http/cookie/response_cookie_jar.mojo index d973bb96..6feebf36 100644 --- a/lightbug_http/cookie/response_cookie_jar.mojo +++ b/lightbug_http/cookie/response_cookie_jar.mojo @@ -1,9 +1,9 @@ -from collections import KeyElement -from hashlib.hash import Hasher +from std.collections import KeyElement +from std.hashlib.hash import Hasher from lightbug_http.header import HeaderKey, write_header from lightbug_http.io.bytes import ByteWriter -from utils import Variant +from std.utils import Variant from lightbug_http.cookie.cookie import InvalidCookieError diff --git a/lightbug_http/header.mojo b/lightbug_http/header.mojo index 5ea430f8..71ec44bd 100644 --- a/lightbug_http/header.mojo +++ b/lightbug_http/header.mojo @@ -6,8 +6,8 @@ from lightbug_http.http.parsing import ( ) from lightbug_http.io.bytes import ByteReader, Bytes, ByteWriter, byte, is_newline, is_space from lightbug_http.strings import CR, LF, BytesConstant, lineBreak -from memory import Span -from utils import Variant +from std.memory import Span +from std.utils import Variant struct HeaderKey: diff --git a/lightbug_http/http/chunked.mojo b/lightbug_http/http/chunked.mojo index 4673a8de..3fde56b7 100644 --- a/lightbug_http/http/chunked.mojo +++ b/lightbug_http/http/chunked.mojo @@ -1,9 +1,9 @@ import sys -from sys import size_of +from std.sys import size_of from lightbug_http.io.bytes import Bytes from lightbug_http.strings import BytesConstant -from memory import memcpy +from std.memory import memcpy # Chunked decoder states diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index c41f4f90..08db2336 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -1,6 +1,6 @@ from lightbug_http.io.bytes import ByteReader, Bytes, create_string_from_ptr from lightbug_http.strings import BytesConstant, is_printable_ascii, is_token_char -from utils import Variant +from std.utils import Variant struct HTTPHeader(Copyable): diff --git a/lightbug_http/http/request.mojo b/lightbug_http/http/request.mojo index 0b9295df..2332d386 100644 --- a/lightbug_http/http/request.mojo +++ b/lightbug_http/http/request.mojo @@ -3,7 +3,7 @@ from lightbug_http.io.bytes import Bytes, ByteWriter from lightbug_http.io.sync import Duration from lightbug_http.strings import lineBreak, strHttp11, whitespace from lightbug_http.uri import URI -from utils import Variant +from std.utils import Variant from lightbug_http.cookie import RequestCookieJar diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index efaf7fe8..89e48ae6 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -6,7 +6,7 @@ from lightbug_http.http.date import http_date_now from lightbug_http.io.bytes import ByteReader, Bytes, ByteWriter, byte from lightbug_http.strings import CR, LF, http, lineBreak, strHttp11, whitespace from lightbug_http.uri import URI -from utils import Variant +from std.utils import Variant @fieldwise_init diff --git a/lightbug_http/io/bytes.mojo b/lightbug_http/io/bytes.mojo index df483a2e..0b1cc8df 100644 --- a/lightbug_http/io/bytes.mojo +++ b/lightbug_http/io/bytes.mojo @@ -1,9 +1,9 @@ -from sys import size_of +from std.sys import size_of from lightbug_http.connection import default_buffer_size from lightbug_http.strings import BytesConstant -from memory import memcpy -from memory.span import ContiguousSlice, _SpanIter +from std.memory import memcpy +from std.memory.span import ContiguousSlice, _SpanIter comptime Bytes = List[Byte] diff --git a/lightbug_http/server.mojo b/lightbug_http/server.mojo index 6d00e075..fbabd983 100644 --- a/lightbug_http/server.mojo +++ b/lightbug_http/server.mojo @@ -20,7 +20,7 @@ from lightbug_http.service import HTTPService from lightbug_http.socket import EOF, FatalCloseError, SocketAcceptError, SocketClosedError, SocketRecvError from lightbug_http.utils.error import CustomError from lightbug_http.utils.owning_list import OwningList -from utils import Variant +from std.utils import Variant from lightbug_http.http import HTTPRequest, HTTPResponse, encode diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index 92fa7312..35816a14 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -1,5 +1,5 @@ -from ffi import c_uint -from sys.info import CompilationTarget +from std.ffi import c_uint +from std.sys.info import CompilationTarget from lightbug_http.address import ( Addr, @@ -59,7 +59,7 @@ from lightbug_http.c.socket_error import ( from lightbug_http.c.socket_error import SocketError as CSocketError from lightbug_http.connection import default_buffer_size from lightbug_http.io.bytes import Bytes -from utils import Variant +from std.utils import Variant @fieldwise_init diff --git a/lightbug_http/uri.mojo b/lightbug_http/uri.mojo index 07b0a13f..539a0370 100644 --- a/lightbug_http/uri.mojo +++ b/lightbug_http/uri.mojo @@ -1,4 +1,4 @@ -from hashlib.hash import Hasher +from std.hashlib.hash import Hasher from lightbug_http.io.bytes import ByteReader, Bytes, ByteView from lightbug_http.strings import find_all, http, https, strHttp10, strHttp11 diff --git a/lightbug_http/utils/owning_list.mojo b/lightbug_http/utils/owning_list.mojo index a49dd2d4..0bf1d840 100644 --- a/lightbug_http/utils/owning_list.mojo +++ b/lightbug_http/utils/owning_list.mojo @@ -1,10 +1,10 @@ -from collections import Optional -from collections._asan_annotations import __sanitizer_annotate_contiguous_container -from os import abort -from sys import size_of -from sys.intrinsics import _type_is_eq +from std.collections import Optional +from std.collections._asan_annotations import __sanitizer_annotate_contiguous_container +from std.os import abort +from std.sys import size_of +from std.sys.intrinsics import _type_is_eq -from memory import Pointer, Span, memcpy +from std.memory import Pointer, Span, memcpy # ===-----------------------------------------------------------------------===# From 8e52d1324fe797029c8f46ee8effb2b824d0f010 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 19:43:17 +0100 Subject: [PATCH 18/27] remove binary --- lightbug | Bin 389784 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100755 lightbug diff --git a/lightbug b/lightbug deleted file mode 100755 index c100cd56a9a3403546c877a6051ad054ef9d7ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 389784 zcmeFa4O~@Ky7<4(IlLS|#R4V80;QBA6*H0I9yJcKa$6DW5^XPCy6nY=UJn;<3!$P`Ioi+cXw=e#K5OWnEm{(txP zx$*gIzWeOG*4k@7>silw*4k^Yz4y$q^FtIxr|_p|3ue3DTTxz6!r4=lQEZ8985#G- zC(L|s=Ij(Xdg-4t@}-9^`z7i8D*-by(q=x8cIjzXe6LFnDz4vTMe%GBAS2_6hnGKb zG3em*eoA0T?xr_5IW^izN=J~GlzCX_uUVab0b9Yki^qyS2Y~kVs84DLblFO07={?ct zO3x`I&dcwC`5Ty)>}O;=oSpH=(s_?P>^d_zz2$pc>1~z*<4=COBkgF7L9%imAmb^VtA7cRm6or+Q@`IC5?$#9JO z_hze?@;wfVtZ!f&KGRFtBM~#b6mzjoK~Bp3Z1VS0j>{%tH^G7VbOspk@0EF8%8v*9 z_UsO0C!9_6Ec(g3rO}TroFBd5=|>mvTmC}XBp=qNcNO0}E9R4`xsHz#f86-Y9UKd1 zGBJL~-WZ46hzPKJV$pnX}XG%UzUfLE#rJ&dR$O z-5Gz%CGiuSHT{AtxK8TRc~3n2*zJ}9(UdXV&s^d;<@OJG4=>G&&U^ClhnFs%_r#M+ zpPKh*^o-ohCm(xw@e_H`2@9V{d~!awl9m0${3o+6>||s=@xcIrZBUNvza>lA;EWqT${Dw%cc(MX zPU4Jh7*#51pKgnA#ytX8D6V)R#Isc{s|xd0-l;Oo=?mZa>Lz3N^5*!Rt2XV@DJLw- z9iXdzFnP2Sq!z2xm7vl^-U-sG*sQN}9!j7s5pqmtc6I^FXWC9PgH{3Y`< zWrKa?3{BGRD43yj7SGVe?R?FdzLoUtduO`N?VhQ1HqF$+ca~ka_By#HM+D)-=Oxjd1=-Bp7(0Q^uI#2`1Vqr{)K7Uao6#=uQyCr zR=hYZ&Rh5WZMPcIe(bH3hO)_ZMSog*il!frGiZMx?kwHyrDM6D&VDaVr(ZQq^Yzx0 z6|1KO;Wh+O){abrHX5Chd-L4a!a?U~c7jU`4eH=D3b_8UC_@_8`Sq;$@ud!(e;0-( zE$%Vhk_MfU7N*m61-(?Pis-7v9KSG0PXwvjyPN~SqN zlwkDm*OtQZr7`5Kh4SbluIMC9_Wr5O$_Co*cMkg*(mKd@nC^zI<8fB4)o_FDE6P~v zL2J*>>EV={pHV6G*Xc@TowKcxd<2k>ICv|(jpN(SZR5Doof==lai#l%_?I>n=yhG# zgS4teJyV>ri;phtjPllY>ef!vV!gG7qIFK0e=@<4c8IWZoncSA!g5cYR&TA7dx|eA zoTjCCYi8XFXZWF!$Vea5lz}dYZguE_O3$=2;k{Yt)2-;z zV{9UWuei?&-O!wH^acALEXV8|iy5X&rXJ2VvGq~MM>Hy>_xwR0`?W!@_4w*FBfss( zby{zLUOOGg?+9I~y-TMVD>>e-(+=yDS1b)fOOIeHM9v1}J9H{_iaKZS)oEv_qf%$> zJvz#!aJEi)ezs1(dFdm6Q8x4#6r1PRe13n;?-1gTV!MHDWMScKr#;*0vS*=1g|o+S z%$NM%;H#8wd`9h4VXu!;>d+7GF1%k!3+Fy`%8J>^q<4z+wqo-rA2rM{rYi?Iuj(&o z4nuy1-&SmDF$CG9%nuvJ*q(XRl^@ZQvj)A*m=an(LZ@h=3kv0+98q$WqM~U^(F(R= zw&&SiV0)2mCEF^t)og3nN~VR)3sA$}3{(|e$TmfH1KTLJ(QKh?W7uxorgRrhSI!kq zuOg2oomutM4Oim~BfFwBN7|k<1M?Y7K1Y$yk+xUKr^rbopQp*^#|}qG>r{g#^;F8# z%r=%y&sKsA`Uo55rF?&Lvo5WtB%rR%Sxz_DS{)U$#hyRUww!PhrmxnZ#UrC|e(Mx- zUEEe>$<{7?n$f&!ztOn)q;XZlN#iX$HyOM1lZ^%DGJ6<0vBgX4t@hH+Z1>V0)SdXC zVVtrrk~ED=GZp-H>gNgLEb8?;(E@j(D>&#i>Z z(cRi-(%Wmrc1ztg#;@5V?W7JHSbG;~ptl|9uRrIdjwi;i-V~M{Ii*AN8T~fttnW&i z61RhRW8+tCdW*7@GSEvNXn$7G-bq*^*Yu;k^V2Qt!(Mmqbhmd>2U@V@ZzC7c$FG}x z>u4|Tl=3JVp``tW<5CuTuxG}iai#X{-cEbhvK_s|p0s4%R{F#^(RH2e4EoS#Fxc$% zkEwg)y4x?mu8#7RcGh#P6!j{BRF91k?#>zLbopCh|D+3|RDieq{6aL!%FIUVQpoHKCFhjSB< zg*WH%h=SK}osHr3Hu4n56A9l} zYt`&qlsfy4ggSfJ5R<(IX7IZbro%?K5>~@GumYySGMEBO66%gr8cjzx`kD@}^D%X= z^fsO7_cDD|Z!mpXt2cFS*O@x@DyB0ArLL80A2x*A+OP{p$jcYhy`$u%9T|N!lX7iN zs1x64tG5#CESLC5m;Y4j@}ES9TCs~`&Hkn1$U8Q1_RVbb7Pxdme4uOjB;$~iGhLm@ zmF|vfrq;4B8f*Ia0`rq zl`tAsz$jP_C%}y`0@lDVSO!DkIv4^=U=Umh17R@?fCbPOrW!QOkg1+=%vZnepRcw^ zo#>sfp6!{h_8yt=h2?tM=78t9HE1 zs&$~p8ajQJdUk%JRqIK$YTf1dJr!2%aHUmi+hWy@ZntV*R9m$ZHCC;?`tG_Td+)9j zSxfzsGPF1P)~mb0BmQ9sLkm+l3q)aRTJ5WO%Pd$%tUq~Ly@J(RAei17W*dhmvWHu zkaCgok#hQ)GB`8Gs`aN>wLRw@A=LXtb98JjvVLDt-gC8ABWwrv zyV^;ITMzS*Ss`IYI2`Zy6JEi7y?@^Eejodtz42OCPrOz_o1aMgD?YAKXX@+0ALzp$ zI7{38b+fmo9q`spAN1CYg@v<~p~mE`w6(h5HcYp-Pb^is*G;oeh$_`VIj;Pk-Qo({>F`DtK3bQrkLIv`PYuF%)dDTrnE;E{?`zS{8Z6pK zbW{9OdxWC(rYlva0u=4*P(|AMPmS?+l-djQRYv+$_E1HWI_HS+HM#5_zF??DYeTP& zM9--E0=+yMWYOBG+XsHHY^XPcEMGNIqN8+WrQRCep{t}-#t%f z_u;$N`7Mw9kUnf_m>+$4`WSLPY^>6~d9E(aFFX4~<8|~ab-_7uZV~bCA+1O@k&At) zE_M@T6d7@`jDE)N>;b>ca&7GY1H={oSK5NDhL8`%-*U+$*jC0lxxaAyrV)fc^{g(o zP}+pXv85u1;Z?K=jq_Ce|0RXb>e62IF+bfxeYl%=Vpq4g)2>ZlR`tH&fxaj4XYKg2 zqBnl%jreay{5R=86uJGk7S2y5p8dc~ZELsVy_V*g+TnvUHGIf@{>$g}Wf+z2&Mt%2 zMfk|CpTm#TcdcRHdN#iKt%ca?F00mp4z{9$htWYh{$_{xi|5v?x#yOkawA)Z^>MWm z9W;0Eoz{i!%`5utw9ex*wXXh|S`GKrlb~Q@^lC>Nc4dNZRcmPB^v-D7*W%}=4c0At zWmxI&(JvGF)q#Hbp)31|MZ!%`=9QwoTr}MGEcSpDU(IFj5`?@ z@>M1|_un+DVK*vE-tm)+b;Gq$@4JAME=zJs>! zpj9jIQI^ajZCASf&UAYWKDH~R`#x!2H9hRDr01#Y*HiCz6W-YtzN##F^d4QBv}fk~ zAnjRUGL*Kk!;$v&Kj_{Q9sMW5CsIa}*k)nddaxP&dA_E;c70WEkfNQzZk#%(R8cpy z&-S?V%C@<$R{Tsq>R9Snzw+#1X3dT)vNxHXeo*#n5I-n;J;eXXUJH>?_8N%)ll>yZ z|H)nf^WYmW2fhU};V)o1w82#PE0_e|g;w|hoC-gJG4Nv;1$V&+_&XR1{{VyFpI`vo z4-N1$*zZ%9{WsVKKZnimFr*F4J_;LQC#->ALHxYzlduw=hUM@KEQ9A^G1SMa_I&6A z^PoS>g~MPDydGx3kuVdEh8gfCm=4FmIdD8og%e>4yd5UNJ75Bw46X17Fb>`Yr$P&i zg?GakI15I@WEcf!!wK+5FakaZ!{9?O6wZes@DUgU7r{Wd7zV(l&=)=h4e%N0@UF{# z4)((puou1vd*B*)9Il03a6N2?ufaCB2_AxPz=QBDcmVzaHbWcS3x5Th;Ja`)`~Wt> zk6=Cg818_(U@iO|tbu=k+u@&JHQW!kz|UYM{2Q!*pTlx^7;c0|VHxa%>)=M$<&7v;(+@d~y*rMhhwWy0bE$U-mS=2{QTGX7=7Io1Xi@NZ`ouIF4kI>hB9j3246{@d09ip%64bs>31?uax0DavVUwvJ_L0@;)p{qOJudB1S z&!}UJvd-QGd*E?+9QMF2*bCcXKWu{zcnBJ1*4Yn2Uw8lpz-AZ-_rf691Vi9%7z!I< z7_5g8a0i?KYhe_ufzfa~jDgiK7H)x4VI_=%70?RHVFKI;lVBN4f$Lx@EP-?2N|+9d zVFoOKnJ^z_!DTQ9=D}Q;3-e$OTn4jXKFov#Fas9Dbhr}Efh8~%u7fGC3?{*iFaefB zE3ANVuo6y%TVO1#hB0tEjD|HZ3f962a0iTl^)L)J!ce#yhQKBm1oy%~*bD>U0qCo% z>o^Dxv26)6b+o~D*}uuu(FKpo{*9)N9@s1UV@w_W&>{PwrVhj1q`|gjw5cNi2Fm^@ zQ%4XCk^LJ?9icEx_Crh^5paU+k2G~e!D!hZVd{v1v9cd*>X-`SWIxE%VTB2@f4!+A z38u*Yb*7F~I7jw}n>x~AhU^ELIx=CF><=?_l>bdx2Kj z*OPykD*KG3rNd0wS4{RC$hcYyK2~d9Lfzq#gu1pe#^dn6zNk*9J6e-a*S;g6u5OyL zVeU9X=^Ko_(uQeHU*)4Dm#^{xtidOE7gobxLGe{=unhhJmcX}Q9{d>Qz+F&$mES?} zRsH}|;h$g<+z-W9`3#D$@;4X*KZjB9Fce?qC=_3%69&PrU;sP`#aB5E`)O;>z&3au zHbecrw2jaQHbQ?`1BbzCcs;CyBVjol4a?w7uo#Ym`EWeUgA-vcydCDiJD~U~lVK+O z0Tf^5E|?B2P<)lUVJe&jQ(!Vog0rFcDnEi&_#hNtPEhU*$y@1lPboxE2P$^-z43*PsDzf)3iOH()<}3--caz#eFW z$KkJF7kn4C!w+B^{0JU`AH#!i7d!xe2b%A_;pcD%JPd2$ zQCI^z;db~HtcEAy7I+#~!ZWY}o`>a7f1k@&@quOh_J`}>FjxYwhb!SoSPVzQ0(cY5 zhvVQfI3DJ~i7*%54s+lgFbhtGneYcN1KtJGp#{!?cf(XT3#Pzim;`6T1o$Ipg%83w z_z;{5=fha|2#kS?U^H9|qu^3F0X_vI;4?4`J_keL3K#-kgh6l(41{Z809+4!;cL(U zH$m}L-hkq(yamNq`2`eT#RkP!`4tpj38{ywzJ^UQ*fQMl%JPK=IC)^Idg4OUO+yYO-N_YlV!1J&i>XRvd=mX23 zKU@cg!4h~qTnR_QVmKNWz?)z`90!-d@h}fggt_o`m;>*CS#UDUgg<~8@Gh7REpQIJ z8>YfpFa;(Z9)_t2rMetBXELRu_JptY+`xn!bj*4uhet(}AzokFVE@uh)aGcN|}@3tz7t zU#|^c?-0J;L43Uf_(%4y?ZDTo#n-FB*V~S-SB$VSXd2X;C2`dYhV0a5oHrO)v=Vg@Ldc2EYT*7aoKLcnCW1q1s?SY=^zD3--X{@Hp&& zU9cCn!+zKX9q2M{S1502kTnAHN8BBs3VFE0NR#*Y!U?rRix4>9f4P)ST z7!7M+6s(04;0_o8>tPsdgrRUZ41rBB2=0Y}uo(ux1JL(7U-|zPU->b7Wf?mz&>Pf( z`2lLdu3;+Um0H1Dfoj1S9mj{O1)syiI?ZnIw-p@KF=a~$_KYtFFeZ4d1@XPU8y8f+8yCbU{BB(EJ74EJUk9J-yK%w)3FCq_v958!pQ_)D3w}2)$hcZR zzRGvwf-YZWJmXB?jSGG^E;x}fweQ9SzZ)0)Zd~xYal!A#1@YbgcRoYU!dL#bRJHQ;#urHV^y7_!s@KD7$PcoIXSGng&DyJMF z71z7cpX*J!sZ{ z%h~Vz9p%4?cRtXciuJlBig1%|iH^Cp_YBBG_Bx-*yk8$I_wC8Up0z%cSzjU8G~iey z$5;a*Sl(Zgyc@Ze%x%wp*=KUcZbO}e=bNJEGH-j$XeI4$jDy$s$lUJ{w%z1K;ze@* zEzw?er>O@LmS<*KFYoy+V-EP9ZD*w`4KJMSLs~Kq{SWZzE-=SW7fD`+-8gA&@OdXuZy#J@a=bGEUn(KvcYnUz^ z`%c4jouX{>D^yAs>5V0`ip=W7g^^R7^Zkdq=KF7DzI^sy`f3-FMpbc0pUp=JUW-iR zeS(UQl_iNIbX@EC{l+Q0N2+|vd!&Efv^7{aS>C&TaNmhq(RV3hkyo^@5nryg{g2V zOo4GQ30h$SOn_FH1mj=|oC;H6ESv*lU^xEaiG54Md$w%Km^IQ2v~x>VjH?ud}N{0;m4nb+Sr!BFLA zFUC$6&i*6%_tMUxrC&1VpZWfEUDZkzbFxTF-od;2`y|%i@Gjy_=JoY@WvTJH*EaD? z*I7TLE(N@a9XYqP)9za_I#OqB>WHAucqzfgK(l5)V9<=^JXdM-tut47GOmPWuo#xW3YZ5gVGi5^GhsDk4wrE|OocTt3D!a@+yR-xWvquWun|VV-7o?+ zLFRB7_rf6935!sD<8_P}b`3oBtiEQbzQ1`YAf z=SoIjn9uJ3mFa&17P?!nBAal5k5ilK2fXv}CM!{4V4O3tYOoFj60ZxTh z7zdfdWwgSnFaa`$%a{aXUbGVE-FbL+tK$r&u z;4hS z4%fjRSORYFX9?tn#A4qDXf z4q4RUZ5B1K-J%ZbvZzCkTht*v7B!&PqWbq+R6mDBH5#nQ`oCtLc@OhzzGiOCDdyFj zW=>5n^J%U)&%A4f>v_^~*uz|l9(Ww~!YT)W zPlf5S&ph)?m?QhlGtYxE&zyJoT1%K`UdB9g=9nL;WS)5q^UQZJ&%80AF6{ft1|`B! z>J@{pn-}l$Rdz66yAdCt7K*P@18d-RSP844_$pgq8LWgQupZ{YMwkP4!%Wx&#aG!2 zQ(-eqf(M`#9)#kn9D*^h4MxFs7y-MW_$tR?5bS{guooI&KkTQib-*@g;JHXM^o4t2 z0BnSTum%RfY8V15VJIwzVXzEFz+yN7=EEqM2cuywjDa~Y7K*Pj6=uRXD87mnro#j% zzDg2Ig()xvrotpR2a2zf4y`Z)im#Fhr@|~KzDf>^fw?dm=D{eq42rLk4&Mku~YIW)iu=%CH2g#B;}?1j~^2X2SQVGZnpwXhxTfNiiI z9)gYVAlwZPz$VxX_rkrf88*QKa5p>%8{r{X58L1l*bZx97p#HD;da;qt6?wP0{dYl zbifK|kom^Y7jA?BunY#mbub8)z!10+hQeYP1`A*W%!d=;G8hH(U^L8yF)#XJ9;Z&FfV_^=Afw?dm=D{eq3{HUg zFaj39Fjx#j;Yt_+OJERO2LoXl41gPQ>tP$*0o!3M?1DA$INT0< zU^VQ8TVOw|gbr8%4LtuThrVzl41i@Y5Uztkumpy{l`s?*!!TF?BVaz90GGiimH8*Oe!$!z+^2 zz{+HG*p_5M=9r${+ z_CS7zek& zsjwQx!tF2y*1%|33!~r;I04qf2-pb2;BFWSn_vjs3xi-Y41@<@06YkN;UQ>%ZP0=5 z)DHV$7wm<{VGrzq$6+t*g8i@^I$#?#;5!|HzVILnfCpe8Y=%K_FARZAFcj{FVXzTK zzj`7jF>z)V;SGvG>?4ol!1xDKYmGMEB4!X#J@6JQ0j z!b%tix4@~e8pguyFb3AZXjluQ;0`ze*24(c2*coR7z&$U2;2*UU^5Ja2Vej^2z|fv zk^f)uk^jOta0m0tBU#6UvA%aUGe+MTVbSi<`8CxLG`7_o&WvqX>F~IB`TThzn zNK*`E?PP9!l7C951ofb;ueytaa1MT071)a#(N2xke6a z?#LQBfgh57AYlzR;}1aJo7H2y8&uDlFdc{DwMfRDjk?vFXcIMiG3NsaR{#THJ`94( zUJjE3nj2F`)8FcnUPDKHKuK`Tsv3D63YU>r<=Q(-EM zg>zsGOo!1h14hA2I00tC2$%!IU@i=Wc`yVngF!I=W;Ky<wc+M)Z285x(DV=K2ckzQ-WWmyqxQp>{OQQp$z@Zh5P-C4JS=X z%SqEMdp5BKY;4%;JlmP#NPC-S32(E;9OKom7-hVg=NKl&q&q2ZN423!#;l!d(lBN% zW7P7Dr&G$-Ggd9-Dr@sO*FFkyu6^XgGZbIqy3A^Ge_5g4in7i+ER_kvMh_b*2o zQxmUzFG-#>c92F5Y19r#gJ)d>^KoQA8uIK{_C|7pI(fCU+;t>~W8% z*~ah1&f*!6JZCcwSTkCl6?xWS`b)jCL7pXfo+G_McuCun)>wC1MxXD+#&VA5RQn@G zB-R);%X%r>Zz>CUJ~mv^_y&1PI3Ef34KkH*XCn#s4RVukCnX$maIPDP&M8+}J9`5% zuvfUlp;uQ6w?@K!i@H)M;T-Pt(2uL7_mqS?LRJ<_-yiwljoYOhkZb&y(!NfSwB!N$om$fzZqW!0wtXgYHJp``VR z&S2Z7yUv*h{~I5#Ii~aCx8lr00KbRoz4@(k=3xlG+i9CSi@mh2m0sGHCA8Dh=1F@e zZJo4p(#Fxg1)yWnzS(Kl)}ULnM7N4>RtL6Y0X*L~U!^`Zd@OpM>8f{mSJ&$g2-kuw zYQ<)e_J)>%8Jesq-(g*#b|x%PzfM}9o=RDucBL**znrr`{VIKddLmqYj@xe+B%AK+w zKaw&W%6u8-z#Jc;Osb!xESbyxFOg^5FxC=deoNd)Wr>cp@QlG8K#l6P6> zY-bSRSnGD{P1!YyZlta7rpIe;BdzYX1?pIi$10<3pXqO~#f@g(25p(7-Gc7KF~6pj zwL9x&%{F+gYdz||);!kjY|)RjjUfHN;pCmTg{1i`zw7;&cN2K+bRKl4Gj`GdbVJJ z+P`vvdZuK7s;yg~_LVJAdp9mnPnR!H+bb5RN4G3czo=fI9@)M?ZL3+J9_2&#VosAu0I>z|=vHSqj@d(KH z`ms2F)A1O{`1-LpKhrVB(2u1UO_4M;U`}Z%(Kyk5)E_ zujTMHm-0=E(sTJU`PRh@zIkEg+ZPtTfe~MIHura18w?qrZDlQe{KZ#HtdHMO!dl*} zk3ZJE=6^VA{)h1mftRC{w6~ZuBj2BxOuDijz0^rr&sf&|pT5I6FXx?BbfyzuZEmoV z)`LGO>)?y+o^E%9*qLW#&kLwqMVln+OWIj?RpwPl`_a+lePO=U2h5AW7uhfCeotf# z%vm~fo&Ocqz?Ai?WlhY@==WCEsrOs{=Ga9io}09mVE)^_!>*)tw5opfrMY>`fdf`jnmER<=YG+<=YI3 zv5P)R+SWyle2)R2X}^uN;Te;W{`osH$Fs9ZzL~P|!Z%Ya==r^Ovo0GZ~f0gy> z-MVzztxLTIZ`P9bVXbyOYqxvZPW?0O9(CymGLW^?k20s|3*^;cP$oYwZS0`-rxm$~ zZk{HcURhI<_(uu<1!?RVoE{zgkD<@_4I&bk=USxiTGVmi`a?JCc6i?dn zJr2)trw>VfN0Y}E!vtsFNcu$y;`2@R453 z^Yaex?qqHBuPg}5o(pMCD7%qu7 z^1}6=8W=BgVkzIa3T`Qmyb$lyEd%6*u6gpAJuqHdWa+QudW{#a*FGTLK)F0PFkVDd z>1K&n9ChJ(e;p8Spj_@97_W`+?sEHt@SbujLI34i{`X2d8UE*iWf;HoVi^vRG8|AA z|9r_cFWzJHz-v+#Pm~H`?1n} z>{ca>?}G)0;nOy-&U@H(5IYz)g0_ctz0k*8wPIL&)$=RNsyFd};6Et-MA`uifX(_l;H3b`ahfb~<5^{n&86k)tOdyu^4~T`Kf-UGkHc+UzV@wbcT=VR0`kq zNboYX#2N63_4vd(d}77al454;(ARc&-49JiHk#|cC{HuBZ#UNsyZur<*@n!XLMEPa z+=CuPxXVUlS(vP(F~?+*=e%jMvVrgK1xuN1-K9*zcVq4L@KVLwysc%W_cq0kZ`Q;X zPB(U2KD74?{ct{ImaTV%7rD30bd^zIEM=tg#2+4YEP`I?T!P=-_gV`Z2z>C!TMnRh(ADZ@hl zOZEK|?1@9Z7jVO+$Hm{$I4<_$X*oE!KhHSVKm>>6!B%)5RUw zlk0e{AaW?grxd&2BK9AfzthA;&xzT zBfa}-pG4-7Zo7~EciV5`eKLvvrm1u+;{kH5lM$C*N9sv9{Z%QWxzrKyH;m)2ZSyCP z|5p4j$={wE`)d8pJ=biyQF%X`>)W}0IN!k-SYNjtcBK98oFile&!pb_lT!L7o8+aK zycoHjpE9BZy*pw4_lD`h_|}H$V|7Kp?8I-GRiuWmmA=|1 zd=*XlD#i}$dSh#_O`e^IUHDMs;B5E!K3O_CNxI5k8m8|zxb%B|)J4B)pGo-tMK+`Zc}bazK0k`D?eVE!!k*ZJU3PaKez)j( z0AV+v%N{%O4DxlxL%%%rU^vI*9YWEA`_KcA-g|tQ?_+z!uaM`IUy|V{7PmT1< zD)U@c&=yO&hpAULlV;>d*ZsBdo}OG^o==GWCEm)rW$66a-|!uoxk~q}JCF-{W-Pkv zqRyRam_7-e6WK|c*Gv7wCVK9dafLgj&dE8cgE|=}vajYln7XI;;9uFB^y+;4Zpn-D zUXeo({dn;U=6bOPO`xL9D^^s8j8_&Lt~p*w|DsvOq8_6UCutog9Zx>-#Q!^`{T!)YqNUFY2rJ&grZ1 z)g`>q-yQyKSNKKrL!9B`<1U6j)-e59!sijb$LMNKD)zp?n3|Oh{M^RzJt0T zVFuQR(ZrK)PV10w7CPS@esN>BG*Z-}@u_y${mw zeTcr$eELH8svGfDe@egUb^1-4=r{e0e$yNDn_gW(dN0z4qTjTVe$$Ken_i&bR7k(+ zdHPMoZ<*D@^m&g24l#XU2r#vW`ty9o&vbr{k^V2=0m|~B|Lbk)PVq7ww;D{xrs_>y zF*;Lgl)LX6@IzBu&}@^Z-@6^($SE7AeRBCr43KX4E&UxSzYeQeTR5t(HWGhh&kZhr zF+II zSY&4o@2&pO($|qXw66=hV)S$AcfvQM{rcdvsV@W5cBcC#;|7@q)x>qgf7|M=J2So^ z?G=O5rmY#6c9$pLOUQSgE8mIkwBx@a?VL-~X3SZ+nD$t6U1u}%pYAa~-BGQ3`uDt3 zE%~P95Ag5Uqy#fB+r)J$w@$Wv3@3@A4H_7GSt@8MbzaTv}Nw1gw z$tCH1;q(`;o!%|3^q%mf_c7_QNqTLA)9d~g=}mW~H`kNiCemY*^!5%;Px}_>jdG=T zFX?$~lpk{Qw96hFu^FF3{DW}(Eswvjwcc@I%;yl}n4eKkA_ukcr^%BiEssr`PMz}D zyZhdEr1=srM&DN}{=2Mg;PmaJUm$%wuGxZpvLA3vLLY)t2`9GcI>LFD`;EMsdeboT6F4Vbm}E^ssx={gHEk}3*AMhIwuSPx@u7opCSoYozYY-N-kP zrS8#B`^y`SNzxZ<9&)K~7S5QO_-56tZ6kIk`wG6#J?@1#FJ(^a;KUOa=R zY)85D!IgfNQN~q1RY+gvFMebC^ieJ0hRd#z!!@>2znpVPvl1`UA9?03&*kx}ozEOk z&-o2=a&%Sa^7U2pd-pjSb^ChU&jg)ebjtgM$UsrXmCjd~doy>0j2-+svv5RdEBAE% zJ((9E{$-HOi!>FsmI$RZ;d95vxjJRCz0#~21C%?(*JuqgYo_dMndft-(OaHfEAPno zlgu6IARYSQ?zuub`ra1u70+CuM(6w>sgv?tPV`g8tL@Q>7MVSN$|^;<)53G`3@=w& zEfKoX@uVm7zJuNKzGaOfxhI`_?sq-clKe_qBX}Oz;_#|k#T;-+(-DIoMjG~5#sROC zezC69hVC4WaX+IWPc5;DS`Wut*&NhgNmtU5Iw;5Gyj-tO>h=UPV-LTbCg1#RDK3_I zs;`ViUs{+`I*xoYx4@}0f0`k>67MR<(97+BrySRDFD@M&TWXJSj?I0l`0d1|yf}@y z3$Iwv$)CgLpV1Q?`l3gV4Q@SFF6gnMn6;uc=Bi@8kLr28{Fa_Ri$7zmTsPZC zo&_rMKh2|W z5!}N_r=BTQTSd=E+YuysMmrF~7z_6!*IB`J4hOmP%4xGh&>PMzLT@Cz{tCi93Y+O8-~#?(f-mr*ZnGi)jquJ|w=RBk3oRMo+W3 z>J)4KP(Sy-=5TCmqkN7~pIq}Df|;i>g7T7bRj9XC%E3Z;$lShvan{{$DxVQXv-TwA zP((RMntwtLV!x%nd&=T{WWNE~-$~xzboT#)Z2#g8cT8l@v;Ql}{$FaYE&El-bgMh< z7NO?fTJ|%3S?BWbQ0$_x(IK;C_CoInq95Y~@VW4(4F$C?`GTWuV@84X8I4 zzbh~E!9rThRgph8SIzpRxoWPLxoZB9_^MGoyc1*Kd5m@ArrXe~IMyHAdf8fJLrNCl z$9c0R+3$4jGDS!C;8*%#!#k)4VZO>cx}C3WI=t(3-lWqyOZzS*x(-}aEs9@6<}vs|dxgLUf>!aCcSE9h1R z=Z1OeH}VwOJ;*W1OX6wA2Ob+BI+w7`SSwC(8K#q%R<|2p9Ot*0Gn?_F{}*!Jmw^MB-g9p}&HUPW&W zx_wGv!?dw%7Pd^bo0m5v&s^S^{0pzd+?8z4Z*56_o6T-0oIQM~F*$rnLvs9-#^kYM z9!}mh=6lJOF}Ebgk9jj$8M7eyu=DrL$>uSela=RNla&v3UCd1tMid5w#zU2{vMT^OjR9$!S}T}hjGig|vgnIHE0yB@vO zRXO#R^c|tJ6QpSmGhTkJMpwHbcKR@L-P$N?&$Y|Ac1u_y??__D3HR4fDc|_2Qz0%p ze)F};*C6flrR94z*HylK8CPg)k-ZW7FcJH3?|bH|+uinH&menX<9I!GVpjZ1n^;e- zMAju8EYIhW=kv((2y?XBxNn&Yc9i+2zVH{^(^#qZ$aAE--pkzF%jK!J-Hj|moHjsL zwMT5gAX#2=olE36!Zz@ly9UW|Y+T?a_AS^pj<9mg`@ZR# z5!6Fx`Cas9=3lG)(2FbiGZ$@Gux-nLd-!9oBW))(O2!cU@M)^(n;ZRHWhs5{zR^nX zIPt+KTlxJpzY|X^Z_dEKHO3chQgq%W;?G_!{!3#njlYWDR||`5FS*vA`Ry?1_nn^O zjotR4z4xv1^z+OHd@t&qtY0c}6uJMOQObrphcG9aeMf|jd3j2y>6}v9*{*-r_WJ85 zlbBbI9em{_-Ne#kv?Xhw`$PGk&sm$-eh^T;cH!bFx4Y&T?5k(Y*hnAm!t>-J)-}bq zr?2~KrHa0^p=jDE()P4NCvW(6eT*NXw}bP1D|zKu%_l%?4Zbe2|nMs`~=G8ZraqDv?Y3HAIHd? z6yC#m+9RKF*t^@g&nty3)GP08rhi~0?GDPRigNP*$?wZ0Z(%np-Db*X6=mV)t#jt@ zN_mS^j7|lX@U>JnXJp8D8Pt{=Bayx@-3>oE?si zdt@>T-R&aYMg3K5!;n)0@)`D?zf*q~d-T_&bnB5>BsM2Q3GaTCxn9C>C}k6wJ#I=W za(bBa9q3yJ`X=d%jK1U=19dL&C-+>`xgvk3%m(Y+l0iDR&Yh3IpA6Ky0Q63A>Ybtw z?211pWr|Muxn%8>GxE-UdzDkxiL}E~c9YS!X1%_oz$d(WBF~ZURP-gHi<8j7L)SCr ziEqw(Hr;04GweWSCc@ho?_9%r0G*6QtXX85a%h;+oy6Ga?>R4P!dCe(7VD#^9ij2+ z>P3-LWG?L?3wn-^w2F6T4vix`&snPQ`FR$ubwuF%7lrl7*w=xh`6tbU^W*uKq-E^L zU$1A5lJte;{SEP5-}$w)BRAL_`jK6Qge}yElzh#(H{q`9&Fib2=YwgpS<6~)uHzbY z9SP<-znx(py6kL_?Oc8$I+cKK-HoqG-LkssmiSg2FjC*~Z;*H+T^xR%&tx!zWu zNoFq^Hzk{}ddhr0$1>dO4|wwS&{gwxxjkHr-T%LC50Twqd$`YO5AUYjC@;o~#11tL zkjX6rWFqy@BNOqFvXRNT{7d7W%^ft(X}vf;6iHj1$oRuN#vf$vQ4;mQk7s{Io_CAQ z4!?CXi;~OU~w4Zk=*YADSKlJNogHm7qARu%b@4UUd@Ubbkx$FO-TUdXCagJ|n zTe!wxS^kZ@ILBwK;?KCoRnO+S##No|i-GpVop)(pUJJQ;c>ih2(z(b-+8ElG*{ff# zTblH2m9ve>AdidAW&T}l%;5SrPD#|lxK<1D6a5zdFq^t3eI|L=QTjYT=f1>NT&W&j zE@N!`G?$E9knzy>{u463g1+8z1$~u#57gP^AombM)e(KV-bo6q$iZ5cr7s{|ffB ziu_gFbQOC#s_=4q%6rW&dm7-fr>tS|Uu92UyoPHXKz z)yrgzp7I{A$hhU%0GB=edu4nDecgv14A$4d_VnieAv$|P^x+CRdzNy?p1S(b1KR(A zedtSkfN$tS|2_8f;5BsbO1ipn#5L{dd;isa%PaN!6kp{%>A!U{XX0A^^+nl<&HRJA z|90i^hi{VI;Qo<6??5^GN9d-fe>6nqjnO}9!2h|de>C-C|ELLH<+A=!tgC0jv)L*$~zbbD=pY*GaGye2#`c>)MF7~U;XC0UIt5TikgKY;%??S(- zX2yroulkH*(s%l|X;ZPryjq)h<+|~oFJI}O4fcyaq}~p;F$3Gg zA>{Kv(k6-zdp1|cvk*P~OauK*FZwT@KBX`3S^F@~FY6(A+1eNbll3~z(3kDUr~Nmx zQo55(f$_8G;$`Ip2%tcy1nCVO6>l#dkK0DKW8CL=YbRUBo($6M0@?EXwGML~nu#Th^X`vW0%m zDhq1~UFeIC!q;X#CV48*kLi;BdblB|WFFg!AoKd)b6on~q*q6Jb;g|;A4Z}htByX? ztQ#84_)g*MOv1=LR`@90CFE7=^qTYUt+|K3T820Mtw|M|CUW00cPW5lak>EKdJSLV z=i3bdwy2yhrzANXu_a$T)BNbrAx$}kAtm>+t(|19T0BXqT07LN6?!*JpX*&XeX(-l zgKf-9*ruD<_cC*jAG=P`){f$Q(XMH8i&jhYR>0y{tNWDhcSj)zW3F7`nl#p z@-T(G%JW*;XMVx{!>n1+#`wb#<{tQORW^8@eSbmOwXg<;$VS#_XroMzP`0wZ#Zmes z?UbEIw@%NQfj(H#3k%Q0nZMxf&)O*iKR?QWKIKBjiib=$R~fjr-1l*VzwNQ=SN9J! zy?yerU4J`yZ0FY}U(p4YRDZE*QCAy_ICI-5;=c^U0=}`%Xq> z9{&H>d-M3Himd;&!;Mh~0y@GVDnv&e9VIMdLf9f8M8$mH=ibw#vs`taXMVre^Lu@NfAs6~ z>AL5hTes>|)v4uHeOt+x>t@DWDz7)n$CBQzkgxj;rLSo;EKH1R9Xq*OpB96=GndtV zZuHu2b3a;F-Ovvg;N05xFan>xNvTxeeDgocqDr0#|qrvdA^E zp>k4; zLT_H9!o-8$G?)^}Sk?*bOyV$hdHcy@H+7pl#kj2P2T4ZmhhC%C2d;=^?#vT?#x0MX zyqIe*aP7mN8uVP$I&Sb{U+CmTz3UBL^v1Noj}R{FEJ7z7>~kr)DJgqP)! zu8ml;GK_Jk5ax3ZVG{$e6L&pd#Yn?lmdChXbbBLr7-7-eQ;yxp^+qnaZj^^M9`^lw z>|mtNDEE`r$vrkJu)KkIlwupB-OnU6rc0tB!49bsSsnj#rcse#dfw*-|vTgjh z+v`6?noq{Y8)D;=vGEhw_)Db2bJ+NE*!XkUco%FuYHq~Z<=A)xHvT>~-UScpNr9j69818}E*-v?uRV<}_M6Y|g&5CtMA4t_W%Pw+~$IzkTq`2dnbb#;?3s z7NXW(Irqc0uf zwebk#kGmVDFYmf{&BNIEdTe|zc|4f(C{!D7h>f3gM^v-%spQ*9Y)||S@-%4*S5!AM;Z~9jd#GtQ?T)l*!V$gA`LrfkBzUx?!?C1W8*1=C9{s}5OyQi zJ7DAMu58o{cXd7A1&kPNm|ZTU z7E!lVbiOdOC@hIRbuX|VWSn6RzA&?>;T?igiyGb{m|4{DM!``<4TlNdT-0!o;LxIm z0}L|_Jz>`yW+(0oOB9@16lMx$7KL47mamx7X?B?)-mU zZd6EneV%^~eU41HNUGw(_@?f40tw+ZE#3bC9-C z_Fj`ZwdKsXH{uxA&SY<_cC7gv#kX?1Lt^%vroKw8T)M0@%$sA*+VsYz2^GCdeyZ#x z=aFVn_emXA(tO<|?s_5qv~Xkf3EpYfsRxR}T=mOR6OCMtoOgJk->TA^)?G3(()Vqt zd+8-Ir_|T&DZ9P$&&wvU&)^Syzx)|zn8q;n>Eb8;RbS#Q{>bl7%vtFPnZL56^5nPY zWi1l-mEivnHe7t|9Xpn+k#A9o+sz-ol6$@mi7DI8^<6twtqE~8+cV0|o?u+d;o5oD zb;g{WQ{*``tH|YwvHYG(31@z)BC~#rJ?smbD`UwC%*FIz?SjO)UA=kVmJnx|4>hBz z(zQAFWrnoe!<<%yq;DB>O_ILr+@uHdYfIdm#m9QQp3Jk2cYAY6$)^^S?*Wwej#A!9 z`wI3TI~+bgQGBx)P5<}?#=g&)$5`raxu+s1?c+)N{0Sw!z4%z+!+NjHyp(lb_)`<` zpGM<1i9eF#YPM`lR#~6qO|gShXwN259wt(E461Cg4?k%ncY*TnHXdY5(ZRb*Y!f@c~$b3V`H8(jP} zv4QmOtJ}ctFk|)M@a>83V+RND%Va+`*^8_m-_jh7F)E($RHflx^KIKqXP&EO+S#_* z+Oo}NHEff<=ZK~5>bBX_vd!-tZF3{>65AA?QS!_GO{MirdColY>^Z)@{E~c->%sXt zp}b1&G-dER%AolDr5$|vy_pXy;hQ?jOL-RQCGWeMcalB*R)Xj7G0*buXGp&iY=LhY zSa%`*DEnvQd&)Qaf%t@-ul=0!JZBzp4d{LVou%YSU!IpvyCy!maX55H-h`4qapZX% z>!9)`Z0h47&*hr}{P7W6L%cbgsK?{6(@o5sU|$vAQ$NR@wd;qwtauv!RGxF5auA4H z4&^co{qnq6=E;xV-|3As{Qh=ESXmx=!?{M^rTi$i9%+Q_2~*pS#kR$7+&wI8?d9W* z{A;JV@~;~mlHaqXQE}q_u5W}J5qln{Of1L7@%j7(6S8`5bA?PxLgysz`BPJ0{?n03 z`7b3U=f6Oopp>$kKcRE)d5QFqNaKX8&b?32N89W2EX$j4+R!W*&7L z&l3ZW04>l*?0UTwWcq;YeNa{(c+og{5 zP*;xh+I9QUcCt=8Y)=d7cx&#TG9hI~+ONIz&7`j;HYRg$QjWf3-TYDh-?rFyKC^OG zk%3<%HkW{nVB@Dot8Wy6ePy}5%Qj9ZyXgNEkiLVw>}^=X$A6e`+sC(k;b8yA^6|On zd3=2ONnzym^jPYX=hZ$YlNTSjyvx2E7P0mZZePXMu2z=+^9RarL*^eBQr_Re7Yc=c zh%YqHh_d`288h06|18(~RaUghw2fy3C(5p3*V*vL1OlMA!c@RtVQH>Kh~^~aC8f&RP9N89TMMqwK+pE23! z?P7iCw83G#e;Rq6MqMz$6_%4h8f=1c|$sHgPv`_cjHIyO(-F+Q-f43-*y*UTGIXEZdhh|2OztB~oUn zTT9xBk6`TEN&24|@)vwS7wa4hzvp&4eKV=YoznNaXYohAQaR$|BzH{Y?zF!n$!zZ| zchJ(Oa#uOaeP-!Pw!VSMOm>$0z|yC3!=2^cvGk?b`o=iR{n^r|a?_pVUbOV}v-K@- zmiv>XPvurR%ROo7yWZBf!C7vlrBCHvc9vUW>AS(!x5HU(uBA`q_B+enW9jQ}>pSQy zH^I`Ua^E`3jk5Hm+WJD09PR42mOhnh>?}9X(l@}?*WOt!+0v(SS2@e|w)Cah`jVaH zuCVl}+;C^Pj+VZ3Ti+OGxl1g4DmUF(F51#J(AKxWS+2gNPvurR%l-H#DZhhkeH)zR zz7@HzRPJSGxe`m?U|Zh~XSuH|eJZ!#S?*&?-w<2hL1($YS^8A&TW7iLmcF63zK~=` z`+LpOr*e&*<({+j4YT#Ncb3~==~KC@oaG+3^bNQ5B|FRg!P2L4!=2?8S^6?;ePf*E z?zi-*+;nHTsg}MGw!Q_tyLuxo@52Vl90)+xkLM9PO`}rBCG=JIh5_`fjoHwRe^a zvGl3jRnBtfpOO0DR$E`Pv)l=h`%2}8JIfum^xbCb8{;hZ4@;lQO?Q_2$kKPat#5&| z++QtyD!0;E?k!8-9k#v=&T=nX`c&>^XSq$5zB_GwJDlbIXz5eA{myc$Eqxw!RSO^G|+n=~KDJ&TCJE#+6`_B+d+5xG0>w)Gu!mOEJa!*_OvTS{0 zoaNS7`c!VZv)l?x-$YyA0%y4gEqyAt(phefrEik0Z-cYkbW5Mgz3eQPY3ZA6>)YWh zcc-OK<@P(vjj;4hvGpBvmP@nrsob~Daz0C+eP(55$PJF|Z%<2~$~AVD>tgAfX2-9+ zvs`;ipUPe3EZ4%)H{I5k>@3&N(x-C6o#jF;eKTx*W1Qu_-zfEg%1w8cJ0)^=-ec=q z;4JqqOP|WEbe8+l(s!?|Z-cYkeoLRqz3eQv%hLCITi*_6xxZNYRBpes+$)y8`)qv& zo#p(NK9&2{S#G_hZ>Fs;q`#y6{g(NduQ3NMYds(>{ZUPAB$|`AlYPR+1(=BEJ${^ zv+Q3)_L3mkG0w7EM7C{^>~v?@O(NSqNOpm<>{B9pS&-~XXW5k^+bKwPgR|^IB6~%U z?90xwb42#4AlV(xveQJiXOQfEXW8G0>~Df(4?4@~LqnyuoWETX{ZUP_lWGuAlYPR+3_O#UqQ0Non`M7*)>73W1M9(MD~wCveTVq zQ$=<|kn93y*+h~3Q;_URXW6Sn)*mFh!CCflk$pZ$_GM?;)*}0Ikn9d;*+wG!T9E91 zXW9B9`{y9pgU+%)tVi}QL9*XE%bpV19YL}o>5le$L}dROB-_|o_8%hqw;<2-zS2@eRBeMI0WRsm`w~FlFgJg$0%RVo%{|J&D<1D*TWWNfMo$f6AxX2z1l3m~| z`>@FVD@b;wv+M$qJsKpt!CCe`kv$P4`?9m_M3MbANOp&_>}ZkwE=YF2v+Qq0_WK~& zgU+()BKuR2?6=OcK9LPs807yBbhO`VM7DmAY-4BHP9hr?B-`Fuww=f}43fRdS+9eEL~gFiUFIzJhRA)Ta#uOa zJuhH34~oaLStxj(90nzP&*k^4#Ie(Nl^LgeoJ<@F2?irimRZnCq!IU?6q*D2iZ zEH_=`=BnI-&T^R|_f2Lyb&mBc zkISCNd^6RBZ=8Db&6I~VFMPjdma>*DpMGvBdz7@}o2hj94k?^#>|avK{w0BHU$eg7 z&o>ioS##BnZ>N^9W@=MNi=0w^?f7=8GxzyJSXahgCV_9K*nh}3 zvsc<{RGa$e6SuzZ7G)BCAf#nZ9>0(V53IbOaJkoBgW1&In*a7avL;EsAF93wTVRhp zp1+mnU;Ng}dOqu=%URp=tJ3U@y*~58A2rSR_UV6Hn)RqF&BEud>{=tuKI9$#r)gGm zPrI5nCTqrvvAdTvz1H#VhuGKE@=YFV+H2a^I@u!!J6RI;^Y*olbz!!BHNn1`eIbuf({#9jPCB&Nm-0LD>H`8(TyC>MED3YouGxTIu%xP`Nxd$4a;6nr@Gu znDf6b%?8z#X6`vF``1Xb(x?9CMoifR%E2M($!PY+ z^$;d|SV_5TR^NDKH|25}^?sPkVBf0oy~D=adslUqy{jmf%c%Fm>Q!CaMm@ZYvX?*| zF5iAgxm?QrRbia9E_+zV5gHC!TL+Q~73A?x7xL8&%e%Q!Znf)9o3*cUCbK+G_ER{^o=OMYvWKnx+<_i> zuDxHfw2!IszX5xkx@Au;BX@oM;Jpi~m(icyztlcNJ{vN3nX&`%*I;DZVH&ZkJr^F}t{XI3_e^j;iuO0{S zyKA;{l?~YM-{IXKJnr=Fa^84Te;2M-t)C9If$Gn__7~p$%O`)`yU(8&uEx zxc}h0fBOsXzUEiH`;YZ%+kSAqKlLl${ZNf}UsmJY4^ke<%UtrZ+J2>h{bv82e82s~ z&*ysx*MCjEzx@mEe&?@z_rccls`5R(#=CF)55D`ZUwHSazw+JZ{=&Pr`<3tB>16ft z9#P}n$Nj>)|2XB(e6!%<+l3ImVQ|wI4`tndy^H(2%f8dWb)FFsIyj#1Vq8u6-o8)X zWFvlb!?;C86yMP|bj|cNjEx?3g)20op|L2hVN1Ssh;Nr#bcrkJWgU|8dG1T4#O)~0N-A8sM$T*) zQz+kcHuX2*o?mmG#cRYR*ygXHy_Y?xThXSyscl-Hp!)n-Gfz(yo>o(OyXU_IRaL^kxLj&+@n$}$~fbpTKst@`W~xGcJdwU1$(Zy z1UaWMkHzv1+!JWCXL0X=aN17V&tk&&g=!swz6-Oj$5#4bGbz|kGBzYYzHv4EP5qrN>bJ*5s@l4` z?X+!ZAb#?^rvATNe4c&(pXGm$-`F@{`zb$f`#*TBST>{tb^lZv^nSr#e`R=v-Thi33m*lL0Pc?soeQkCa zw|s5MUpZeOIDf75=et2kf7zG9&R;wICf7*62{qDh2XU;*liKkT-?Of9Deh7K^WX1- zJmctlSAV{YnXS=uX+gTYq3L1<+5NSoOG~YnXdD|oCRU{`_t?d5!-rqnHq zDT|}(bAC<3r2KIUd}drp-kYZr0fUE`c-si&llE|l|&h{G67i-FuzI~}X~gK{3!*WU!r;A`UFP)9nnEp<+Z zO+S+k_#Hv%Q2m*Xeczpu7WSCZ*`VtrcAUd6b$aIEg|e@;-R}=PH}K2~ zo+;;E9mGGCvy0f5-p+@eb@xT@lB8-ifZ=?Dx|d9?-Ri|5^MG=-SIZ zLt)&PPP(!0!K=%7PCHjv*+ibv0zLM*9ZmcV^cf!Rx7$d2Jg%-X_#^w0q{+B9dX7^U zNF2r2le0gh+=_3KPkaM)!T5{sV&vwMFM;}?K<>55yOH~ii}a-)koVk0dRS+{Q6ETM zuqf!By;7$I)ghmApR@^bZ}i3YF>>zz;QcE*Hlg zs_IKAZ<3d3*rA8~lk^_|Zx2u990~D-CQw(zv7gfx(kPHe>_79Gq;o(fjrZQnbw6cM z@?|sj9EJ|rC-A7AaVqIs*WT`u=8-&u_+ndjnm$YaqfPw3`Mz!Hc;EUz^S-bC%=dpCtdoQ_ zO31tne8|{3roGP`eVxyoknA(FZt$5C(|qQn!9H{HaGyDavzMoG_VP5&hW-5*pLyT! zeCEsvK6BP&pLzdupE;Yem*;Ty^4z&T^Im+TdmcppGM_pA4?gqml|J)#oV|P(XD^TX zqt6_-!Dk-og})gS!CBtnoaG&saHa$2dEewo_+duX*~{gey?ipoopAixkc6@xu7qMa z%RAkN-xA_K_{h+N!;kp39$A}_@XfQntsU7zNqjM}X{(IhM7=0=i`(ru9#P`u+;l15 z$d>lC>zH`TNL@Zy^|RcY_!mmP-G&b~(!=>^A=bGKLy1G+{9nuFN8*EVO|CCB)CRc6 zvH`h=>r(G7;My<6RqDjRx|hm@ar**3hSAaPZ;6k=*?rSX+}Ue7(ca0KIa0>MUs}3m z9pPPE3)igU|HJ(M1Af8>7oO+3QJ%p$I_tn)Ne{1?Cv!{G`(c@Sdjx;@bf%f5nhVCVNKW6aJ9e?rb+TF_@?Jy-Wg`V#U?(c#T3>7B-XX|5}BkFr-v zC%6wCR+yz@VV|SyIc0@gIu`fg+?noO8K1NEKcmmfdy;qd8X$RpsaNETTxo}LNV9|F z-685`yH3U?=tKW>MEpMuA1m#e9nM}htK+S+QDV!NNjx*-dXL3N8tZfCj-EDucze!8 z3FS*<)_1!?O+rKdS?085Bq?gNhg|yihVfak?B4$KpR_}r1JNNDz zNq>fXOz;}}!b5##I`h8and5t>GbbE4i|xYfLTh}pZxVCA=n7|kb|B@fZ=Ahnu@_&3 z{q-uwGxxicx!;=iN%;-LE9-|!%VwIW&2&Cu&keILzNx~ z=L)yxh7-W~+?!^E=X7FjI2@eF-0(o=hS{^qnj8KY|BSe7B`#aXGuOM6x!#&_sZ4Qk z&Rf;Fu99|=7fq-eKju7dFKtX;m#ZwUFndj3?d!?Bw{S_*;CWnhS!eIac{suM$Qr2_ z{O;7&srb-I)|tj5+2>2r*_yZRVEd#=QXcVh?;&q8*&Ees%wOqsjX&R)_bEhH#`>jf z$eAu*J}R;?ewi1*zq0nVJK!#4XnlSk@mVvOGmv~pAP?mJV(yoCwPTE5{K166Wo!Bx z_IdZBGmP>i`oz{UD=OLMSstX5iY5p{HJ#yppv;^w&ms+*NCbHd8Nzv9B281sB(* zeG+o&br~C8qGg-(-yg=Fkv?ot%5MTT=)(s4x;&N*E)DTm>l4B_4?B(dX^-2J6RztM z0ycOJ`5?ZD(_F&@-gVbcDXZ=qZsf~+zFn@X(mnXRSmIl4E!&M3&b=<{*yOCjAE$&c z_uys@B9ys^;ByP>lh*DsKkt8rv26($QW@UctJNVx3NEeyMnsAwsZ>MS1d4V*M}ERW=uSYs|WyeNLGz-^B0Zerel9#}YYb4m&@_Gqzyo z<7vzMA@+J4zplrbhn?@i&c|ct{`&TMoWQkM@@gJ7PCd@qaWS-EF*);S!}gG`o3TC8 z_u@L7rpW#t`#wN=&F8tY2ih3c$H_ayS$WjlFMGF+LYKtLU`P{f}@iGUY+mKmD4y;2u1)DQ%d+ zujuQ_$5u;SDD9f-UaL)VVPnBkJ7g zx8l$C<*ZFl?EK-^(AKP{eUduw6WUktQ^n>RpjXx~$#|2!=W0{Gq}3?S(v-47-1k3C z-0y_<1dBwx-1<;(Vpn)$LiIA2y6zRtNxjG;CmU*sL^`s&x^&HFrC z@?{e5)`|D(%=<}t$o!+kO~yD5QD1M&v2|CFZsMP}cemIh?j(6rIirDYjD^VnFQd3=V?Jh9Mco?PWKPi^#>773FXbSTl zt$iz#TF=}vy7km83tD?J;*1dg2JCVtzqtAIx4`5+LyO|pyZvbg!u)A2mp>~m!k?8C z>CYP7(4UnZoAmPJ#rPA7oBCs29{i5F=dN3=l5b_|z9wz@&%Vz!tiSjV zy-&r;|IGV*v+{rNK5hPU@AK||=zX^QH{XYG_kATX8K%_zg}*UIl*FW&B{J^U0UQGM z05iZ8@HY0*&PX%A8=GeSFeAvabvXS3NqvEG6>E^$7rkjV0(#=DM(#<2M36B|M zmUb9q9_=y6EK3<=9?Rf&&Zsyx7OXTXew+cW8e|^dILJJ)WsrGt=OFV`5x>($#i>K! z4`9q-v%JG#v$)4#^I*zg(-Y_Qm#zYn!u&@!f}_LzB`1mBmceFDT%`Zl&cS9@QbYgo zm?37?=qP{LA)}(K!w|D!`$qngJ%*ScB)R;jQihoOMu+%MtQuk_#EBmEWK8n-OScR$ zU85uXB|C?ho8!X$$6|(}E6RVo!%%a~=xBdgkD=z@kUxC~^K;(sY>p{8b>=$~Ln1 zqUf6;?=#FCKpc+lBuwH~B=-^5nBk@;+v_iR6PXUfE#0L(2qQkFDZ|Z}(Of${%=9J> zEh;%Z$SirbNq$MjVDibRI64-b!EYV+7J+L?n?vAfevc8BF~lrcCHVu+;P;5gfjR8= zeF!|w?;(*JYL+ZyZ}YL>41V)O4xBCd2A<}3pHXoxW0+Yomfwd)#hDr4A%0UhUn*lb z;r#X(6=!FF3;FFtha1cS7b5pMY3BwPqU#&E27V#eh(nS52j7$b#C@Cm2e-(7-uVTi z;-q^Z_hPf@a!tZqTT2#VlkXW@OWbMZuF%?bW*l{t)R{*fX^{Uz8Rt{be>-|QH2+7| zMt#%YsQB(~e(X_Rk>lc=ibkAM5$->}#hrihp^*GjZ`RK*4L2(GG4FV=Z!-UH$S>}d zl7Fmozx*=xGB2m?E@i#iPqg>n-OYI+?Namq#a`#KZ}Snxh!3;R^Y=Y`6(utmW5{mq zFX3643tHH=aE`I~lZ4O5HYh(Or}=-#SJ8t1tEj(U;rD1?^7~n2tb9jiBV#KIkUt4u zr{R=^lC^}3o@e2YX*jk~vdUMHEa8u6nAk{;ufkmD@t1cPns4dFUP{Wip54e_Qf5?? zcNk)ai|u@^;a|h=^HsPc9&fVm_Y}hOkbjf#&HT^uRkSYV|9ifzyXtrAS;83kIrio+ zzkEQxRkkyb7hAp!#FjnTm-xr?Zl1hmv{8-xoX3r?!budIZ&Izj3(C7QA2!ODb!@Vx zP4eyhW;xTWEqi;1S$S5G6Gi?-;Il^hCEw0I6rF#Ted5QEccNSJ?j(NF!JCHWAICR7 zP1+nI|0?GBDkLwDl2<>mrtCcLW9MTtznzEpwHd?mOFra1$>aD9q$jpt^182L#zFWV z!e?ms9>RArE-K;JdPybM&gnJD;}?7to8+35iyugfjqo4fTaY{LtLQG*PD@-#6Zo-(Ifqo^DsTKa{+>o_u*Qq?P}@kf#3om(q`wF%HI5R#(1do%upPc~4XP z_Gb7-ayEsGjg`>nr@eb=JHGSMkmh^N@ow>hny&TU!8vu6y?T0Ffia}tTfS5_{!0XzvQnAN!f>!SgR3U#is($2GR+hh7Kg?YzO_4~0_==%I|&2Gs5UEBWoeF)3EQ@_hi4#d5-FX$)!nSW8a!On8) zMXs%WmwT(T+<%GOT$THsv)ppzM%5oooQDwSp~QJuew4(SZ*Z;so$B}oH{icMAkVl? z_Z0u5^D}0M++S4gd1txtBG>i?`?-I1mK!N@b5-uI&T==3+*c~M-&rnQ}sFSLM!nj9E5f46!j|mNAT3 zHenrgQ~Gbs@=Ne5EZ@(>_rvEZ#s5m+yj*XanOnqv@V1${McP(R8&Ag37}*P(v)tMk zjl~BkO&M$+?J(F(lmFC1M|;>jjk>>V=Rot=*n#GNV*I3xfynq)E<@+B83WB_=sdP? zpt&5K$F~eLPpsm)E5iRideXA-kv0;RBG>t!7vVqp5OqP1f#!4kUyknM9R`{w@iB9X z@wFCGm*8_|p}$P@<9FtWez&dvWXwSG6n<$I`j2scmgwIidze#?%;S6*!b&%$o0)n1 zpKZuFAB~T$N;jpwE5lzno&hgz=of!x6VEt4Hr?FBbB@mtoVw+Biagts!FnCPq(fPc zbn`?9?#T}GCy1_?bn~Q}|9RA%GmMHQ^1Rb&mi}Xh(#-NAcrkVC6r&=(t#9S2ooVJ0 zd5>Y(x^k4nc0^3$KV5@|Aafu?A})5kAKX)<);Ujrw^s z?mdw)!0ehGiR}y^-HgVYX`{++BM*BFFduGfG%i4|zZhG(i9GKxz}!omyQ1$z%m8ze z=yMM+qls^UE82hRbgEe-_hi#XA4(;i;CcA#8ThM3sh0hSy(}pvZ->xEu1dv*d@Co) z`!7s2BhYtpMylBjeVoItCxL$VX21{3(=qeKKTRDmQ%NE{XJ}mc-y}^8+`=7(M zk7wA|k8}ORj2lQdt{=MIvd!nQ&9Wllb{RQ-`g(IS*N?kx{Zr9jwlmf2%J|D5#$Qfu zNi`=i22;K<)y!rbCXaEJ<0+}wiInq3{_-AnTAw5>$|!>;W9~6IykHnasG* z2ifqA%Jbk`Y%b$Phj!jzrW|nl560MG(F?fVLHP!Fk1E;2DewcK{->=mr%?Ypg6la$ z6LqQfBbOpih45&Bj~VvLF-hrn=< z{?(BvkUqAfjt_0~<9l0E&Z*`*E;KEjM(z| zF3kQdZRL%$nImXBGiXDHGY>b6vv%s`{`L>j&N^QY_U(!p*DH@<3~yBu{n8}!=!_(@ zY;2NwEF;N0o|0sq=#gZe?2u%hib*m{-AQI&k1@?)ypA#TY1?Vvv+EhxNcrn~nK4bq zeB)&dneo3k>{4X2>Hk>Q!?=#T%u`wa>oZn`KO8M}Gj+p9lzXY4I9Jy%?W@$m&(S7I z+a>LG4)wA0A!d-)-k%v)Y)*PFAwJ?ei2oseaKPt?w$i0)eT`?k&+;*nkhA=elu-PU zaMCh@G>s%}8@&J>Cn|g^|!r>^^ zm!-&DTRq15>oeBhz<+q2tT7vw@XcestuHYr)Q9}~zvX?Cc;9&DU_41(a;05{uQ2w> zdaq@D;+Y>|KBB_Mx-Mh8H#Y?wYlP)q4?g1y%RM+YB)1Tmj{Gj;cR9b0+fWB>v->qA zLu&iSfjVNs!}eOK66QL*&k$JfiSGQiW=K(sb^(fYTgV!?NxN`mDT%1#GO!G&x z=0x7dwQS9qAxV_69o9M`=JU;?)G_J!0-dQ3N~w1`Qzw+JB77nB(G2RNvD8Ny)JG}Q zNA4t(@dkWCpLwRpXP#xg=DUr|-&j6QlwbU%Eb*6C`S4HRd3L=bewX-ed-075@Uu?r z9(z+uLd0`EMSH1m+xGN&?%dL^*dQR*!p^jp@-cB~taIqld``NqZNzv{cn$7CI)%-hamzCE5bT>-m@Wu1z_`jpsuNuaAB zw$b)PqtX1t*xYyea0)ecoLb?z%awZx<=WCu-qh58iIaZpC$?TPdPC4({W+bwbKZM* zY;xEQ=e@(~pSPa#sw+3%ko5pnb#BwZd+U38+{QHlJGaW7t6Odfwr!QYINL_8^;+0> zFSSwWo7ZKdf%5cU%d6XH$v+(IlQ_s4h)uir4g=dQ*-@Us0!hrtpZasf@Q9iLsen55k`vUsC-Fn`7QNB-={Por4vjX}( z-FgnbDBrV6{+jCYBLn&w|4t6b7hYE-Kd8EVMnHePZasSjX>A?cc``;JQ+ zU)6@T(ffX>Eu6y|g+Tl*|B-blKTdJsKZf8xx@p@&X%p+=Ki1FxAtQx3Ce9e`WlY-? z!MT>q100~9J6e=%9&KQ3J+L#`JhcTsd?WMd_|NATGQU29dG@i%=8qZ4=CPDy^LUSB z#&D9&lQGF=xtlrn(@EypLrLbjq9pS=((bEko8*@5Ofs?U=y$Sa_fGSM=J+Tho_CGh zRMN}S(v^FI;3r0IKS9ckBa(^TL$GdWSgUj0aR;IO^ zxusLPsarzZc{0*m^h0SM(->o4B$yZKj|QdvJB(ldG;QoS+E^LK$u;b8oGTaDZSx7* zR%w@IT;;jq2!EiDFa7%j+VFh(f(5jt3E7eUy@Isg$3c*PVN5XGU4;1Y`Wkv||_BZt*wC2RS3x zNxo-w`Hwt>-E+swy1bh8Y9V`m78+)zti>bGe+cNzwA=XLIK&0%%tV)6_I^YAUcFtv z=s)D)KjbayW9h~o4hMA4ul;^ub?K(w4CuCW@Xkd69TBzTS3wyJq|wFrxvsvbBjDe3 z%J$6)%Qj{uc#}-8*JZyu`TABs_lvc4AFNY%;xGF)<9%DbN^bdIPU?^l9!R;5YLT4@rweeft^IAF@Wyvg4t(pRuT}XV6{*>>`k-7vn#S^d6?^ zO_}YFZt;5qKE{I2Dw|u+>R0<&hDZz-EEbhUCocW)R>kTdC`yhD6P1*A4T~;l~CxdY7@s-Z%c13w|%GhDqjWpdR6jw zRF@y9@|)CG32y5{$v5kHE>G3{XREiteFFD4=+-lh^s?huze;{|_2+d9#1G#^+Av!_ zq)PtA>hc`}`dM#r)kXQB_}o=pzC}PkzRP6+`Rvdt{kK$?j|k|m@>NJLca?k%pTki3 zI(!xS`>v|{hE;#gx2NoU`6XXv81tI{wy$!zF|CBXp~P3Q{FEqT>(QO~D~yBukA0Q! zrgi%&U0t?Ma>VvY{x|v@rEbm?Kj^jmj>A#E>~my%iqG-3-Nt(oT)AP`kEfV#MFjt8 zZlXW|Fi{)p9=>tfeu!Q%;SzpdVf zyEvXeeNd}Ti=&?(M?ZgBzc;+oLf^3ZaO4>u3)$ldhwVBoSbzPR`o-s=?x?G8Xyoqb z6Pvrh9;d(t7{g^O+pgE@laAIqyjA-d$09)Gxu$xL9{iqs^TbVvkXfFG~V( zkFT9JpVrhH7;7o4@0>Qd)c3jCza_uF9$-I8?Y+e>Tgg>N*ct!IC`zD?Q74YbO1VWTQNld87^Q&rEVs`iYritsA=S=Hso zseF7@dxm^emHfTcP*h$SY z6tG3hcf=NdkB!KC9bkT-9q+ZB_F3X4dqrB$lDO)3W`X|ZpMsuc`IOjEuumDN2aH1M z-ogcTAFtfVy^UvCI!TL~I&*94#MbK4=_#geDc1hY=Y}=@VCf{CYwDa+OJ|hoOlJHr zgmGsbM`Ua}ma*;l;|~wtwfC9nj3wHAvRqg06@fVGxOQ-wj|KC2Ildsw>`SOvV#ZyDkW>KV(iJ zR_g?-E{Mi%N%KHm5Uce>p#BJq5nZes$hQLO2GMzde3G*3n_7J>b6XWKDbqe zWnP!O7e7IK1lgB2p@CfnlgJ~h47y^gY<+3<@+Dx&g@e8_0J%AmJ3it`w zm93{$m7aRl_54otY|?(U)F;xGNZefbE!O?nZL03CQMP{@xSx7N#)kX0#7~j?`S!>K z2KV#BKGrdPS6r38hpWdYS@l(`TMC2Xzqq=5&%pDm)h%tS^ygI{N9d&Tb=NH|tM1FL z{+!l&-!IiIvlmydTLSaoG6!BFbKsiiVb{2F!)d>>TuatSny0ZRRrpfo#Ic2laG&ac0O z{}sKUk$<1y2G-qyvTje-x-Yl-ee?9bUutu{TKLOt zP8a-)ut~HN54dtCN;_e-Im@lKC1SMe-)nEiqvvzi|KHyHLVNT1KH8i7Uv6*S*Y;*P z<$^tntg(pfKzlQ)b{+5<=h#%MBkelo#ROO9T6Mt1xw8bus1tOoko;atxsi6Ji?%yf zJ@ihbO z(45-Oz2E7%u6V2O9o)_o2DLMDNq_5I>d<+YlTPZ1nthQ#8pf70=UuLA<|s!p4`u1s z`Sf6)V34E!%bfM=oVwM9QpRK+%F;ivcA8w{s6WA3|4YRGC5=CIfvlOa^lz%Izm1cA z>MN(bzPRRZALHHov^~cDYqmGCf66Nhj3%$~bJ~xgQuemrdF{o$w&TywTj{Bno#U;? z+Pu+5`QPY=hp<1@!T#YD^W>~9>bEuF%$vj+xlP%pUiO=ky;)rRj|EpQFjhB{eWv<` zS5&5iS8QOf^}xM3(_HLPJb%B3w!wIHN8*9CixVxr753Wte1`H;_!Q;G;aSSd;dd)P3m>bz0zOjt1^8{sT{{yG z+@!o7JVUt`K16vWJY9Jscz@+h;VH^n!uu+31HV>z9K4tEOW{3~C%~^%-WA?id3X5b z%CCWUP;SE8ElzAn`d`AY6~ET}>ho*BuPMJ~{6hG#U+hPr{Oa+G=GTay!Oz7nf?p)R zhWw)VNghgjAI2}7UvqwK`EB1x8ns%Sc;K&K^Tml0e&A(zjPgIiqZTI`d0_bB#Mo!R z28$DY`Jj7o;-~_!a*=H#Pr!drz8HRPQR4ii;ORw)>mLSBE=t^<3zjWPJn$&^jml=j z4=JAn|9VlPF&+G3QDW@x!B6==6D;EY9PmSx9S`55{6_eDixPb|gF6=`j=CM(#`8yk zZ}R+c;Oimx-dFkO@N1R73-6_TH@t`Pz3?lQ z?}K+%{t5hY<%RGL$_wD_l)nUTrTkTRbLCs%G0NYDM=8&ThbtE!x`A@b$5k%=XyroN zUd3PkLHRTAbIQf{Jgxiz_(|p2@G|8x_VSH#8IL-oT*h#|Rz3^J>LGW$Lhr!=eek1&K<+s4MD8B>#g7N|I&C0KVKdan?Z&aQL zU#C0?zE=75@W+&Qhp$rJ2L6chICzfoOW_YGPk=8}-W5Jic}w_g<@MnADfhx>D363s zQQioirMxNpZsjicSmm;IWTf(P_-)E%4b4r;E8rQ*FTjT=FNLQo{{-G&`RDKy<^P2D zRbC9gR{0TlFXi%GOb_L6!>?3c2=A=?UHIk7cf&g<-wSW2d@H<_@@L@9mFL4_lo!CG zl)nTISN`#qHzI#V2Xyj2+vYp4}Q0DFMO=>Ncc#Lzi3o&?`_JDz;9As z3eQk}96m&OIXqqYS$Kct#qbo1uQ2w)`zqfDzgGDt@LtM4hxbtaPxzI}cf&g?e-(bY z@~!X=%HM{!Q(g#frTkrZbLB6=W0XGyk5Zlo4_E#Syn*t3xLbJvyfRzte}(Y`{0HTW z;pdbug`ZabF#M$QTzHxCN8#Tn&xRjTJ_-J{@@eodl-~>gRQW7;k@5%NA1WUY-=q9S z_%Fp7@ z+^xI@<-tf zls^G?D}M@J$#+I#|9S8qls^MMr#u&aTKNO;lghK zF8HU)$HR-1PlA7_d>VX@@_XU$DIX2rseBN8oAP1sHl<$SNQ@$16O8GPJ z=F0QoG0F?zQOaL}hbw;--eA7;qgT+6ULoJK%yhTNY3Gh9>vWX04epp6&xK9P+PRJL zW=W5)d2+&cz2_L`d&$1sGUre-woj*4jke#qi~sq?{KlD=ds=x~&Rba;#oq9jesM{H zt94kPxLs@JHL%xFjc0G}W%Z5RH1>l|XODAFOZKsC>RXwGOxc#4HFI38{j%qI9A~o6 zM`!l?3x;=_YwiEL|G-Ah$bCAS_$C*)45Q#cgCx*ZP~3pFyw&zZmk~nP^@O>>eqd-p zaXYT{kZbh_OC_v6*dJ_AP~3}a>2l3OSUO=|FbxbVC?3MKv2rb(u)%~yfP=uug5tZm zHe0SWBy1RAQQ%N8x}bO-*H+23Mud$ZtTC7Y#uOAk#@f*c(g-`+)sHAD9C61N(xhU%QoCz)j=YWra^TAc%BJdG#377*e2Ok1gfNR0k;0xg6;AZei z@L6y@xDMO|ZULVI-veI+cY?2g+rT%#H^H~S*TL=J9`GITYj79%1^7PrDfkgs1bz&D z2z~}00>1>$fd|0T;9>A2SOS)T$G~sEQ{WHa88B)`qH!J!2Y&<`fW`vaGB6aZM9u@o z@IL~)9E=7#fK9-5U<up9UKVu2Zw^Ufg`{v;LTtbcsqDEI0_sKjsr)6ncxg?BKQzE6DiI2Zvo0HeWHU=#34 zum#u|Yzt1XqLWz{kP0;FI8E;CgT~_%yf;+yuS}J_o)Iz6fpsUjbhL-vD=l zZ-JkJ+rc969q>bN7q|y}AAAq|2>b&47(5An29|+eg5Q7#z(e3+@N2LHJPjTL8@xmQ zgKqE)SV{PK@CWcm@Em9`MjOucP_P~70b79)U~@1Ui~*Z~QD6(O1K1ku1;&Csz>eUR zU_96v>;hg6b_1^kuLg&Jy}@*_57-~{fhk}=urHVjW`G01yTPI0Sa1Y561*9_4ZIz^ z2^2A6x}40v`dFfH~lD@F8#oxE5Ru zz5qTBZU&zOp9R;08^Nc+b>Jp&3-}!P9{3`-6MO~S2EGBl3BCos4sHkcfbW1`gS)^l z!1uvV!H>Wq@MG{p@H6lb_$7D_JOG{s4}&Mc60i(B27Uvc0)GI{fKl&~|6n-yBiH~m zn5%GupS(pBkQEte@^3 z)od&4xXMc#th>Z}>FzaQo~AizUT@A#ocmN6(mJbC_jPM-wEc36Riy(D1`?XXuhY^#Jt*Ok{1O&kgzs(SXT|}E@5r$uxm8Tl(2SoSR&l8#xq_tk|bRD^>B~!0q_Xr zgW%E1hrydDzY*R-`7Q9)%I|>3DjyB+sQfN?yz=qzF3KmtyD6Urzgqdd@ZQR2!TTtG z0Pa(s4ezIXF+5fIQusjS55tEl&xMar{wVxr0nlCzbyb zzFv7T{AuM!;G2|}!k<%q9R8y6a`-FC&%)nOUIBkg`33lP?^H@~-ex%DcnQD8B}NUbzYXQF$WV zu*S2oe|V_!>){^d1K<(L2f?G24}&*Rej~hv@>}4omEQr6RX!TtQTbi)c;(~aU6fCP zcT+wMezo#@;k}j5g7;DW0NkfM8{SX(VtA_ZrSO5uABGQAo(mtL{89ML%AbJWuKX$Z zDCK$Zamt^8XDZK!PgGt2pQ`*N_&v&Bh0j#J6+TD#+wl3y3*n2DzYAZYd^dc#^1bjC z%J;!nEB^%kxbn~8Pb&W>e7*8w_|wXdz&9x`g+HhKIQ&KBZ^}<@dsS zE1w1Lqx=E5PkA=HpYp}7vAF4bTK0^7U@SBxC0l!`OQ}9vB^Wfu@KLgKH zo)4d>yZ}B``AhJ7l)nm}seCJZj`FwR^OYCE7b$-izC`(M_;TfY;VYEygRfTp3H)*8 zpTnP2{!jRN<;C!)l^=m`QeFywPWf^8i^|L4uP8qYe?xf%{4M1d;MO;ir^$ho4b?4g9=v z6aJ&}M7UwCXQBRwhbq4w?omDf9-({?JX-lMcoXF}!doc61>Rcu9q?G?qv0Ku-vy6X zJ|5mh`6PHZ<f2q6;{DAT}_+jOj z!b_AV{2%t-Jv^%FUija8CLxndLVy4PgN6_-83IKcA?yOpWF|-;AWCS_QX6R65{QbF zS}!@AB&3#0usB3ZCG|v_`r;&|Xrsm{#{)<`0;wXV)zfk;xq!@MKnUTIZKU&lzI$dM zM56r8`^Wh`&pCh0^I3cEHS4~lMtgBDW^@FG`992}L*^xzZw{G% zfH^H>UWR#m$ov52TSMlRm~Ri6AI6OSz;N?1%;*pd^J>iYkhvUlPRRTO=G>5ZJ?1$f z^OKnG3YlG)7lh2uU`D@SxcMw*bPR_1In0Yg=53h2A2PpyxhQ0IW4=FR-hug{kojfI zKMt8+#f<*JaMObs9fVPdLQ%AWhmrAvw(VW@Kf0RCV4{b{hp4mGee?RRG zB!=e(Ee%y$qnR7DU2+?9gK638w#t34vSzlJvxWDv$57VM+Oj9Qe0f%VG;?1*{I&gH zxNCIhrfL3#R^475diPfF-5}-@*E7E;Yj0=szmCxVI3wLPoB!E+{m*#E|Kwd(q|1^OUCjSN{{E}bFB679h1@+I!MT@_oO?Ndb1$Pf_tL_-m(gz72QT-qzRA6y zxlePykxO~Gi1MY7HuK&LY&p)ikFhh1`#t51?FA8K^AjjTtKPiT^)nN9n6uX3I*;;* z{SC`~Q|{r+$PTqTGbS;4NOFm?GH2v>9*;=Mdpu|4oX58jX6Bz=rKV{AHtt3mMVX8l ztK6Mj!CthH*^k?pmrmZv8Pt+~39}!cG;IA=-MG(Gd4;n(Tv7&?PgEBCV!3z9zB({P3i6a!^5kB z?q3SL`Ul)Epj?%F@XXfT+!?-vuzp7^o4=9?<=}m?3C4Y^=?^JSbGCk`)CJ@aXBcI; zlDQ{+H2Y@KKHIi|dU?jiyB96WE0##*aLiEqlyv6e3sh_IV&d1^tr57@ItP2o9!2G|5+2FlWffS`o+c+`~C_1*4TtJNtSHETqF2(qU+Kqc4f{#;DoBK?wmvX{JU{;1n({`TtEYW~Kao1v7M z%W1!aJ!+TJp14Wcm$MH?&W`n(uh^6GiZ0vZTtveja%?j8B;C#<2OBU)56;~jGrHw{ z<2!liqm0;8&PjMfUAdS&pX=hUxLM9VwaadjM)IE&_K>CYaVLfFTz02bT{#+miw1T# zc2ItN+?_|c?xb8U=%5S*+qFpzVF1n2Y4@XU^#p96G;n^0g{jLyf2Em5?___c{#q6J&CVM z**nfXZ}PtabCN$dYU|d~X9Ei^$Q_N+4jA`WiyRqVH!@uIgK~tuF+n-fLVASc2)1a%Bn{E z62~f;nZ3f!eG3bg5Fbf{0@%AesD$%!I!{+uN;&&K*omRcSSd3`UXo{fiGK&>W|owj zCF)9_>6xvrK5j|7aM`VBb!8d<*{?|c4yy~8hWS5bzUTt&z|d>v*|54~%FN!-U3-Ba zbB`u*K8qhxKcy^R;J!?8>*zS8Q`|Z_KzX?gxggIQsS9B_c;3mGQrz*^4n-EaKjd!j z+H5!OzwEQx_3?Y3*=p^4w0SoDy>ZFPE6=DwxqTkF-BCDcTpn`!AnCUQxxIW+Oww%R z_9^7{j$4{;*r5)Kc{SzW*3yvNE+!u~BEy~}FJ>dRcObWS@cmT7lUrX^ht=`jklSh8 z$3D7Oxs|wHTg084A9O#KW5(JZR`gRl&dSxY^k{+S&jF%G}hb@ zP}P-bCWk33vJe7;ZrGG}Do zUfABxr zZOh)#E-!a)c@>#|+{?Uw#pSzZi02u(Ylc0LXXLIK_CTI7?wX;D^u23Fi{P#q$#c%d zxn`b+>hvMn{?W?lKYzAj7wM#uUMAAbOkX|19f)ENu30^Nf$>QfWhhvdlsdxsl7+Lk zy`1}Mg!3<~TdXLX7JUD8mzO)ljQ5PU*@G~xmHxGxzI~BNsf-@X{@weO&REKTh5ftx zV-#J*y%c+f(I;uc?mzxBuq8M)Le|nhG`=gh8{fZ2+FrQ)Jy<8s^4yW?aQotE!>J3D z>6g8Q3ghH;TOG(wam$AtZvp3>#on4JXOmdsIB%7`!HMh@{*W-pe&H#&t%mjs|BQ4Q z!G7UA|E##Z>=l-929hlLg=EW>@a|Jw65gNuoiS8Wu3ivf?_`nYf|lf5y_Ii&!cX~+ zm|G~5nftD7@6C|Cj#|6h$62zM<6!O;2i*8hKmPna^#2y@gyqED{n*_e_Unt%3wN@6 z|DQgC#HmZ%=l2WTkoHRAX2g|x=i;4_zMStUeHXDC{q})0vzuDCBw~YIPK3&>Rd3KuFQyxKCHrKVRRorcq z)iuhQ*DRxz!#48YqT0F(A}Bwpic8tEZfowDN1Ib1dyvn(`evN#SOs}bUYd!2^?wAm z9BaQaz6ig6hWFmFoXu+KZfx7+beA%ITap;op+vh1=qr^G=UEDUlmn`99!kRK=jY#! z|K4#<-c}xJaUG_o0H4t-%fhUSixHmydzia z_m}qjeuQ1x$yaDkrC#mj|DW)#CAm9OHxD28!9OSGdykTbvu@42i}8BzKAfCM*+zPW zk|1k26^B_9w0|wQpzT~wlUs0_yA##igmZ)hU7ct zf_#7aa=z21zT~jq?kXhxcZ=P%1Ke%gZFoIt^(bLMcAZJt6X$BjUAcQs>didLM+bQ& za>_?qkJd3U~_Py(kZ%g=Aga22z>DfW~j=lc!YawB{p0Liv zp0wqkyb;)Pk+RTDzagBL`@eo`=0}X*d*@{8-bh^0GXb zm#tq_7UYwEl=C0;&ASbK%6I|k;wQZ<A%qQz<$IKlLa5Qo)qc zH#l30@r3k6rA|seN_0cq!Pq3_ygf?JLNiPM+PI7DH0=p_dd5MX9CMnuCn(tOzMeFS zAdTey$#5N8Kpm?wDV^_dZj0orv}az*MxfBbz4ofhyVRne$L|ZY5mAKewdG@`cnfoN z6ZN$XJ5SU1Um$ugL$_z|j3XW`OKCg!&vf*^hK$9Yj4i_NGes}F^A5K!i?Y8n#_cOm z^po|o+;d4MNwC{Rw_^bjh{l@ z3zzvW;vwZ;;<4En+w?B;RhP@WQ6H5|mx`|MGpDeX=~*Sx5)hhMPzLG)?~_CCFAp!bUSyNs;>5|U|CvfqHbkS_ZU}T z=VhOhIy-TO+Yzd>h1A(#+$OvBa<}_V;ue-Q-kMO|#m)Z0S48;yVL3rMb|5Qy%Y)vs z>6eDv(eAeV>yu4)<95s1JKSxXX1b51Is76_)Y_$;IR?0~=-@Jir zZGZHwncpPO*O<>Vrb3CgpE6~q9LYFD`dozTJx5uzE0y%`U>tI#zNtoid*=h(s&Q!h z&oNIy8R{E<^;~eCB8@OUN76`FObonpqKTM2c+dn=?k?uY5RHSPt6Op1twR=Lc89(T=|hh!7|4; z(y({A7}mEAk=8~Su94Q^zSlbvhJZs`7sGe~zxw7$8T#hA#Ls90>_Ht}3Nk|40Fk%o zUtgMytmj;@&OPrjE-G3!Meb!|+;mxQx(?l8xIeU)ah}oEmruF6t$#vYnT>Aea$A3+ z^0~IY?%j)xkC3mu+ar~Hx!fM%hQe5^ND2BUcfpw{oATYLkM>EfR&+H@#aHU1(dQ%Y zdiVK^`c-zjs{;AG2fJ6bz1PuKdXzMkHg)8`UTIV1Od_LyB;zvrCw z>B=-?|Zv2lgM zSYiNSjU=oQ=={v|n@ogRMPH-Toj?~Ku+kSuMK2$3(JdCcE@d*sVt0$IFi|F3oQl!b z3tP#HHu6NHjc?^y+SPmhjj^!tZJ3d7Uz7GfK38wE=IV;dUA=t!9%0T`mC4Ne1?MFz zl+Wd(jEkN{mKyoo&v%)#ys+>M(oQ8GOu_NL5yva}A@MqPo$-nyti8i-zDC$H2s`t8 zeZuY_400Fjz8CMmD$G~jOIW`+U!usD0ptsJpp!S<V8{ z;q2%ie_L@sOgNrlys&P}mGS!L>>6d`59s_<{(H4-2~ncB`cnGv&k*GQAxK) z&C1iC5#AomQine!U3JRNubCHUKcVO&)iaHc@*7H;txLV)w|u)daPhUGUit&PB2E`+0V1I-J0YV@A_*a{)B%m zxZ7$@qMnSX%OFieHcFaYG~}B3a=MJbEs4vu!u)rNzAe4em;M?ZJF4e}BdIZpxYW?4!*A#%05^gXyyTBIjKbr<25~ zgEaSI_G2avjq51qHKeOW^d(TvNgZl-Y?ga5?UZX9?OwEE>t2SvQoi4wy>9EZ{9cXU zG8UXbzoYB4+1))>(SJ!f?Hy-vHxNj02l7=!-D}GZrE2ZBCQxce{|& zQHm}yUE1BxsIT6vP(PQkaerkz0l%-OUllF(uA|=^KqoVqH1pE-_UGpX?5s-;-bW*K zTV!D;?^rY9;Vi=;$H@cf7lrGcj4$8&M_|hZ^jkkBt;2PquY8rdDf0F2xF!GZNhAy= zWwJMGMzFtM(|?!_i~of)u8cYA?fRd1_ZV$MK@|E*na4&}&_{pDRz8ijFwy=L-m0bxn-+mSuAm=kD@SiV}Jv;EbYNC?a zb0o%no^jZuh%=2{)YEhHQ=f_OHoi!m-c6acWdCAoORdS!dHw>Of{!s$SRZq_ycgK@ zF2*oJDevcS%Zq)fn@V=o)>iu5XYuQKlQL=Ocw}$ia*SR<%IH1l8;X!`QvXFK91hE0 zdQQLA*F8!9=Pw0r|FqETdKR-1)PcMg*89o$aDH=Oi&3t#Dc37P<^8XFrrU$_Ce#Do zmxSJb#CzsVT5wOs-fjDWdKA|mDD!L0jM*dH#|l-=yE~+>eTY(_gU?mPo~Iic{SY<%)Jab@vAGyDE8r?z%?3Xl2co@>>frR?W%HJ5n+_;7W5;&+WDU^ z*VUBks!+Km4ZYaET&_v4Zxct6<96iuP-N2Q%66zNeINaRx5V+7C2r`DWSe~@`YY}p zu&><9nj3Fvj#f07G+O)lGO%q>Fpb{i|7*heC-VD5sN5pI?G>A@$nS8zBEOA%MLx6= z<~G9m4a#yi@=Mm+Nq90K3O4yHv$|-5lpS@?r-gU^qO=6EY8};KF zaSqpyC$J}d4+WWUt#)sxJ(ylK< z9+o20WUX#XYOvhQmvWPO_vg!v{0~{!MIAgx9KG0=|0>x}8}0uKgj325^=v_cwEul& zVyN8YNF2lEhVml!)Lc(}oGkzAQy*{R9lDYEn@Jx@e=qk1T&v8b(5IDpxr4D$P<~Di zm$#=BLw%!jfFDOTTaVJ!cr2XG> zDzKnu(E#`Psljni?>0&LOcoXSxz?zE?83LJuY<1}_P)HX{!Z*&hpy{4Vy{m*s^Q&e$`Rwb zFInlIzNn+fxrKL@s) zM+S<%NWO_~ZVc}u_|4#(^zUSBDr37Q*7`|5!qCgphYzHqS0WF+6D|5hr|RlPN6Gwa zoy;?J%REzhXr2jsT9k75-oEop6Pah?f3^5y=&!M7%rk}FKgWCTPN&;97I`tz#C)`( zGq!)Zqe5}TFn=_j@lf&JjqDS!`nS>E>^8;t%jh2-buf1X{q);T5}uPvaQ^54=8o>{ zHGd@Q^kwZ|H0vr^Lp?N>xHUPH!!loWkol_Tm!F)Ljh>PDo~!0|;?OmoVs1y)JbuyK z&Pd8dW^ldhQ!*DJ>n}uKBXbgOEmNKjr+Xqg%8N3uPg;iUhz?Hl5Vh|yzfT$k`{uIN zB>4V0-d~T-wR<`J^0iL-YdP*?TV{wp%_X|XzH1i3I@afx`-!vvbGp@q=vLkO#n;{v z8K}^&VV%?j%7fe&G+x?n?oW{Q(ej)E1N+RZzmG=$5rh82iVh_fT}mAKqJeIULVji` zdh`_5!rX4xykiI3EVsh7iYIzJ@6zPmKwH$!c5T3DyB0aku0`1GnmNa=nR4ygz&Um; z{w}*VXn|cDe2-mA_>Ns0y4bD_`@UTpUS!u2@3(6s9X{gYiARc6<2 z`l(%uTW8l|H`+DpQ+6%pX}cEvOZ@wlT~nU7Ypt2cFmtS}W31J7a$=0_ADPj%o>dl` zUL0k+SUA9Teo>^YD?h?^W~SNpNtVghZdGl^6BJtuW4%`Nd~N2ay7q)SZO5zcvYpsu z_w4>Su;o(8oy2=C@t;FF^`#h!nmboq#UVrqMvN0 zT!(ee;e4Ab?vPLS%NjWHZ4YJL$T!wLgzrb{{y31B%iXaOmggm(37@QgFz#x&#$Ct1 zXKc~?J`kf_DE~(2PNU!*nV0W_>T}oee8MR4vor52@oQzCCmfF75g)_PYurKg%(eX7 zJN?>z_PK*<5`G%)l2&rh;VJqTqa$QaO|2`vmb=+m*LJtheZQ>79BOG{{7HJ*>B~s^ z?Lju>nw3f6I8A8{#YytLkKc>?_#Mzdpq zyLP~&Xzt}jQw}Uon-Unv8XDw`H->Km_%`6mx0}e10R6^X{{JFtu@CSIjKMxS$U5ei z4w_h>TVBweR-W9QfZgtoOU^z|o6+`h$!3`&ZKZE_k?y7S8`l+nfBl^!GOLJ?KVoE%Bwk^G>wmUz8?G&IHrr@lbkfIs4zA z7O(V^7Qg$Fw3u@pX%TRm4xgJBMPJh5mV0bvjH1dszpQagl{#fH);L}`NLzyLSSgET z|8Uv-pB)!{y~*9iI6`#gE#|$`e5_kouiQF0nt7IS^viAPxbEfk&%7UFd*STzH~)6F zWAC}MGVUs1j?mAzBX&>a)(MQkey+w7ed-=cKZ%h+Uw(pgB^ds96+?On#hd*k*_cZ^DT@Xl!??wqIm@L$fX z9$5X!>UXP`v$pV{8gp>AI_Ti+7YATL&UQ23_W)&i_h9^o?@->#Rr?#;ZX9vvK)%02e0jdK?Fswb7@lQa zBhS-QA}n_fknik$;d!;#mvsUv^F-WD{oWeFoib|7gX0O$1j6&X)v?vTUHvB`+#8JW z3^c-%xB5W!5_Rdn%py(3K>3di`yJ+(JllkWTYVK~cWY&Y+dEO_bbmH&@c_H~djqrG z-yiO9|L`WK+Zb1}w%^WLQ0@}uo60v6-^}jo8Tb5QsoY1HOW%8@oAP4xwfnv2%Q^6H z2Yq)RefXBOR=1b2tvA7;d(##AgAVl^% zoP+XeSx8>hAg}x)ujISN_mIpAe;-Z0)P!VKk!dJ0YiMN+GOG!9m-mrb!?61dGK=~U zbdU04@s(^gl}mjQ`IS)jHeuUs8tS)WXOC%E-qf{Kv5-pkt9Srth>( zs@Xb;^f`e)LrX3BNu`7GhnJ4X|9T*|d0gPGW?SH%=8o;L?s0*|n2RvSVSWhnqnHP} zH(+l)_Byu5W4;ITV$6du7h!$~^I*)6HZS`}F6JTb<^Q+~v$&anc`;^jb13GAFpHbR z+;!M>W3OZTaLo5$7B>?y7hx7RN4VYC^&Miprc<$bOH`XTHP*%cIgf99wx?sP$=0zG zbEBBewvOGH-xhO(ttBB_Z_RLcj@4&-jyGg`KHin>Ik7L>gXG@g&9gA?dT5%QZ|_~3 zO<7cRuXB#(eOvYTnzB9KL%5Tw*nG{HKNK_m)>>U1r!ij)`5V9-hnwJQunPVGZh`*>nV;zRcgXxo$3a*N z--X-Z`>-B<0C&Q_!3Owu*a$y{yI=?04L^bV;92-Kya1cvr|=N`2W)V7W;1`<@f9=w z4VlMb-skXid=)msuR+Q8??LjtW4WStG==Pr;oTAJn9SPwHj~!%rb+wk*CtJ0W74|6 zhx-+LbHJJW?+*S~Dt39!p$MXj2;Ft)_ z`#7?9%_hnjbK9GroOWTMU6(r8u_{}iMcwq8W9m8~)ZBem0shd8V-ZG$Ux^D>eY0a8x9XBa@+mN#9xrqhcA0?ekS<@yI}(VKL@Sw3^c=&u!rwn*aeS4KWu>~;G=}+w4&!e z&oiI+rZt1E`}+pKl6 z&vW+lyP9XW4z7EQyW?#)+BdJi@zI9$H$Bv_JlT?OEF8I z9&*xfucViI6}{Z6?B!lnFZYm};@%{2Z&9|Vdr9=Tsy!E9vyqPB{x|EU6XTExJCF&n zM=!oM9`i=bO@F`Gc#&@zp)?QY!?bf3U;7uvjcw_6{Y`ZJ+2{VbxePfr`3LNa=biLl z<+(f0uIpKL{n!zw`}{lk9rr64n&aC;N=Cgsd@Zk@+h7a925FhR52%b0ECm zsp_o_s@~Q}dt4Z2>^*H^9aJl8+uE(U^!x5`AEz&MVya#LlzFWmGspI2>t+TKM$zqe zO?Bw6FrIjY@x&{PCvImvf&P&FAP)WEo6j`*GaP!AtmPst!s|hFbm-lAitb;e>Kz5D z-c=~!vg_zwI@8g=$Q;l}esZtu*NMN3KNl2FnKB|uajjylme?)j+?R3atk^fH4_(Gt zG3JqeKVt}4@8@OTyg70t>w9h>j>Sy!lDey?1&|AidbLpto)( zo$8Slp|O+C9OsH=+%%4PtnrL-a#s(nE?{hw$9k*+#zyT~!Sr)7|6j=%%E}n3i7`|< zW2kb*OfvQ;GsYgHKR5Pxfbm)!cE4R7xq`BFosGQ_4)r< zRO?mtW@od%Iy8o23_n!TP0~-&&WPh4t1Fu_ajx}?%S2m6F5`fiSCxmKTxWUM`2Apc zI8Xa}afPb)6eDYvs`?(*uo&k$u#fyR%5e|n_(Q_jJ6!J)uIowr7b#~iQqEqaoTX9D za#vf7yhum?-a9V}(P94oAur^-g#yZSxQt9-JYB%J)(qd& z()-x^7WOt!kNDpuJL6xO`|JHIdQ2<-p4^U=PD6Oc&2;2?Ei9CaXi z^}*`VjH9Dh$5f|4!%f`tnk{*06ZUVVozq*8O|8hLwq3{p{I+DX|8KWpeo8sMXS&EN zrF_jauUW?2LAlk&xffxX^@Gs*1f9CwZnYTW*b9ttWgIJV==_n3ujTfVKZZ;?a`5!Yky>&{snXZ5?|`odttp1o3ldm z;MZ;gK0^k}n&lqkv8_JY(p(YGYk3$Z(lEpNd@W9p)y&+*=lSw=kA_+rpW3ho<=gb3Ui@3hTH! zkkc`HHf&8tR?kH~_SJDMqx_a4x7(e$?k02-rO58%#JPgGu8ox0Sjz05D6``!v%f}e zzrz_4+d{goxtDcVaniEQM=l92wZo^s6dr6s-eUp!ydf7MgJ zd0s8{!}_m-#KjTPe~lw9>D0gbsgKL4o5jS%N?eMGi{FTgwQ`mbmsle%edXvlba>g+ z<8kQo93lPKINbA@qw{7>IIz{%w?0cf?p=Q=&#jb)HqLN4M%nwAvL@x~$Fwt|hmw6u z?M_9PHOW1c>x-1@3+TAK;$C)&2Cv zJLrcOPYvqRWPU)-2k9N|m_Bvj0Bg$FAFHpTAC*SD($uu>{`x2Vwvm+ca2pv;cQfr~ z-~0{rSzh|D_E{ti|115LuT%cRZDlxoPlnn{akHsUTPX9@z1u$8tpBnM7x!<#J)xC4 z7j7^6wvSSu{=3_Y3)H7``{*;j9jsSIn<#aPax86x^x?N5qra#w$vQ<@huPxH*8A?8 zxqyp~I1V5F>AicHgkX;`ZgUw*3~$HF}rfFPPm)ADP^v2J=ik zijI@=&YIyD6t|CXG1sp93bOU+N$j^ThBls;!U>9QU4pp~^AF%6cppTE6MZjS0dE`N z7M*LfEec)uz%N{*)~}9S&f#$mIV}6BKCO*3blIx1X8uQvon&6_T${<&awq8*Zkt%& zBJI*Me?*_iJNh@q8bK*vqge~+n~6SL_MD(AX~{&-xt%puJo}J4w!J2ouSStR%v0(q z+VLpWrHWmnPs6_G`rtQq`A!e-UGbr_X`Na&J)5=c-XEfiW}k1@&+^<^?3bQPU(TZZ zbbgk_-kDk^XE6*j*1O60&qN$LITuLcAahBwKFgw5Di5G5Uqbsfj zFQ#x#L0W`zcp3V7H}i|4k9RY_m=()-2KkU?;TyVoH}i|(Z_+o-;w(v-Uo0}Im2Q4n zoGIy~K8miM39HNVizBfs;qnqr+p&_fvhE>o_ZM=_iTszP0E9qs2ybas=squZj+gH`=J8L_`-~Wm4-fsu@F18Pu?Us4(2-341 zzaN(WrY>;%YI^;*{mOqIFx>v8+gIP~yEF2#+dnY=ztHVNcYFDa70PDV@B8>J<9b=! zXq-Rxjo@B|b)ubppkn)KG0CcQ1sg#OmbKoK^jVk7Uf~rt{*CY9vga+hLo1TK z_W0K~eYb_ywM*aSN#ZW&$9Z>$?Bn(q*)I>{f9&LM8WV0w zua>@;*pc&d#2@kRGv*qSZ&ZG?I7!Y*4a$$g&2~e66pm3`B16LYT1Z;kEbQY|O@7}} zMc+Z1=608I2354*%sD8J?G0?njr!?)OHs9kr&DAJ*yw4EMN`v`<&_V{wXJ zoYxZ6n?+LQBIrv**4>N$$B;qC$zySUSkcW>ej1^;&XL!mhpQaOIdFl>4a>|{(E(I$ zpG^4+`r+Skw{ndV>F4~Rx^bM1+Je4rXN>voz{ASQ)5PPHI$@lA+rc{J{evHG zp2gm|aW^UnHqPecPP)1RRlRK%@ymRbx5n%DXQ52~UxhAL7m`(pz+^l9%DU+{5Qly&McSyNc%*)NAfIOW{vt#;56od){RLTXUR?&H(<#P z<1E}G;0-A5BK(wbCTmgXdaL%cjJvO{crOYv3 zf4LkoPb=lnyDu8OZrQY!S_}JkqFrr;(XMvh9V5RoxLd(nFe|9@N$o#>9wc7g-LtfC z{q9@;dT6hWJZAks-#*5YP#@+#aU*$l&@a{{^k*+$?9pd2+`C4fCG6fT?4=dvXzMJ> z?V~I0dV6XN@f&5V?F%5cE~gi|AW5%aI#kFQ@+Dig+2vzSOwvqIp9sFA?)sQdku+1v z+2bqeRT1NAYmafYJFTu`xPL;%t4Bj|VC>#s9L7i-vhsp)U|imxy%A!sCS;Fsdw=!@ zioMd1zvv12vlk(0QtQ-S9H88OIsT9Iiod!p6j$P3!TWTH>-sD4-xP|!S{aN#>xSCQ zv99*QSl7)?vunG=KM)GV_b&F*Qgg13S9Py= zm2V8jVK4DwZm}g<^7ZFe;>FxYFke~EBKf*6*438EdeDkE*UgMqS4zB+=LYkuy8m$e zR>E5vvbVi|d%qTYM?>}+`nUH>BVNwnK5$vfXVhovIQpj+%IxAbWuZDA;bJX>kzb2V z?7NpZAhX-h*ZfApo^@w1?7RE-Yqf-_CSQI)xD zW8V{NiY6Ipx0keI{3rP@=N7aS#v>Dkxc(yHL8f?3w`R&(Zo_VQ$Zo>bb`OT^uH&5G zgs|Q0kX`CaZ+CZx?0%W7x=G?0&fA_)I-1snWHsp+MVKWW*Q~!HzY}9xB^|DBFWwrzDP9cL(E$zQ4aP$#~ma z6SBwrK!5iBRqQ2Z(^vY_G&vLC`87YAcA+b%BY2+tI2Vw2>!-C^=eXIZIQyr=IxqT;k+2c%tu)UY0&liQRxW2%B zS+CH3<@<|#mvFVxSN9$bomGIJ{iVmFk{(&P!SoIEZ|^~|S2|PM{~ON3By4@%Q-2dY z5A*xjyYW&W(OWknH-7(ZuIpt+z*(EpY20(-N$D$HZkrK5gq;Tx@DY87l@KG1BZN}PCHqY8VFH*;Pk#VdSSsF3=AUB^%9;?F!{Yy!=Y%Vn6XyA=Eby7cjBL=WHBFgQZDdP~@3&w}W{1o~kV}2@$zA)qbW30lCEENm-Qh2IUO7i;QFR@cb`l9C%Ms#~J7Mt#2tOgLS-kk@EC+(Fb%{ z86R^-e-h)@G}ii#B0bTE8F#Lfu%EvaJsI;K3#!%@bQgV>ebneUi!SS~e|*(Ba^J$u zBFbFuKQbqaJ}>BZ(9X6?L4W6Br^E2quFIKAZNyXJCvgqOQRXsajBMsNfV%ZI^+xJW zcz?X4$)%Ec)bBf~=X0s=bEx-u?75!pMh<-8K9Eb4`#`+RbB#NEVoQYn@rM!m@#YBq zSWUF2y(vO(dpkmJ-5sH~?26F6k3{Gl@pjkjlqgp>GH8T(jLQdYdq=unoM-oV*G79@ z%!4anDmvAM2>rEmyS{%7`h$uHJvW6macYE~CY%_d|7Y7k*AY{^E4P(r`snu}6ObA2 z88Rbv&2+=enwFOIHPc@d{ffwv6`}Xhn8$|9a$m>Hke$Jpt3vNZzmgDo&-`196*FbP zyE8(6k#zRf!+iT=-g$%FD-ogm|LVBcru_Qw8$&AoH%ZSj|nS*N-%c)=ce?3pze>n2?=8kOr z&!1%LHQa@hUau~AmT__}X;6xugg#*B9`t7H{q2;wF!lm>+BJ27Hzo4bEp=*0f16nM zhi@xS-yO%^yowy%l0-STMtUrXuqVP}Nq~MB505}ATx!xSQLq4-;X)YT?16c(2UcS5 zA}oPjuo#|(1<()2V($c`zhh~KiI95-SQD*Vj=%)$eF&|v83xQA%OQ9gHVIin|28}U z_rarZH>4kK*#&FO9!n#vh7E8N+zCrzJ#18U%XYXE*1~#N0~sG#s^Ltt$Fc=FVHM1R zo8VMf2^n7vUd#Cj6`Y??%J~T;oSpCp=O(P;+=LaJuTac7{iU3rP{{cS1)RIEh%*!x z+BHi)`@H9IW}s z)?=yhhPP4g1fQzHrxgG!A7_nHo#r50DFxv zA2z^wa3{=z^{^Iu+hGl?h1IYIZh_S>6?@9?2VLnWR^I$y8gJ$f_gp6Zi zov;gLK|h=d-!^+A^8uFO8&zSCI4YFJOZn* z_aUr=&9DL@~tX*Z`eyC!7lFVKw%)!!58DRzdWV zCpW=rn1H=4&;(Rj>jU!%|oXOJD=`9)b066|9CU;96J=r($m@ z%z%Y39Tvb;xJbTZZ=rmL`SKplgYhsA1|*IeDdHZu#r>lmYWM~FDmJRa>t17z#K!XBbsq?~vE~wf z@Qu5gKWMYo$@i06SVP9Xh&k+wh~Tp2-oqcPES2?qF-942FKhx`(pe)!yeV*)1FXDGkj_0fRy<^+Jx`-aqCqTT-s&>XY!!wZg z@8UOmO7(YJBbnD7SZ9h-HPxzW@$ss5Y*)7abJDzhU$*`rez&0~yc54$Yn+~m#QR+} zzD`L{wZVz1*0SB{iO27E%j4??C8=6uGJZ7jPW;#wUl)<8YUZ)3W=hB1x1F9%*gcKk zo&Ie7G<%rDEp?)*DH*CZC{xwgZ>q1r@7A7deWLhncIfjY&Es=CgYf&bI;bvUDt>3F zT4!R8=T`hVT|TJJ>?Hg%RjqX_@5GO7gX&CqxH}KK`Ghk={;v!fL>=!;b?AfI2G@yO z>O$-+!cGBxqceI){AM4`t>QQPZSE4kD{?%8@q3VIaGkjjf0p7;RgUL2ac|AwI#V%j ztiX?2vB$e#53W;J@$M1A*uc9IRlALF-iF^Tg%16;Hl@p#Y{5Ty_iN7DP35^d z_}sdMJxn#2r`^@8w5WCBPD?eqv0B`z;oEkxXWu*;e_LyLu2;3u;&0vzkGfOUQt(?* zSo1cI=LUIJhA3q`=kwecdVZeg0-kpf?goc$+8unKf}bfZraI&Qjkvv!@4NW^wtTm5 z&XzRZ&2y8gW#eaC#SD+>kg7TGGezMH{0gUTqL1I^jMdw=WOJuE+=rcJv7-!0DZ@@P z&mV@KpXd1m&qv719*1r|8hq~{9F7(VLmvsmI302#O+?rDsTh})44v*<#(4URlaDNfc zJ-DBVdx5L{->C9EOX6hG+Gp}T%5=s5Jf5wlp#Qb_A8)$szc)XY^`EgiYknA`m^9{e zhvb%7>U>Ric%l#zr$aPz*$&l&3CWjuK%J)NjA1mM4 z_a}MK%yYU)nStEO>ZhuCze?T*W&5dm zo*xN4BiBzg@LXcjJ}GqS151PNMXv8?9cak(Q^ojE!S_{sUn}43o8Q6jPafg9(xkm3 zdp*1E@C@8!(%ucp_0CnXddnlky@&Tz@;)frKe5jA4BQfWMy`L7z;m@pJH5%N$JYek zi(G%VHQtcvpH$&TE#J5BeYpXXgB?aWT6K4^FFy~y*^t%D3%e!2m-_wl`v?{CX@`{sE1D`$4`++@4e7VCZn**(vX**WNqyQxxvrvoZHd)SS5wYwkS#qk zJ(di!AzRj!BU=)3J<*xwE3zet=c&Qxj;E z${5#A&h^?86&1l6;#ugr_>GOSbu{GYoUg;(ro&ynojJO%p0hjaA$oS-yjdR3@$_`m z@?0a|Sl?a^X$x9*<)B~7LC=<>w>RaWcbnxo-kgITE=RwxCCAt|<+@AeM-p8lE|sD; z8P46Quzk48B213dy+=c4#+2S8Av5Dl?}s5XV@z-JaMv)ge<<`WfIhD&WbVTJ_Hfro z`Mz(sD+zvjXg2Hihr32$t`S{7^F^X>O!=1b^mpWJ@tc*QzVsP-ntGQp&ujmA#DcU- z^lb}r2YGtC7Fd)kw*C)$&? z9=5|LU^6U-``~ksu~XVM$k-|E1!#qC$oM#I2V^Xj_A=~(uR=fcz;^fsJOcN^X80Ct zf(PI}_zv6!55ord7g!Jf3Txp2M@Wg*U<^m;w{vEzk;W&0z>nZg*a~amaaav~unL}nm9P_5 z!1J&K>Tngj1dE}HF1Zj!!U7l#^I;sE2M5DEI1D=BNH`VV2s2;`Ooz9?RA__AZ~{z# zw?QkM1kF%`JrU$T?1I_Q4`;x3I13(ub73>Q8#cjj!hP^wxC`C~8{iUH4}Sn_;WAha zAAnVGC9H%G!wUEqEP<=xDp(GS;S;bBu7?HiNthqu`G(7(O?!s5anG{;?Ky|0ZF6W- zUf>(@Cea<_@Et)8dpXFVuLham2{P)9AP4LXGV-k;BMt;TcI z&nNRtp3`|I&zYGfPp8x5X~{BqTBn*kZJ8!ddxpt#Y@*3?Jl*8^c&y2DBGu&SN;Y}U zC7C?u6HT5A2`10Qc$25wYVzn&CeNp4lc$GsNIvUPJ^#3kO zKV)1l=ZJV$!FI@)9v!^L%b3u61TvPFb4$F82j$!nZ#6sw84Jp}CEj}YHe?*=-3NEU z-Ebe=1)E?aY=#Z+2;2$VVLkN2?XU~h!X8)y85g3P_jno4d$&NwgmQL`m$4voLmn?< zKsm#PGT>pp#pBI@6>usng-%!k8RvN)fsF6Gt6)A{0U6JEi(w&L3X5SOTm=hY30wp# z;6hjl^I;X72diNotc5cn;|e(w$J+q2AmazlkRdH#Cfo-zU=y4On_)UU0>?teb*yNHPm=kP1KkO3o5Sy2tRBP^8lM~ z7u+Z2NWu@B#T-HSVY`^kgdcW^*+lpueP_xn;fM4i*|%r&(tl)r+S6j5!9DY{JZ;Uh zJnikXI9rVV8~x&s=?kBr|2vNL=pwh26tioftoy0RVPB(N_n9O0Xw9zq=m$klg7kx; zZ-exMq9;K5LD4oyKPdVZNIxh#1=0_So(|~;MQ20$LD4fH{h;VskbY3~T-X!kiM|_l z!EZu8ycf2^``{6{1UADTz$Um1?t>4&U2r9AfDglZ_!z8(t6?=PhgI+iSP9p|3iu=} zfiAcTJ_C#4v#=082N%I@Fdx1E^Pn3#;SM+zz6>+qt1umUU@CkACc(Wh0lo#T@BlQ! zcVN!|PxN8f1^)v5@UO5Pegu!eR@e-W!zSp1``{_K8+O75cplb69oE82uo|k_#2-e& zN*E2-!Z=t02g6lx7%YY(VIjN`E`ljAAKn7zK^t_!2`~%Z2B*SFFav5Z9ZrX-FdHVp z8889Pg7I)JG{d`LPbB#dyWqXh5ATB~;1YNQ{s1<^Wv~f80QbR_a5sDy?t+iO2DlpT zgypanJ^`!YdRPUYgq6?*E8sJ*1U?H_!RKHx+y)Eb3$OsXVLsde=fRg@9()x#p$ATd zZ@>(=7pB9vU@ANSli@os0Um}{_!nq~e}z2}HJP-Fl z9qxjcU;|VglnWRMYhg63hH_c0uOzqo0AylSV%atKoC73T}hU z??=A?E1(;e!X0oGd>IzQS79Oaz(w#4m=E{DJopxz2@gOgdHXd{k0v_zjn8-B{64eNAhL(e<31l^%UU2C_^kotin$shI{l zHFcO%Q${+q!8ba!K`Blx{uZY;(B{FXV(uXlvL-iP${n(6BuqOaFPU+-=Ddi&_> z?WV7{i@shXeZ2_#6VxkY?^mwZv^J3mja3-vT zd2lVvhZS%UEQN)z1Qx?b;3~KZmckXV0v1E&zoh@_t%8M+xi8j^&}V~-U@cq-nK$v~ z!+JOmGH2q=gS+5N$Xp3)m_6Pmm<5~RRCokt!giPenFsSugk3Nl2H;p|rk|J!tuPrf zev-+xr>cI`G)R**gEg#=tFbD&tQ`!m zLzK0H7fW*VuUudaCwkabrZKMlk7sM52ipG=*ad$C{qR9}0xpNF^Vt7Gc@MuQ@8Nf0 zJN!1>g}raV|I6OH$5mP7i~rBwTV=!clAWrk^w$Z**zD3zl!W9FIE_?8!% z9AnDL43L?;VA&SS34Rk9r-V&pX5}I01jw00F>jp7%5#!S%7$$!qQWC8zxU_ad+W}m zn(v(X{w}ZiW4+$bWqqF8TF<(C)@Oaz7C0T|!uw$koC2|%s-6U~m#R*H*h^La9G1Xw zFqwE`U=+LyM#4KF?Ud>fFq?R{!VEYZE`>M4#c(LB=}}fa818@rU`c<6z zU!TXRhY!W6U+;@ktM}le`_nje&(1jYOYB)|K8{oOeiWyE^?sasMvkYSo%Jb>|ClYUPSJ^&obzt@BOV!DkZ~)AuPm z_!M-)C*TqIIIMz;;8Ef|3TxrRa6fzq?t%}(WyJdxOoP+mYn+oXd#A+|{eKY>;7W0+37kKi2mKBUck@Lgzyc342Xw_z@P z6Xw9z;YyeX+j^88d=)mr^{^Jc1gqd0IGcDcz!`7_Ooq=xD>PcwFD@sj7))zlT!8d{ zzc>%+|9)`>GG_6`Nk~8Vix$|{L;K=5bixMM2)~B?;8&1-@E4y$`oUiug7kyG*azEu z%D&hmG-+Ra3Y~B#Y=WP_Bk*HbLcEV)E_@$m!*^jiw8L%0dmEO(H{oXZIxK*BFp_w$ zLVvg(THs5ttykF>Yv5Aiy#N=(6)+V(4`-XSQE&GcJ&JMrX^eR-VXW(q`uN%q`@iYq zYD4T_2;UrH?|?&Me^EQ6@dn1vhS*z!j9M#WW(OGq-OAYK)7WOo@dvQU8nt4G{f~@! zMj= zzr(oVZ&%!4-~Xn@0w=lZQrv~p^U+nh<2FRdM(7(t9p+@`Geh(w8?mGvGqE9 zNTF;}D5J22N}W(PnYc1;S3foZTQ7s%m$AEwuNCz_8+gv+ih3eCL0iRposLb=%#5L) zOia+Kc|T|VgtA495#yuD{+AZM%}MO7N;t;#%vpZ+|2U(l`_FUl9TRk0FY_ip`_2oB zT6tMf_ZqSLsF_eUg}7o9aAI)+wqCvMeq8H7FN3)xl)XTb??mv^+eRfvK%>vO+e*vgIaMb z*B-&WlPBsnU}6(+vP5jX`r0jA>%bjc>n>!+aBu8ZVh#6xiF?<|F}Zg?`+@b`w{b$*{#T)X zZ)^kF*w1tApI(`u9eAB>xi_`}{kV=JhkL%sb#giPw(H*Vtxp%QZ)aa@1FRFv4!nyk zn0{}@{?SVxcwhGAzU-ryKJbxyUu*-?+5ed5u1e4-j}g^fA+s3EwLl2{MvQgV{@fn)1PZLa6W+Z$K|}+<|>H&7Prk+^rW)N zlVTg?vbkzK<)?kyMnFgX*%^awgVHCnkG<78iF(jwQ&zeOTLtvi2QToB*tt|(zG`bG zwhE;N&X2TGe_+cH#ra-h%MiC-w^bO+zMs)$tB}s~_ciL@Ky1XC+x@hbPCrfb-Ma_4 zZHZR++FQ_l?-}f6_k#|6&rl{nZ7vOmJ8 zju6`nbmRx`kmnM+pZ<1dm!EdRWYL`H%4_cOvim__UNgqa?gw3Y%{ZfaBHOC%{kgZ@ zPj8pq&pNAClfe00&QEgL{p66(PhkJDcZyNXp)tr|G50$Qa+#9&pjUId@bi6mGg1y z_j2!(*r@DVWK{QZ?~~}&_dPClIbx%MJr6qdeNVXTc-HcNpG2>|?%QH^DoGGx4q9&_Sd-WeHdrh|B~3{xb1x`iDmoO%f8#* z$DjRI-TRyPrz6?VBmD|Uuh(72UH`PpcJtI`uKgzGOE~|woR3>SQqp%D`*x!`Qqng) zk#>?ReNRb#%x3?6mrc#7EcSER|H!?+iTx7xKPJCo=Th;B>$u1EMwiE~=ipAxWA9S& zshoG`=Qj5DxbrjP5f%Hc=I1)bBq|QczT5VOv5AV$-TV6g%l=nJ{@)4wzpmq+|5yG8 zM?Z^p+TWrvE~iyDhz%Zfg>!;-;5ge-hPAQXBHNTz@ zuol!#Kb|9P0`Bk4&b4owQo`}e=)@*xA?qbYROaT5V4m1y<|D@%%+43@)Yl%GF22Nu z-Dyk-znHbAz-Vx;em^U34c~9dB|H1Xk6)b^LVV>DQ;LHB$Lb65S~2tNh7GEW@yzQR zwmLIrn2qonVH2U4u$53os3hzr93*^6s3$ZNS_vA#kQFn`m(ZUONC+WB5JnMHLOfwI zVH#l;VIE;2VF}?GLKa~)!A5wEu!&Gi*h(lPR1$U*4idg3)DxNstptr=Si$`X{Rx4D z5JCiD6hS4#6DAX;5oQtQ5f&1b5S}4q5mpmygx3h02*rf0gfc=UVK?C*;Y&h2p_$N1 z&%lDZ|P zl=h$`ZTlL^!q6n<(Nc#n_g~7x5$}4Hh4|zXe^$HE4c4|8wCa-v?XPDHTC-k8`a1Wn zHu1gvouU(r{MluFZtdwn{L%JMS}m;kEPi?=jl>Uu(O}G(qwu{SlycLU6LE3H8uP-1 z_XP7T6@1AClO_hvCE>qN(ooVx)<%rb)5V-KnYbh5I$X~W&LK_WCX&viNvxy?e$-@M zujf9_i(M&yHsZ^`&s7)6+5^?e$_A;|T3B;I(rkm#zovmX?lSj#(1MVALb$j1+QY|Q zt3sUS;c><0OSx;rcj6${Fo{)+&Kk)#SN!=I?H%uQZEPhEj39r-y7N(Q^3jXT`6o~6 z`Kqttn^VL7W8|0EKCWZ3pVkLIYur1szhaBLn6oAgpKca~Y=qo zCTnAf+d+L^&AfeV@H8{?__4v$^nG+$ck``J;%gua-wl=c=lA%OxC8(A`&n;tFY8TS zyLJHcoO0G0`s`V2=(p#^xAx|~v%Dfd3%~mBELZYZxc%$jhWxjtKFMou{|sNH*h@3# z#L3)`X6Am#Jd6s~9Aj-p`h$b)%)`+dEEBcHF6@wL7aqg5<+u|YWZHuHZ{SaZZ&1&B zH}I~Fyw^88_c7k_IPcNKJGDK0V}2KFDYn18G0$(9lJX?~?34KJnCtf4vFVKX?(nzo z#4kufro|>c9L1mG@+8)f<$qGhzk>`N+n-z%SFC^QIQ|*F?N@#AYt8e?|N1f4@SN+M zqHK_VMSPCT#`mF-G<&njFts1?y#Is!{0DM;f$>IsPzUCWFx*&UxxtXLAVMjY|7tw> zw7@jf`3~y`t>QX!@I|tRe1bp3^}l3a{;f!!&B?#C$}}{`e5q)S#9zHFFR#F)w3^9Z z3ytQSDJFBxoEW9GH~t~S2HJuQZLJn3K0WU>SZcndE=V@?fxYdwQI;2+qkO@K$U8li zg9ZGbA(SgKcw|;Uoj)`$#N(EW&h{<<@bAjfBtV-N8<+8(fBRvXq;vpjZ(u6 zIp6YMqwCmH`qpQ;S^8Q|!yms^4*#{^iMKCaIe0YQwI1#z)~7j29=zVOi0`MP;y(tz z5+~hj~QF8fI%dH15rudLDa0q?((mu1Am z2+#Ph*~WvOe0Hj&YvTfZP0P3WmU2__j`_dib>Cn`reAej>kr7|e{23^$`d^g`q<3B zo~y@qkVm_VKb!dY37XELP=}~upE3-+)8hCRKlQm)p2Jn9_2XZ;p<|W!&Dm5DvyJx_zl(3c zdfqF9|M9pF|D{)X>iH)xmGaFV!sp42caAAC{o;GyNWt$HW#~XpUXXR5>ha0tohNL3 zcj==Hrk&P6UiN%TY-Tm-r}QNB;=O&SvoGE%>)G_MX9k7fd3piu(TZcn zl*hQXeqGY>u}g+&a<76c}z_XnuZ6NoN^Q-DR zwilqsy02dH0zM#54bkdIBZaz9)*KAsS!LZp@soc6pH>&~ZPm%TMg!jO+So)nDs5iz z8GFrKnFf%fb1gR+j8_y+D_Kg+YU@l1}?;d&p=Y{ch3a^i28e7)Y+u&_h^ zf63?KXIPWxq^@`Q8aCKpr0pl`6v*0a9lXb|Q3`qPr~RYPBdg~tLob_odA#~p%A^l> z_Oa=HD|z?s{?*?i7r?pqDo+0c-w*+bp{Q|W{|3K}V zfI#h7P@r}^I8bW}4b-piT2E<+U9KtDlWV!w2J^Si;#*_8s5$lr^6pm6Q46c!;Xv)e z5w^?OJ{qW9Y-F1;7e^RmOvVuj55tj=@g7GMWDLVG78b&2$heUs7OsR=m;)0b<0Xz{ zm;tB4WpD;G@fM&eirx4;~@8D`{wV81u--W%@g_P0Fj3@byGChM`sOHEe4&yA2 zjc_~6hwESg%!P$;Bi!tD?GnB@ZTn`f9r1{-Ykj5d+;4~bIm(eCzdEW&wet0?UOmqAzv}uRrI4Cay3`1(VXzM#EFY0N7QNACNeoph{ z?Q7PgEx2dSC09FI+TvZ*xzg5^w)ol08)*v%IL%u(<{6}IM!z+UHSRKLmwEb~)RQlJ z+Pt%hyEf{22+Hy=C%OEm>iIp(mvtM^r&#!onfPj^Jg%n>ZJzAiMQa2-^uUSVcUr(dFMkY?VQ23Ev zY%yulr&+^VFD;a((uOFaZ#3BylyeXLs}|}9KjZ0-qz+qPbk$v(sJErPA!Vqv1JZf+ z?#?~Nx!`j2jr4;Y?tImy=POrU(DMNQt>`Aa^S~EHT^r>&lIU}o>7xa^^Op3{%8i~r z+910;`vUr73+azZ-$?pl;q(CvhQJz6-jX)7_q8jzwkLnZ^L$bU{Vn-x{jH=Gc8>Kc z(P`%J9o_A-AIo16@}0`T0=h&_tCavofAw&O9r~8seo0pk1@g3}oew4W?+HSU+eR^n&Q=I-V;V#>` zrP3BiEZc)WX7B4c{JX!N#{HYALz{V~7V<+2&nWk>a1STNX| zLhf10Jw5$92iNkX2R%!}UK zwNajJ3d&n0p-Q>?U@|_R) zauH=5b)>$wx73?`>30j$;*}JR>uY-Za_l^9XGeR+`(j6s6r-e|gFPg^yXAXIpW%A{ zUQ3lplR8A+sfD&`hSATt;B9OU##0`bTeZpk{d1%pKYp59Z%?`m6VxA{}1s^WiH z(h)t5N9UlYqkAkt(s2=KnADZI#*A(>R`gxQRe9yc0B0KMC}p~9ow5M>o3cKh_*4(D z?|R$i_g;KRw@W*ZG?ln*=&Q^9l-9EW1w%XdS6N6%yTHFHYtpx$veGw^|5h0&{jMm& zT%WirI%@C#YO!7V4K5!t2GUZ-ujGG!nKIhbj`Nhy3zR#@O5a+(gY=`j>%*2$P&RC8 zd#ZRH?YMrlds2K>o|FMOv|~iq<#6|pF48}ezLPI`M%q#l zhRBWrANu>0&k>Z*zSxocm>+ZtYkrCkbdwKlB-)MA_UlcXu@7y=cNwpGhw-W(^MO9h z-DbR2Zi=B_w?5Fv@Lh6s{e6)AdA`A)X*c}YaC*BZZ?-jAwFhJjgZD0_d=x+FPAGoT zhtY?R<04~s zo_ayX@TC8v>)Q>(ud~+uQ2L>)%T8ZT)?`0UA5Q$HZ+^|QmZbrmlIU_w#OXoa?nxZ_ z-RPHoXJOpM=jynNcb@*3_HVj79d6`XT`zxsaSLq%ce_Kjk(?%J`3bOCUK1|xeW<$dI8#rE0KJM;0Z>JnACx55G&&c0%$=`2~4{t*^y&_&bM zRd$(4OFz;gdAT`1X?b=2BJ#W+d43UjzD4i*`_azw-NXEaJ-%;M=Z5oND5POH|A@hz zmS*IeO}@$I+jr+VNXt5R+121GyAGJ+d)xG~D{^Oy*dY9rQ@u%o${#(|wqbyRK%GfsQ&vaui+k!=tShG(Vtx;xCP9HEE zXuq5MUF~<#3uI-FPru9h%-NN*wDz1?+Bs|*q`gs;up!StTUD-?lH0YB^;TL>V3Xj; zo~6mSKymh<4s;t^o7cr_2I}Y)*ucI)JNX92-|U6yl!Y@oJnQEaSxpB+L|;#NC~$ZOu;tF!#7UP8pdc?Jg z-BDd)idIiMFhm({D`cESuK7dh=DE&zuj@# zZBV(t_wnaBu8+Oky#}cZ%r46*Go2%#(KCiSu}jAe{c)(#Q> zy1|S=Rua#>Mz4%{wuWGz^y>l2z?I3y57G(8+DwdhVAti=b=A=htEc_dz?cdBmGy>U z%7(b#8OP#B!Ja|i_&9wc`($IvS;he~=ub}JUcQ&I*Njk1S8O6ZZDih0UqfgR&qn`U zw~?$!G+wch%tSU8`@ay5Eu_ybc7rYS*E6sS^J5L>2<#LiuoaN9CxL6odrpF4k8-{B zh`L*gNY*Lxw6{a3tE9a>9O~Dg&hl<=d)HYWTe+W7PaUA{__2CQ|Ihe0lFDQpFy(vy zS=PU~^p_Lkl?|0WUHuHtH+-3W&o_J{=IS?$XL~Z=WjN#Jjg&K~lrv4FWs`1GC2484 z|Gu|N$MgdHHdxtE@rZG3;UgEYuVXBiHbbNHs$MvhdtcEDd)YtUB*(q%9|L6{o4^e6 zl=StJLv-7@LtV6Oy3mn$Y=zPvOtweb^55Ctbgzb7`EQ zt$UO5OxjBHBkGU~SIqf?rYXgNzKSL`eD&Pt8Dl_=gR%VWH!B~s^RD5!2G+V0z1VAc zGOr;bs|RCGLu8J_%fkYh;~@QA#-oO@jx7Js=_!VuwwC=vG`3%k`)dXE<11XpSyQp) z2xIc0JFyAR9v^How5~W|OljsDN6_cGClLKF>jlX=WePd~(FwTLDH~$HmG#={qAgl| ztVL_ETC_nk5{d&^d+0U#-$lc(>cTx^_t%bvNPqreY$9WaV9Q0B7aOj$ZlZre+t4g5cW+&Aflr1idW_1G@?ICWa8eR9&Wj*)E8mQkx^o>Tw&6Q!-A2-iqY_oxWrp!4K-C0X3Yp;`b zx%8v;=c=gFpKBA(`km(r#6BMV%$4Wje%C&iXPnC;_fy8Yq>h*)bp+o*#HcuyI}DuLc(SbaI~t*;YZkA*n2`LFb|y!!y&{jC4-wmCYXI>yZF(Frv$ zW`2$_^RtYZYmAwDbisN*%iD&)G*SD8G4W%Jo9p($^viQ!A)kBO2V)!f4gc~n>;%O= zSo8^=|8s0(*N0-8>9LR2%LxAMYUvLl`6`p6Bzv-#+wyo;H}==h}ALaGpo5bG6;Z`Y7wJ%3RxS z8%+G`wcBpscpGCaV(*iL?r#odUNgE%u}f}FrB6s%aAJ%xr3D>r8)dvcw$`YRU$C}2 z{V?8b73H6DQ)P_)PLzo<#&G5R=npwk$6>$eWk+(IJP@^k@q?9PYzqAa$5iIG(eG1O zuePn~Srz^5=w`-1#hxe@U5!%t$GmVao1%lPu}=N5B#VF6qcaLOUEh}I%9`ane9FX* zNNkYWu|X1D5qf3pkqq{wq@B#4tJ{&tdgWJbqePD+wiuEg$H)V7jmntcQ>MjTQ>N9^ zR+90+|z&n`%rc!q16}gC=!7 zUF$f)x5g)m_>wNdFN*k*F2Xm8_>wNdKZ^K}F2YBO_>eBbPm1`EF2Yxe_>eAo9i~Bi ztB4QjBK)j~59uO&u80rmqIY33#21VBkS@Y6i};W(!bgkvkS@aBNPI{a?S!H5Qy2vI zK!3OoTHqmQf}cbDq7;1v+u+yG2^(M|JPwb*7FY{U!Wwu6R>AYI9A1Fi;AL0>jq$uU z>;?0oAIyb)VGbMsSHi(?85|1J;mt4&4u`4mRyZ4ufHUA7a4NhDTHzQN3&+7|_;VNq z6JR8q1ViBz7zFQ!{%|_%2Y&@k@Ii?0prVH$zJrP$hWHLDdKBV2sAv&90w0I9@CjH0 zpMq8JSy&FAhxiaGS^>Ag7a+cbiq^nF_!7*A>tQZ@73RP^mpP>(He;F#G;oVz7vbqLwqL|y$bQ2_(@)Z`sddZ)E#dosAX>_sQ+f?IAvBq zsf+(pey{6~nza9~`Mz$)&tIF21@JvO@b#zR=dTkVe~g=zUG6fJ>Ana%q4*+fhvJK{ z4T>+qQ&4;nI-&R?Y=Yv8un~$c!lO`p5gvi!i|{ZMUxc+#d=c)4rU}SG3)}_87hx6j zhviUw5$=HEi*P#>UxeFWB-{d{U?G)8IOo4s+l# zxDsZ=Y?uQxU@lw+^Wjoh2-9H+Tnx9tG`IuKhgC2Y*1$Qi7S4u8;7r&EXFw;M3fo{Z z?1YKXG?90J78nctVKl_gjqVFO6h^Th2}i;x7zv|c7{o`4?h88^2D6Wk6x|p03>d&Z zK2mgF*r~7|`)SYu)1i-{ta%yCCWtTW9GENH_`=SIg|dw=>@9GcY~u@i2gFB;?hCsL z*2p%#uxsHF*~S;P_~&-YHomaiV5e;33)?h_XCR0#Y=0Oe+xWr`g^{w2FYG87E!+6Q zj)hj)#uxTfI77Dag*_Xl$~L~R(_p%6;|qHk#3zaF3p)qq$~L~R^I@TE;|se4Zj)_% zVVA=y*~S-k4Xl-Id|@Afjk1j|Y$t4!ZG2&OLX-Hm#uv5)`pY)Hu!CTzY~u?%5=O~3 zzObXARkrbkoeXElHomZD!&KSE7j_yn;R_r4uKM)EvW8`eWsTXiyK)lCj^!to9WP8Q zYbr@Bn@@Y#dDN=gk5=Q4M(i+sFD2FP#y6GkrC-$U#y^$sr3Y$vza*SnyBoh$zLyr% z?#4Hj@1@_??#35YHNLFOm!7VzeqB+;epQ#pAC)eTFDhOBT_N)Lq|)W_L#4~(i>ey` zRl58qirQ?MpoMe)YWz-xbARzS70&&u_X+3LR^w|bocmYfZz`PoSL1VPH-4(Z<^EqI zPa9j8$Ip~5j~^*r{-h9jd`Ri?_>t1(@gKDtzf`*XWkpTu;@-UskbC??m3;E&queNB(0W@*fG2e_x3FyF%pcLge2@{!QfR@9EF~x*SJ7 zPl)`hLgd#Ak$*{u{2C$hFCf3dpze8C(*Eh%>gTx@HrTFjA>W8=;U7l7)_I|P3nAA! zDdbu$Laue3Z`r`NM6aaF4Xk{!`?4B9Bf=m;XeLbN`Qp z$bTf1Zy`kfT_N&zA@Xk{|0eQ{6Et1^bvcfFo)Gz0h4L+g$iE~+evJ_M7m#0JRBIoW zeEl@v!l+i`w?_2WyYX`)V+j`YYAx6m;ftg!*U*BFa|$}nI74QP6P<1v`ir?et)+2US>xlgR*V-L;%02}9q3=1XX5jS zIObb==(2JBGh^oVoJib15cdUi9*pgU5;v8&OD)=5!)N2;vQ~|EgmFBIwCexSWOF7QCqoao7hdu9Mc0I$i%oua>MDlqs zYi-4<9{q&5FyR?T_Q+=(xyXvX`z_aau9I(;#y6WgD>J6KfU(RHuG_?Q+wjN4^JLys z5%Vq2^TtiwSDu@>74i;qA7Otx*Q!FMi)XO()-oe1V&32zxW22OE8Y_J_Y>y`aRac~ z2qoU##Jk%a@0dH@^30f3^;Wg0-lRI5#2-oA*xs7ha*JJ^$8UqoA@|HPGGqJhVE&N8 zIGS1c?p!5p95zRduK7rMyteDdJ0u`~IvBU@A$mq^7)hJ073eA>OhY)%IK_Q8=F6HK5nW@)m<@5? zd5$c`=tK`y#dC-+561spbFk1ueIoCWJwdzs9>Z8)y)2y1_AVr>reV*gxIBwqdJ znj)tHC% zfst?}jDn(bjE16fv_jE2CPUFViVjb7jx*q5C_20}mc>y3p~P;`zpa3rjSk?;r%ga2HAk2Dqi z-T%MW-`mYxEk{ODS&~^9lPP1|?s?sDA9iCK9F6aSSbP^)@m-LJ?}B7}7fi)>!3=yC z%uLoi{c7gAx$Mw44YEDCmV1bu&0qSv`gz;MufbLO2?hHihmULhWf`-OzPj|w^LU;I zt9)%cus0H)SOXb{o{LQoHrn6wNl`Uc*-(Bnz8+ zzea4BDtlu)=jRL|p3F%q#*alTW7Tu9fr+I5A;&!L@I%isjJV9rntn6%?Vq&X?~S@c za$T|A@yrv#2JO%s?q7kQzDV)o!~NHC|Fvw3A0P2uBQ`~H9nW*bBOlIt%3M)bf9w12 zx{7zLWvv%SelqhIdC!f>Vl&WMFYlR~?0Qe;S?lk~^<@5^AJ3@UW6`ILs5IIv!|D!U z)8wqg?`DJ{PL0KX(k8x%o(D4hY+2Zm8I^Ai;dAJ8YMif4=4DS~UcJmcImcX>3)m5e zpOv~^%GgfvZzAbi-y7TPUUtU%*H0`Y&6|3=`j5SoF^-je^tG}bTPADgN+xS(3ny!0 z2UKKsKmRS*TVl&C&mU_T>a4`JQGXW2&sL9(%eBvP$90}1)9Cdq@%^tn%W!#?#QyrT z6ovCFP5oWZ5qe|2bXE&07?qq&&T7sqT+5 zlC<}><4eJQ|15pj@26G0o>n2GrJkqwR>SZ`Cwc1Lw5xeZ{2;9+y&~cV*ow0QbQ|Nk zFl_P+tH$ejKWl)^ZVK$EV@|=atkvTs-*|jLCSeQX8-rcxua(w!=$m`&ggVicy%CCC zx1=w5$3WhBv&wL=5uHaWc9R~TNXPkRKD>9-oyrFC^LpKWGbTYb_q=oL9efA#tnb?o z)sFe;_Cwu12hSyToYy|b6rMwDx5d85V?WdvAC2F6Hr>a}Ot)=m`geS~Y~k7TclZHVjn5?K4ME`jvs6j`yYMV z5Ma~i@Q^NwB{QZ&)*;}%lwkqb!e>tZ<#3@^D-BWJbA1fzeW6S9oUXF z?YL@}x}0Z{xuqW4RE7V?5VvCbQjTBbxNN`9wr9@q61HU?h(5nXQA!naW=!x9g*g@9 z9MbK}Hv1Io&zUvY#`>Pc;bLMr)fdKOo6T%VU7+N0Q!VJg=1%)9}% zx(s7+XS$*ILaI_+hn}Y%y}8&K$^4H-{*!Zr_FYzd%LM4YU^d-Me0UhJW))`Ibysm^ejivrf@|XS!OxH6y2&Z_9r|`Sx7*<=c&7n@IU4<)hf? z$=rA!?(e-{i~kZ&`B_ex8cCUVR`N36pbh&qnS)%-^SHhp_G^4IJ)dpzwRz?;>2;Q3 zvGt%1>q#E&(TDGpKiQRkHbTiixlr=YIw<)k2TJ}~2_^qzL&-lGQ1Z_*DEVh8l>Czp zCI2jjl7G^mQtSRQG$ZEV z;s)zJ?OeL^fP1x5ax69E>b*j{m;XlMR(Zu8*?rtEiJNJradh4W;N7G>jZ&PhEgz8Zh19-Zr#8Pg`V+q6@}PoUJJ*d{_$J*uS{iaTd0#d_N~&fgY78P|YsoU{DrQkS~wP_f}1Y;U4YsoqQ78AX{P zb>~PZWnUzevM&ru*%u0>>E`N1&8_hoO{xwNT2w{ZOwvUH&v( zb>|@7c`$Y75Z*b6^uzw+HYo?CejVCv-8qRkQhv&KuxET&%2JuzSWVwb|Gw_N@bazS z9e=$t*Fwhqr0)GGe#MxRB6BUSoxjq7O;8){p|jW`G+_g99J`fc*q(fY9Z(~-ET@>0 ze7e@Ewc;x!l|Iq`X&+=0sh_d4)5q*e=wDVFf1!H5nd7|A*y_vinz^T9YnC|J(fi?N zek*nS9Qvbw&%5Hg`HGLTWcnlC^Fze%zW4kP-Jc7`bbl_$dFF}ua?JCrYk8*sV{=BX zna@o*b-+x&U!TuSe@t($e8(3>fAZ=LaCTES|qanE=0CWi0p?#WVZ^DEfpeL zEJXG#MZIN{qOKCzKM9e2O^EC(LS$`1WM32_yIP3s9~AXxS&F(qWS0w(eMX4vlR{*d z2$B7b5ZQ%7WFJw~(0SOFiR`b1$j%ZX`%59R(}c+0Cq#C#5ZQ@}Iy@fxG?9%FBC86K zy<3RvC?T@93z3ZwB72LXhJ+~UFa!N2?7YGQjp{1wyut?wk?Su+u8$BoUmhpgvj3~M1Ham`H9HKBadyBE*~SukynMt-z`Lblo0vbg~&$;k-r7` z5Q93xAphvowc$6h<{@^9;ejTI{2(Fn{e{T)5hCv^M82m<)qR!eX>a5j$ZA4l&k2!j z6(aks5ZPuSvd36!uimJ(G)~a;d;hl_NB&D8@_!W~e^7}0XF}w63z7c|@|DOtCuq9- zzsqst%Y?{(C`5j%5cyIe^2I{r-$H&9@@*3|UH(sU9QoIT$iE^)-X=u;MIrL5g~C?WE<3z3fyB7Y0=Ax3qyLH^^XNqd)lTX>8K zJ2$zGP_84C>j>pKLb;Amu47W8LQLvC2FVjo*Lrl*;WwF7X{&_C6A!LJ-!67-cN}*0 zuSNgZUH`db)OGsLhQ8kY=L4y6ezu>X&yoJ~XkXg*VdyQS4H*ih4H*oj4H*Qb4H*EX z4e1Z14cQM$8`1)$4e0}=4QYbXhU{{;Av@h|$aZ%dvJFcA`4p5kq!UUTvI$BXvJpxf z@+g!x%bUkCmv^~Rj1R4Wwb&W{7wyRl*5_0$ z^f}gUeok!@dL~*tJY`gu+f34cnm=w!zu( z6ikOsm;sw$Hf)5s@F*;VN8k>47*@erSPS>VHdq5qzRb&j{;&#egXORa?toT5=4HTW zxDB%Qv||fo?P*5|WbJ9kX4pvlLRbsa6ZP~i7r(H2U(IBHhNwJCiol=(kde=rz`Y$vpS^@tXel7-@U61 zNkQn0a@QVRF5%UE#ceYkQt?HP4vwyiz=YXIv%s>%+QIw2wu9BYtL? z^S<7U|9Se^ty%8*oT7U#~mSUUe*?vT^P4aBtqSz8;yD8T83*qKi+ce?)Sle`ASgdV^ z&<8tK+RZa2E2Y!o4W)^J#?p!XO{G@f9;NYyo~6x&*hX%~mlE+5#sm(bH}>cR>wJ0? zHy2JoKTO!n+LifG#we$f_Of;*GUgDY%~>)*ll3c|Uh7vn7f&ve^(&n}Vg1UJBj{I7 zP149`wjr$9=I}Au0)$OQ*O*hIQP-(3w~%tmy)FOQ5%;$IdxzcI^54}OZ9yWx-+fHV z&>Ev{s2tm6v<(tg8Et{E03S(vqm+~a#;o-Ju#f0WO!ntU&jr$t^D#1qTb{*$Umw_L zaLFGv*apk~5rgYl4;x(1UTe^=%bYIP{b~%ZXP0N(<=&QOuX1n8^On1}rL5TD-Zrtl z-M!6v_008hT}R4~E$(e8LrUD+QVwl)Z%f%!=-&2cyTH9|VmsfxE#=xq_qLRE__dJr z^7Qg=oqJo##2ojwl#?sn+qrCKySJr0&2Vo^8N1BAozC`B_qLS9>F#YS+l$@X(QK!= zw?o;U@7@k#J2DBKOHa+aYz&YzahCz{qh!3zRj;ge*Wz`{1bNz3d!(9K`{4m#l78d6E&zf#^ z{b!qRb^T}aZ@v1TG1fO@_YI}fD*KlvzBZtAqRqe5x_V$~eAb}v{bwDYUGtyGKPLZI z*mc&3O^x`w|FJ>xkBwz+W9mY+-MUD<7`jMx1QX<+3WAa+1EAzne@MRU><29pdTJMZ z7OCe4}3i*fF>80St4)twfqJ1tZ_E&P*}(*9OMsZWrxw5PwR)MV*V zYA}7jtlRiErNQ{WZ+%MY@(&_NgN=!#0c{-Xa?)TqX+Y4^0P1M~^)!Hb8bFH#NrUC2 z!E(~zIXw;hSZ8Vp-&b#Yp&PE~MmIc}bQvf15ta$vjuXTY$5RJHuSEY@c!zC_q*?SN z+G~@vmif24(k$$DSDH25=1Q~8x4F`6{%x)_3%kvgW=)Z9+MfNmdNK8J)iH-4X*U~6+RcQLb~B)) z-Bg%NkhDvDTs>!fT-9P9*VE23{?x#D4)KwMKjZ=726SS((7E-YT~Gu2!-C0W=!2eN&M&$+_7B4^8QZ3OL#Ly+ zC(!X|%pum$`RMJ5@Jiy-jzA~Gcr{evHW&kGOStZ3R2ge@ZTB>)UFed#tRrlfmQ5@^ zJ9R?w`I*+@jyVa%7v{$oUtIiYQH5#F=gm3sT2!T?W?<)p9w{Z9I%6+-O*uY}FvR`-^k3xtlX!peJ$L-C?b|;T->qyX zQDzRira!XD-R3`wZ+98rZ9!-7Y&T`AcU*@%u0L_(=r8cEea{~6C~c4{dFBN%?_LWJ8K}<<^8L=- zpeJ3nJnp$cf96?E^G#&E9_j1o`2j69ST~iULk1;M{?XNn@QL$5ybxXu=wD{c77-JM$9T{Wvj4$SL z|LfW5yvT7Gr>sMNB4do(*!PSvzQFeN#u&}$X?)SwG#C05V*~bH1hzWNVJ}|IF~+jq zQxtz&bringHuo%cL@K&3sqfh8G~Q)vbKB`$Bp+O0j4=z@v;0${OKQYc#Wl_rz&P6w z#ufwZTmM4cS~W?-KZ@okhoT?aJW99mtjk#uUdeWtdpn!$raN76ma)Cry}eZ8 zySLLNzI%JI#2@L3pD6L&+g6G1-j0>{?(MM>{|;CDs1-4~A1vL@X0Xfuv2JG*=(4k6 z-1Oh^!L8fb@b7eIXA>=cx}|?eo47t|XH4DLoiT>28%pbA*|y4d|I&JVjMw3d&X6^r zv_75frLyf`TEC3#Y}p=ITECL*9N8XJirqMMMsL0y^y;(TQgcmPnmR)24AFVCP=`1g zN7b-C9RIS5F<+K)u#To%Rj&*)i&} zj=o&Ba}J19V=r8-Pv<|&KPVPV;eu#p4&^jC@Gg18}05|RWjzw zH@&iso9X*L*b*ci`?<=1e`I;{2G4T6@+Obtj?l5T+#WDFQEN_2)LNSEcC|$}-|cFP z&cEB$77e@G)fR0U?P`l|9_?z2&L8b+i-wJM>rA5DI+G~3&LqmMGl}|}`VTAjT$As} zN8R?}LdX2w{fB?0>_5Msd>8tZ+HP8^UTl0ybsQx~zB>XX-yMdM?`omsyZx|+Ao*_B zQ|h^@r&O){DOdmDovxI5TIpY@+gwWfK=eJ7g$I-hUmG@J2U4*u z#>ex4x6pMr@P8+uGpZz>*gD@z2qV1sXUe$L;krISw|n}5H7ACXzQdGZ|LKfXB3ex7 z7DJ5@m!nM)7Z>-4_}1Dp;==r15$!X5BF;`VM>z81wboGdo6-2piM5tBhobkivYjZ~ z_$}ESuQ^KMwdT;?5socvr=g?T4j01=;-$lNa4F1(%U~hQfQREXM>aePSHdQk15d$q zLM#6=6n{M%p=AQsfc~%m_Di5_f&p+d42C5z3~qsQh_?-Gv+yQf7Ih>lHIjZ1H zxC_pKHE=%M504P97CPZ!*a?q73v*A7!fiZfBisR-U=?)28h8p8SkdLe&9EJc|DsN~ z3wA+gyyh?&hy#6KC$vCQ0^<^}ANTWz0WbiD!5|m~gJCG~LSZBfljATFM#GUXn|M($ z7mkI6FdA-yu`rc*R+t78VLD8P%ivUK;yq_Te>f8c!`Uzt&Vd_=mkRUYd{_X}U?E%# zlZlrOr^2Oh23!W`zzn#Jc-e3}TnTr;99Rz5!EEB?!Ya5C*1~+)1Pfp%@d}~IO8P?! zEP?&t78p5+d%#$@9ZrQi;A~h9$685$7z=m7L|6lp;eJ?1yjoZe55pRG1RjA$;V$mq zD92$F+z*|w7M_Azc+NJs4YtD_uoITUF4#molaYK5@q6WHhxov9bV2-K>HdlQVJP zYze*Uhxgp|!+Y-f;XS>6pnsl#9pSb0L(d(qwV;y@jAdTQ_ieA^_IIT$qYrkPI^pD4 zLqunqG2+BXQ-l`D_*7`mh|6<&MO>s#sGDJqa0ZhZU2tUrdBnhT zLLZn5EwBLggI4b252cI^fKs*w!E_i5tB4m0rECg=QZ_}xBXA^?vM36gCb{Z}elVJS ze;5m;EVar$OoRb283w_rP|BhiP|Dbu&S0F<&Z z2$sNLC}mS9lrk|4O4$?%+u%qc@uHxViDRLRX-7jTt70Mj5WS9&GBS~UDI=3%8=MN! zyXkd=l$A5tm$Gs;l(KRTl>TEXbK2)Kr+vOv`vRZ(SIRi-4?Sg^lx^{}i^F%ncxct_ zrDv*3_nrw)I(bIsUxt77;-RA3iq0h6zwb==ZKuvOQ^twE_wcPfI&`~fr5AqVS&xHq z?_qQS16gyW0lh>cx(%0ot*m`uvafvF>p1b1xyYgWkaIp>GMV_)_Z;t7c8yHMRhbL2 zHi!E@-ZD;P!trGv+;doK4!SGRql_x++9+-AVCLD;rhhNBqNi=1U*_~TeQ3vOT7)gI_pd!l3QReWigPqFA}WPV8-`Xsqt2sYWbi+-GAXDv!ueW+rK z<9Gu$#wN}!<($OFPy7c4=CD*Rns*Q1eRPPd$-r6+SCa%Bb~-JsTDh=I&7Bev0rKsUtOHr&AC0CtKr;U&V9zY zhj`}y;=GJUKaW2^Ss(C8{0csYPr~2eqwq2O6{g|4aM4SOx)7g+3-E9F)Cxs?_<2R0 z_pGAMeM(W6JfWz+eOyr&FH+RUA63+)4=d`jhZObM2NiYxuN3vs>5BTu{fhd(rYLIa zBt?BXK~bOSrD(r1D(aDkA89S#~d?o&PW^+aeI&# zdKPz8`5mmUL1$8>Xp$fPz#0S#@Ov%3$Yi~BJq={uUaZ0OfAy)vmREdNtsCE%Y|y@$ zYS50&Fiod(RG9Gu!_S$)Tq8mgf__F8({rHbt z&=HDma5C@J9Hr0Wd)aIlZ1W9dKlD2D_zGQf56;dp6rW=bUwih<;`*96^kp)4EfBrn zQ0(u6(5W#GVMm-kXV1>sQnVdidbs(S=;YknsceV2{F2qpW_!MSdnVhP-PWAG3Um{YaP+?%)JZ1-rBP!nyf*8 zBhSy=yZJo((m3tkSjVMqU7S{5An)kdLe4 zDPDP2KPUQa@-Ex&Da{ppFIRrPHV=P*Uh-IWU~xNnxPv^bk%wgtxXhc8Jbdw*Jp5ni z6}!vBe-)jhS03(U-;;;;u`P35ua}1x@-Elr;f3Vqxl$fh47Qn>huW=vn>>6D{r1_} z%%4eDisy-L`^c#5m`FAk+H-P$e zh}ZvjHUFBwlYa+Yckbv5!ODi`9{&gA-#PC5EBW~E$-h2v2fM7jSVP?;^Z0G`g*|QS z$QyOkwU0u*&b)^;1{gO|sAFYaK*!Vvis@7EfA_MjB+fAEX!F3#GQ-xJYzxn35AbXF zz1YxMf(?FY3m7ML<^N!t$RtUhaA9T4uT57d6;#W!n{h$kq6d zT#avdQhXy&F7sc=T0xFElhkU)z8zI@`kL-yYv+rtT`c2I2F9?&XPxA8S)W11iTrt9 z$%}Qg6&^;{y$bsWZ<)#~V|6YWANdxPSyya`IB(>b_({C9`afw+!PqlGeJ+cb;vi{WD}npjwQMApMF<1Q?u_jVoKYU%{&qQwzvc`|hUzT=|Yh7j6 zx~wvu7JBXV?sZ=;ew=>2x_%X2*BRLDb^3RAovgp@I$hYww2>drk{9*&^E^-G-*%mE zySvW+&D?#!HFdoKAHPXJ!*HYGB(4gMS~s*RXS8!J8UbcRfe{8gNyg~WMBwG@O|IUUqAge2|2kr=iKL>d+)h7=cp|8 zRMK*tDQY4Io>@zE$c2O|FRs{`F=ht+o)`x-iqxrZ3k;C~7$YrCUzZqLvd=y5-a;YB@=zTTWTK?-y|eLJR-a$5ZLItEwP5B(4(9K1^cD12?Y6>)d~V`c&8MY% ztp&s8_VtHi}Q}?uMTIN)rr_siRtC(-jrAM6B z*)^H{eO$!iIj4MrwqKjy@YuDW#TTx*%s95fRppZG;~X64!*}_VbCGl#wa&`PW3=_& zD#mN6rR2nL&Qy={_)KxWs?2D8rod1#>&{E9D8K0?PiqwQZicWbLuC3Y##5W zGvmFO_rXeQ^ZDNZj>otb=ckqVy-8=g_uh6q5MVtXNafsKjtA~pkFm>hy;_d((x_YR zG2uRwGRAYyJWukKOiAW^$?wB!@pn(^&Bb`GpIyGzk}t?u0+O#5O#^-uzS7dPik2 zJjcG0$FAhje4G@(x!P#!@yivqDa|aoUx{;fu6Iwf9)lS9`|R2N^y%m5G|W-9gvZ%) z{mq|eo@M&(`8(rvZk4uTE zAr(!jAuUnQ_fW_X->*Z~`W^{cQ+LCtu)5nuscLT>)r4`9I;xbbfdTX4hs-$_Qcvu? z`i2j4j(W2_yEM0qO|^jE5Jjxj8zVLP95;TKmDNI#d%Cs-B&~>-IkoGv?WHzQ8J4`q z@2DGu7&Atbj%7=l^e~MfZw_M8#7Y{rU)gr^(#%%nOA}*G)7zLa%`VO1{L7h4nm{*w zj<-|xo>$!TMqS>yg5B|EJ^N$SDyEiWIA4(8oCPTc7v|N=pd2#Ka(mhzRXxR^74`T+~Xx?(z?(LW3 zYECo2n6bw`P5$Mi+3HlzL1|M~(~o=ZaG-h4>dl;UrSiL|G~T<-7>BZ6ij6ta8H)J) zCEMqVi$^{mQ^e%M+yIxefEs`$UnvOQKsC1u7y0g}Fw2?)ni1gMRN;gQ-aqMPJM>}3rx)*KvqRo+f1@SxJvw8WdY6_9}Io2{ShjzTE z<#Zuk>bqTx=h#Pfxy!XqXNBJ}TIQBW=U#F-@2^4s+a3B$jSTYhEh@^cTXPTm===K7R|>r+l#pK|81*dcav8Hq#;%fnN$GP;e@>q> zP*G(yVf<82wjtw>b5FS__pY7ixKqa0YuYF|zA3-U3F8{2CwYrjYqD0+{~4`R$#P{o zjC?RVHdgH#7aS4h+mz#u=sL={)x<_EKI>+Et#Gc>gLAQHRpTi0^CYE@{2nLTM;Y6h zxv6_hsaZK{q{{NQ4>V&F8S_?tx6|VtrBC#IWo*V>#yY*K8k;JQIjXU%c=S>!em*Q; z`c~!9h1W7B?0Wh?6RrK9w%;eKtmjCp_`BRwpF`P>)RS|N8s`4{+sqXrztvyEc(~E@ zyUEe+Z=TT`FS1S0&&oIliih0)ZOez$osQoG z$vnvNce#f9H~l%6SjPQn-B>4GSvOr+N1eHr$hF18D)Y6)JHtQcZz|s7T0?IQ>y7Kp ztgjnP+y&?w@%bw0CoC}`8Q8m>vts)PY>(K(b= zVVgSo#pmlQhAjS;+gZc4{<3^t%W_;;o-50BV?DSV<+m3yU$I;tm-Ty&b&Z|cB{xS!cb3H55rb$cG8 z)wQx_KBa^%VcblwMvN!Tdi9D?#;T~3#0N`akJYRa*S>}}F8vL?U%FfuP}|zGspd8y zz#89jZB5P@<@#EAbDh;NNnR{tnQ=Z#UrH+12W1;*N&T|@(`O*%u-tFqOxiNE0o}R( z;hzV&%V~?-H*Toxbj(Ad%pL8J2g$2kmykS2AB5!LW(wDQsTcX}$}ReKWS;UH90%W} z9xrl^F4ukUvi>fyZOGWAvYp%-5MaDfMbCJ2w!F(2rk!&+M!&vIxCKG z5^|dI8$6!J@*7-fyV4u$`BU|{3}WRn@s^-co7<>f_ZGyCRF#X{95LDVY1aE$Ya1oM zk1lV0t@l(yw-AeGsrRq_f~H;}{?Fc5jg>eZsZrYd5a+aihJh;2jrC}=cJNslmwBL4 zJxi&kgi4;IJq*0JJeL0bIBmovUuh3ITEFXO;!D~Jd9A;b8)}YwzAKew$vR)fqx>E( z)0*#0VxY&p*w|*2Cr;%S7e(Hi@p(DEapy6C<*cf#gxcECyVY5je19}CHMq9IzKQLP zJa?oHGWq*J&S8VLCd4;kdBG~rxFGtre4O=uO;{FfgSicr--AehgRH+js_fl0_`56b z59GUa)UouZbtHC^YAB&W{M|nNFSMOrWtFROd{<6;@)E}R8{Z}C?f~PG$vJ4M=7@iK z1KyiG$3KU^%NW-##2nY+xxc~FLBl)FkSN{jnj3*x?-gY9MV7`)ZcQ{+!s7zAqEoPcqw2Gix8gJo*Tx)^LsMsL^H} zCx+yEICjkYj@o?31@b2+8piB&mTnH%RarpXNfbZ2bq^%?kkXX`K0-?w(HwfO}0E#Wf`_O zPNn|L+a7V8CeNi@TE!sOYi;G0da!-=Jo_Nozo)BR;xueGwluO2y1@SD{9YLWEMpV(EYD@TY|nO?$m`t0vcGZRGp>Brjb*T(>0OTf zO?i&joJ{AXPxoCXj!l)ES=>*gwY#5)ealvD41I4M&DWn7DfHc?(l=-Bzd5fm98z;! z%khis59GL8;z{~w9b?iKPclAo4D~1b)PZcrQFWD2?xV}8Mf}S)#hh`c_)X<0#y~&C z+;OM)J!6gweN9@98@Q*z=r84@jlaY8E&FcS7yIRY6x)yO^A7PDt*)6BTb=DScS)?A zOZb$l66ZT5JloRWxptC!;fu&OCPK(M8GG#rAP? zw%Rz52`Iet=T zNA6H>9u-L2psUe-TzpBliS0znsbX0g(nwjQJyTImHTMNZByt}j^AE`JT}Mr=tfm~V zMAH^puKP+~wDd{KJx8@nuTU=eeW%+JcU(cN2dzuuR+QZM3K9zN1X>)3rg30@B&b@MF zENR+0xt`!gIT>>|r!8f3AwP1xLgF)(eqf2s@k12D0d@5(sc#ya&~R5vf6#mK7=GCRSv>=NLb7-L(gGEZ1!%Zsb~hQE?;J>C=cC$2h;q_avw1hNf%u z4}UXE%rj5N(rDSX%=KQ|w2s&I@$W>vP3KyhE$(F-ko`|PVn03Fy8q!A$8j6Bty=@j zlWioDwozgtlQLGOj00`sYLSO|q`7gXi}7{~eNLl7%5U3#T&V+&-H9j5eTU|4s7cXv zv4eHWaqCuvb+eY|D)N1o--e&VA2luab4eR7`x)s^IKXz{!nh6Qw#Hl^wM>JhKG?P_ zZNHo=h0q@MqFwAs``CkaGMKhCi1Q^&+dBTi4)Yw4@|*9ftSgQI7v~T^a-QyOJ&#s6 zu8L6CNY0V-^pRByIZvOQ?>t&h9?Ww=9xkqJR-4jjo3&a?{3=eC{!SI~%ev$K-BuE( zC+6@Q!HcZJ2CUac2sFnl+eBlw39g5va*gFt?f46-(zoLkD8rM`jvwPXuVXttdv@vC z@$l#;za4*{a!NaXdwt2<@$|R<@7nQY#FAq>Zs2dWcDtnQ_^;&sf8CDHs$H^n{AJ2l zns)p*>iGXhJKmmr*tg@YdF|MayHc-??fBQTO4g2hvAjpMfrxXJ04l1 zWbOFBtk3^-JN^TCkaj$K;1}#aRP0C899L_Mwti1<+U~$I*?Z*JW1bv`@O)+&y^($J zsb|<<&E&P*A0WrPa_n23<6Jqel{BZ>zd3O%_Y~K5gHt zwSMm)-Ye&jK0W7QdMV3&*4aV+W;=eDa@gnV{*|P7`vcGlV zZ?3%OMjChOublA``>wxhX?@ODDeGgoms^ex6qETFv9*$8J_eXs&wT$V=hdg4sm6Kg zN!8Bk%0a)|>g;yuVeOl^R66*|QTB%>WoBh>A8jpdjp)Uh6=wDgZgi|>u&TQ2fO<#c zJ2HR6AnKDojFYY$XZ5J6_tn{j2r(-3<3rZuL>sH!N5A zwok9ARQ7&3JlmW8%TT_j9da4>=-_v%P|1^dpBvE1AjkQR`E??{{MMg!rZSn=JD+WX z)XsA3t2Hg4FTnmYax8zlsurL0F4WoNn^*Q?q_ah?%+i+FjF@=3WTP&d2O^|^0_`Eb^%47d8Jjkm)T zzw4tF<2}yV*`33icSLyEacdbC5OB`qF%QLP|gYK65TH5P#>Lo2T-v`u5?vtQC zf}~$0*Lqya`$Zj>X4O)bQfG@4Yg|a3v0-tHV*Ndsxo$0ekZo8d*F*Z+r|-n;m81`F zR(9PhN55q$%244EW$-Lv8TL~KiKE+W%hcy0sZYl|P9Tpl`&BzVh=UvEIB4^TIPh={ zEnytIrSiy&gBz^>d944$SHiRB5#yHi-XQkI(%2V5&DNi4rtpbQ`6i{)h{ zEQ4=e9C#EO2a?C@9>l8Y$%=zn!ZPfp43_qw@Hmh>jwO$(_$Mn4){w6r);KUy zcaPH^>~}A|JvhucUP;=6p$>5%b=I(mIM~869oqvbi>EaXCYCY|<`*bK{y11%!ZNgZ zL>x#S|EBgexYoEGUShgiX|+=cFIs(dmwonNgiXSJXvvYj(l~u#=$!3?s3|K z-EPIV2M6T5w*P%Ne9GF<9V|yTFVPa)-9E>Yv9K2JY4Ef_=VF}Cd%p>AJ z@|abbJVrcOaiHeB@Eh_a?LmXbjDt1>>M(zM(4mBNc-Aw2dmweTlDrkx9(WfL2U3>B zQpdCh|GAc~J=L;g5$FJT$BP=?~#1Ic3qc~rgpWW_;!^3~ZI2dk;O$7v6?yB6Ob zd>&J>_TY7gIFLH4T|^wLXPJ)eft019H4a9VG7e%2lp%i{#FnrO%^nd4lE+JxI6esc z-^YPoehY6sNAElZK?Lk9p9N4Fq zvMeOMv3U~3QhQ_s?W;F!muMWML71kbjJdA_9^qolm zHtD53_`|t$?ZLm!#kU99(@WMK#8U>l_TYrI{~%u;`;*6*-A`5=4598?SmWS5>h5vc zgOvs9Fn=6uC}AB2ImCgiS8Wk-u$X09+k?D1ma^RAdXdDzE2WHskp;?-zde{(!ZLV1 zA`T>vDU!$aPgWevB43-ym$V1`PT;ZPpmu>e%pV7hN?3>A(kE=+9!QqXKYyjaRO;5T#*eIWVUgK;G+gU2J{ zK=Sw_c}#le$%=zRckT{UC zOti+qPny!T2bVO($H9M7OV%DNrVPck2a?BLv$&$yR zPgWeL`Tf>9@+Iwo<}u^Iqd*h5vcgT)2vFn=7Z zC}ACTaEJq`vwK{_Dl87>vP{SJK+5tT>7_jgDPMR2aS&O;GPoBW2U~6D>5|89 z$zxKNCn65=^3{oattMa69^|SXFAgdesKfkmP@{x(_&I&Tv4lRBGPL>xFhjDx)N zQkGHHIQWjTl;*zmv;6+Exb`5O`EyEgz7R_p?AinK??LR#Bzf#g9%I@(S#dCge0f>p zV8&y{!NLM{m_H7dm#_}~9O6LgESqasg|!E>Sf;f-$cqCh%Vp9_dk|d8IC#B48S=LW z!%A2N?IYqq@_1PC$hbfM>))~1$LB2a^$Gcs_TaAdcTJ`J9gBN`I?NvjRZCchd*~Ck z&zscQ#3JHADI^Z0ERohY;CEZ4Y7fpR#kU6+CY7u`m`fRoYY!xk0pwBT@&7*#-m?2W zlh*F{Oac6!iMiVi3H)YB#kfGt9&^1fEKq0p*ZcAk)|sEfdY3xN=9*QZ+ds=pE!)+2 zjxjLqPwU0+CwuZc${zflGML|01~HC7ppoBMn#YJK&Hmuk0%ghH4!l{yvXr4LGM0_h z?Lo$)k~}b1obg5peiz6%bH(nHI$QIg&1PJVLVgz*z}Sg0F2~>Wy~>;(j_qW9^0kI~ zjcNN}S0MXcZ4%?$Fs78Z{D#n(@zgZ$=FPduc4(fHxigPpjJLp8MJLR2Zc?5kmLub= z*ydyQSy{4e;{f^6F)y6sZ-;YbUYWyXPF}AN#25}*^SsXP&Z<5M$CR;wqZk7&%-N9c z7L=2r3ChXL4a~{98<^9ad;K=QT-87fR{U(rh{->=RERsM@;V(}Td5o*zgZ1vV+iIk zSk*?xyYY~5tWp_ki+$eJ)lo`l0OgT!H%$GVf{H=c~+qO<N1tj1@IYJukv|WC!Lsgt`lXmjqf94Dcxfpm65i5 zdsy-v6IL+asf=^O`Zm|q!77$?0YeH)r#AUXx^m2$L%QKlE5=AyCC4a?y&G$LAX%(-{+c3W=@4>bb#aQ{W z&cZ9j#%D5)VEV?YM)Pu$T3KVP72~H_#;f<~KmYgKwbhK?(zY>%*DCca|HPT^p9+6t z^R+<#2h2wdTMKX^&t{lGZaLot0l*14{b&(8_g-?`256;<_QTmEjbZq8fR zPw;4oiB~M!HtR;0w9NdQSJ}1;#6*KK23t%#WsZq%ma%gSS*L>;uSeSN39Qq3oqQRO zQ5maLS{lz}S|^qsDrf$F8T(XX#HTcQpiQ#n!MTKa2qh1z)Q9|6&pPbCX4XOf^Ro~6 zH=KMhr0e9vA?ul2;9bmN4uN$@XMbIh`2}>o2SWmU4~NvNJv8J{?Po$d)ov6LPjt<4bXU=l5PcPCLU$yD&Vj zU9fFmxn-Gy>#)qhm4BRuKBIH1+t&G`(!N7lpW6DxO=wrVnfD}+c~8Qb_au>dPX?A_ zUM$98a&_W;wX&MnJRf+vmTXUPW)qX!F zd0t6u^d$}B@foTzkHG}$Rpv2}<5HD%9)sWLf33zm27}&KjEU+_+okSvQ?xnPf6*4Y z4lWS;vL5W$!OyIN)L#N~&ZRKkKJV9JzO{5OYkYrRu+6f?_m_NkdbBm&w?(JhA?Zrc zhRXF0=63c=Y))JGS;6HUJe?aljQYqRmdx!V<9pI>EYilbF{Cq&T@$u1y&V5AUSvAs zI%?(j8q!`?F}HV%v`M66Ow`ob@A#WP$NWxm+?48NeV=)n(mTuh^DOT(-%@&SUN^OU zzOA%Ri-MW=NEb8TpE<*GGKceid)w#b?+g6RX_$+MIl^-?qj{gXHO=40yh6H|_ocmE z8v7GmN+dkjk5W%`lZ|q@|c|~O&kv7ETYPJO_?_kDY4c|Y%Z=m}c>wa>W zY!3zEX7Q+^_jTbc-@30`WIJXF<8NJ=M_po(xU$r#%HOunIidWSx6fgocYlKm^;&P; z!4Bqf#P}Olvk$WEd%Rf(s+LI|(k%NR>fGPpBm2c1YkE}&(ihklv0VAPd0)g_svQi> z2cDDBn0?jqnH@TCUK-9kL*C3YG>>_P0-0w>JN@Vi7e$+_bq&u>{@D{!$5MWd2hHm$hV@fa zOi}iSF-1CJ%3N;Bn3fk?zP4lX6Ka>F4(IY>jK33O=Nw{8OP#8T)pNF3i}5u`Ja@Wz zutR-f%^XuneAXIs<~*wW4CjbFb2`>heOv4W_~pf(b#$cK) z230aAUBMXS^NgqIWbmPlWDa_Bd6gRG^DB;H0cw^ljk*1E#n zTAP_$>%AG@uLxn@tfRE|3sm*vf?K+=U+9$_DD!32^C|H>SrWfG)x4Uv?fOysu9rr# z-7@Y^Dr0PVRV98I!zS^gkNVF0XrHxC!V0aE`Nh;pB6)CZBi8aaf9k{>M;ymlkN-}{ z`KD}7MeT=WPH0F(3Pc7n6shh2-Hdf2&p4eCsL1m&1JPiQAcHo#PJKpA8|N zzhF+yynYCdJ8WZmZ+^}0?{d7t_=_^P`c}L2tN6U_@2l<8Hz<>r{?j7Te?WR~#%Hph zSN+UK59d|qJZ-DYtDaQm;k@d9(x2B)dKK$4 zj&xd%u`+BIVnD^f1 z^SNh~eQ)r+(|De+Oc~pZbP1Iivs@mZVtg)+hZCM<9A#dI^SymZn-H&z)yex88PnW_ z$6J2)W$ZK= zANs;Cl$m)|5@kH&cMBdvrCHBSY-39IB=5Gdq`mJ2rlgl;j=_5`q9uidHxd52l1S_&q*Ih+6?AGKgYf?i1dlf zXP>cFYcw*aeIj$(XEbo-`5>OlvfX$-CMBIRr&FglIp*5P9QPS5+>Kd`5hwix-n^&g zG0~bPgX6A@Fbo9y#Eb#xhaTYb8QsBtHoY;M7zcX9mVg> z2a4YiwaPE7jLL69e;2VQW68;Qd-MmiR2UyQ z=T*i^?x)YW%iK117>D{bXQf>=#%o^1+$37YuhlBy=J99;TjTg+`rtiye^3$cvym^Y zCF4CeDE#vac)tekD@D9NhxeubRr=NwcrJN$%wz4lW!rzsd$dn22T=w|UtFF?leV}# z59j^j@;s3Di_7x>-j{sdpVpmq(T#ONtPbqLI_k{2V?Gs)+Pv=Wh3RwTI!krh%Us&6 zRUAX)R->;%9%;WA7cq1`$7qRKj?)^beAs3T8LbsVdSg{yJL<>hSudy9)*juCvcG!R zj#f9fqs{nyAoVp*qxiMwaXbCp^0=JWpYc4w`ga*0z8-0fJmwx&PTrrUHg;4rSv_b= z2l5z8JfzY7y%Hhw&qzO`hVskYF^ajYGR8A~PoWjf-={2cN$P0u=Ga(iEB)m$mj3d_ zijn^EMan@J`dO4k*8cKE=KgZZ?$}@c`iGn+M_cAINN3wGs*m?Nef2u}%L|*oM#dwz zjk%d%8;6=>kc)igfXvtAu7p;jeiI+;imfX9Ci=~^Z4=_FH?)lBEcf_nSK(>)Nty&}nx=)P*(zxm>&CpCylWr%ziWe}(RB8stYZUMzusq=6I8yJcEM7| z`O~kE^lR)?k19O<`;xvv7xVJ#-D2(=uP%P+H`}-Ko|Zp-z)j0_nAxP?K-|d~ zqceFf^LiCFr_K}(OiHtkN3twg$1+z-q3f7=W@OB6`*p12`2KO$F@v+3*YVN&l+$4y z%X}@;Ul~N2i`H^>E2f-`gYR)~^nThC743?e_C-TG<3yY9%rTwJVdG?;Z$jpgvdqz{ zn6l4yGu~{iXDm%8woPY_vCEiZ=#!T@Hf2sknPXG-@0K|c<@mgoX$tRK#>w?0eRb0W zUKc)xqNJ~B8tITeg4f>G<@*&_eht%LhxD)W`lxlx{nM_F`Ke~=pO?N0`Kd|_bfw%~ zD1T?_p%e8HK>Ki;k5=TELZ6<0q$^S*ukoaA+J^>fT2{WrWWu719BNWYKQ z#nsQYy!6G_&xWzg$xz5#UY6J?W1i63buIa^l(8?biz{QWL;7yKF0PEv=cO;YjBQzu_eOuoHlSkLS94rZ|D^Z5S+SOW zK_^27$J6xvZPn3FB>PzN-{~uod6CS2r=LjrYAxycJICYZztc~Ys+r?oMWv35R;#jx z(B^5wult(QC6zT~a13uw=a*#ZgH)9@NS|&7$N4Vo({=Y*F4w@loK-E~qmRg?B6FFk zyj|17yqjnlTUk{nsEMLfi6g&UH|RwEWxG9W9@{xQcHybOr#D|adgZ%o;jve)Nnf4x zEu@byU7OeZ`)lEwE?-M;tz}*o#UT4_`UMPfE+u^oYl(}(`WUM9xBL5SC9lt5dA{^j zWLd$$^&UYMeMn zaHV~8qn&i8y(~wamnUW_So;9+gvo?Q!KsEXUa?Y#dcx|iFf!HWJ zv%@@%2mQYE7ic`P=I>Y<&v7FC2J_<&G1o-^^VG}sFZ~7@ej_R88yvUh$UM*zI~kn+ zWpMr{@g_0D94*^cvk%@tUTfL<4jPpANk7azA00U-OyQ9@u=O2GC!HMg`b-PY_MzXv zrHFomgZYkkYnhLC$M9Jf@^zW~TqZx4$L%)HHAAxpxfLUsXKI0qYg{(pkgM)&39z;9W%Md;uxR%i~W5BvHJ&)()ai~k49eq%Hw<2KAjcI(YDSZpU)_#cYr0YhyuB7Qg zng?u8oq2yqZeYsb+!s;?<-U|MCU+3ccX-OE+%YM~DBo4`JTiB3%33KWuj6@~PdPv2 zF@ncsJi74rr9ArZxR^(YQR!2lt?`ht&u@O#)p(mZWA0q)Y?Sfo?O%KFegxM+G`N+kUNqd4y$r}#~nsQ5)qrElPE`T%CpH!znzfLQtt z7Sa!}n0|m|^aI2zeqk#Wzp-oR4_L4G4K^u$^f&m8*{=AF-mUnJ+E0JOSM(_y;VPq~4W3-Hlc_x8f%#6T~~}+4Rfy3@A9EKdymYG zC2gvTy8VRfS6ZcN+=0r<)$iGc4s=qk&SU#Lrsi+;IVYk`KhFG$t_u5sn1R_YF<#m9 zyIsA)xi|OBcxW>^FV?12H_5VX%baJo%mp0p_IFZt8p|jrS&kpe@jD(F;p-ai<9nby z%V(Q1y7FEb-gA2Ro_vSohkcKS@#3^=(vRm#ev_Hsb&#`uvzx*^uQ7}-?yPJcsB+2b zOh2JX?UE&ZmTrnm+%e`zYsNVJBdRLC!JNmf=6zY_CYE`ljIwh+`H7VLFjs4&d&Ie_JmM0l zw;q%$ih6TXu}`Dk0;xBd!*IS`S)y!ZQ57u9Jj$|)Wm2X%SIQc}V^hl0gYwXCYA%n& zKi{#B@7U)}o&w2J>brX5Ip$U>Zf@6G10Ehn$efrGV@rsuXy%RFO#KCBN2hqHs$^-B zmc)AuB|fyOIODCiQ#x`Ti2k)uBlkr%VJ?I?>W}aCi;Il(b&F`?+mY+0$$Z|&ML8L3 zt-n}n-KLq(<1G9CTLUcn|BeC5)uWU#ma@4qKVV1tf0L=V`P7>W^%h9Ig;Q^ZeYVNp zmY8rOCKjmO;${*P?lLzeF)@>vh*r6pW5Sz99dmC5xv1!dc8Qbufo1-NrgruC8|@6= zxsUJM7f3yZQ;&sxXKCuKiqso*dVm;_I@?8^$uP)szsk8ZP zpROv)HY#<-y2ux6h2`IVJBlkN_7aIbsk0{3m&D%uLSj$qjPJ}Bdxd>xQRim4=KB|w zlauI&nf!G^d>Hj3ed=;9V(X&`)arB6IbS_iMxS%QRk@l;Jyj>>)wFxNd30ee68U=% z>erPywvyK<2ALOS1aae|suJg;a*vA|tQchbm-b_XN}tm#H+S~}KIizp%-hkC`)U^O z9WoDS2JM+A%kt)akQ&yu^;x^N^+kT)RnywGdRyC8ImVyD+@rZwv~tX2$f&N(Nq5iQ zlf?P0Tu<#nyD0f}mRCZ5 zX8t-UYif15kA&;Gytj+LF%Rt3RV+Wfae%Q2pYOp#x(udn0@zkM zzQ%POzDvH_Hb3+vmXkPJ;i~AOsnH`wlhraIQ*V&Oj&qRcUW*Wq672mh|%d^T@0D`}y20 zmSao*9>--Z z-Xo-w*hpti9r;d~^I7sFWs-GQlYH6QZMF;Uu~Il!D!ji#uJcJ>>|pZgP5uI8o@VA# zRe0S|uUwVb@xHe@_NZFf$$sLbi-+Df7#&rvQGK=TN({=J=*^zzny{L69AJpQG9aO5 z%>6D)I+oX8yP$cmW;4Yp`MoRCQ+l!v576Exb9_3Jbs3^mj7v(=_mcJQN}b5|{}1K- zhVL%V`aHz?EJNSN56p*tSUK3?>#Jw|H47SyYPg``sIb}%L*8V)E+h{>sFikMwd;qx zsn?7O^K}XdW1SA?@Bb(VUrAwo{y-nc4%}e<+@#$7Z{+S|ZqbtySvSjZR$bk^ez*s- z&$p_wuDSloxO%M9PI|?#4g-~PS;=?l8&*}y+LmO9Z*q;fxXH7LST&K?=cx0-@-D}K z_RDZ(nI$RDDC)GZ@<`hn7MbbakaZg-bwFDXMjec&tUIohZD*fn_eG5?HUtS+8p&Z?LQz{!3Y}_RE{d@@|ob%dA(4Qz@gAeP(8EXnE#GzruEK zoY*Hmqax`-+O&A1{_|C;5#<@5Spb+VWD-WZ4eg&D)`U?8Z{YK}E!_iZZ5A z#!SkXJ6m(JO)}Rz_t~0c9`>NsE++1qt*q_vLW(xc-NanqTxXW+1Tz2W%u~@1a+iB?KglZg z^|!dTKwryMSFU$Te~6{;xLSe!ed^16UQ9pKe=aeu(jT=*VOzDoeyEdsG`N1)fJeE0 zNPGTYQP&T98A^8j@I1dK(sBK;xNGg#xt?;1zHyls`v&Vw)}8D}ve;I$Ifj*MF_v<9 zn9JYMT7HFlRAdh8X&f&&DW2wjGs`hi4byr0V%l2MNxUD_V=)?0; zJhEK3E@ggckGQD&8)FAr`}E{qpNN3i`1yz)GabtiKY|HJF48qc`t z_i}g1@=U~)ZTa)Lx5($d(Yn0&c)7>OhdxF7<^9Fy)44t>_qC;JlKjULlSkk7u#}N@ z+dO|CWvoG8assg;``Rv~k-C$58O$+Veb%-7UdL8u`X5hO=0Gp{I(*q-%zMu9d`;`| zyv!4>s;3yFZ*>Uky|(puKG1qRFLmt7bxEmXDQ6bPp3)~L%P6eBr4P$+>~FD^A&zqt z*{)yyq5J6Yu$!rUCMft^(pr!KI&eG`_m2>(}_vB&UBu3U4Dag`h82^_6uB7sK~Ll zqV_s%e$M$y-gAzj^PZQtdtTY@c{RJ|HSM0)wR>LQ?)g)8&zsmif7`6#>Rai_OEz!uE`^Ilf8KI7(teE)2JS9I1t>n)Ggm-L0$ z|KoOreE)Qn^1W1aokx!vH8kw4h|!~TW5$i181aJqZ#*x%jvF_6+_SpD5hI4ase5a* zwTP5TN;-6$_3du-#oGUSn0`pas5f=vN4Kzlm-@2|EJ?OY4-nguh_rh^KBhok8pTB%Hef@ z!)srM*F7Cx^ZQf#f4X4%SA2hahu1wEUi&+|ZsYL!O^4U*9A2{zxBsW>YX6GwAMEg& za~}JDI`+}_|8$Y|ulW2#ht~rgUh{i(`+vHZ>|gPDsZXwHD6(E9uaZAm=iR||I3);D zXHqXxx6*!upf{v#k@d}e$4WoQx|Vo&5d$FKCGjWg{2-EW2#4`CzQGZEi=#M(<4DGL z_#QvtN1VV(oI(nI!p}I3U-27$#~J*AKk*k7m7=KOgfgI?MsbBZ%A+DG!vodeiJGX5 zy3nCM8saHo8cQ8r-Z2i^f;XC=8J@;7XoY9-96I261fVmzpewo|5W(n)5R73*HVzXJ zjk%bI`G~~=EX4aTU@?|pDL%k5a8Il9AwEJpR^VfNf|cMN24xjiV=X?#I;_VAaIIf4 z!i0_Z5x?Sh{DHra3hqHsF5n_Krd2X=8UNr0xF15v0ryrZ_wfL^P@LEtp@s%da7Gz0 z2Bo5f3tZs_ca%eUR6s>kLSoKJ{q7Q8sRB4 zhBtiB1WnNl&G9r^U=W7jO$25uo6cW@66pg6Ox;e;}vA4hS8JIbRXD#HWS;E9@GoMELd zbf}MpcnaQVf@XLcEzt_C(FSeN4(;I!KRk=);ExV?9$X(%^k5t)r4u@%3%a5kx+4%l zpr1|Yfu87v5YTU}ynsIFi+%`2f4qoQ9K){08mz^qScmo4fJ7K!!bWVuW^BP{*otk~ zjvd&EUD%C1*o%GGkI(T1m>Wv@3XGko97GZh;V{0&H~1FcV-+V6tFZ=a@hR3}JvJZ_ zM#zukH)0buV+%gRR&2v|?7&X!!fx!rUhKnue2y>hCBDJ|97GZh;V{0&H#mZCaTLdJ z9E=^We24Gx1AfE_oWv=l;3xcy)A$9y;y3(`Gx!64;xC*xVVK??*FZN+SzQk8J0ELq{HJnfeTDZa; z~RS(t;ln1@&_z(Op-Vl2f< ztil?6iuFi@37fD5Td^HGu^W4_A79`r9K<1fjUzaU+LC!EHw_#J=XFQnoe zF5n{4k%`Or2mj$3Zr~QOaR>MC09racUEm5gxT74(qXIlp12s_#wNVG&@IezaMKd(V z(`W%-_~BVR2Y+IC0AQDj+fsq)6(U^z%h(#P0;5{tF z`}hzafev3~1wO_nScwEA!Uz*KViPuF3qHeM?8AP1jxTT&$8a3U_zu6~H~fw>NJj=T zk%i01Mh@=aF7Dx}dekABq7?>VFoqxuZ(=BhVK~AOfk;GQ1V&;MMq@U1H)I>fUhKnu ze2y>hCBDJ|97GZh;V{0&H#mZCaTLdJ9Le|&-{S}T2&Eava8N@7Cpe=F%0delxWWzY zD2MW>fQqPu%BTVlR7EvZhbL-)iMR&=}tEK@&7ZGc?E3 zXn{c(f-t;^;fO#KMq(63V+_V&0^UY6W?~lRU@qn%77MTti?A3=u?!y~9v@>RR$&c3 z#d;*dgiY9jt=Nv8*p0o|k1y~Q4&o5L#t|IFaeRj#Z~~|B6Hen-{Ek2H7gBK!S-660 z(66WMMHh5KAcD~oA$S3O5sDY_5?;Y;cmspLJ)+8+7=~~}VgzPl7Up0s<{=gfun>!| z7)!AXA0i(0H?Usu6ui*{&G0l@p$*!>7tg{U&qI$+=z?wtL@;_H1TUa3Lh&MA!Yg2FavL6CT3v{<{}R7VG$N%89qcjKE_I{!Ww*v^+<#X8?gzS zu?1VP4coB;JFy#ku^(UHD;&fje2s5#1mEHqPT(|t#ZA=9rEbvx4bccsp)tJSgC=N- zW@wJ5(E`t)C0e01+Mq4kp*?)zhi4(3Eh?y?ffJlj24$gz3tZs_ca%eUR6s>kLS2gCP!qLK8+A|@UeKW)>Z1V~q7j}#V{FAXY{w4l#4hZ{9_+heAlQ@MGjB!>eV=)fn@fIdvA|_!nreG?j zV+P(vG-e_OvoITT@DAqUUChIL#9{&7!$Q1|MKEA7mf{1(h1r;ccQ6<4Vjkur z7I9dB_plJ}V-XBkj3ro#53mf&@gY7!JXYXie1eroz$&c98mz^qScmo4fJ7K!!bWTY zH^C}f@ENvZ8@6MWC(FVbti`8ThxOQiL>OVhMr^`nY{6&Pif!1A9oUIo*o{5di+$LS z&+!Gm#8)@~{V0_ZfKKR)F6fGG=#D@HAs9W-6TJ|E-gp6h&=>s>ivD;J1Mm`F#w&Og zuiE!yK*_~Uu#(FtA94T0!^Ug(WJ z=!gCofS2(qUdKQTMi_=-I3f^*kr<7!7>@~<1Zmo*@;DuDqaXd2vw3_6++?QA)K8Q!gx>NXFio$hsqH)B^SGJEc|30A zF_uT}D^Pawd^Z;Jd>@Zr;)vBT9>sT7Kk#@0r|=U_<5&ESKX4XlIFG+^2^q-375t0q zRyTS400)qRySR^BsK|>3&L|5PxS<>>pc1N}DypLfYM~Ciu##mo;IR=J!v{^#94*ii ztud72Hh&)DNk5F|op?Tz=ks}7fbIxF5A;HBjHUl|JSO2fHeoZi;4^%O@9_h+VLNtU zCw5^s_FymeVLv{{7x)ri;Q$UI35W4DzQGZEi=#M(v_fmN zL0hy#d-%c+&*C}wqXV8tN9YlNPUws-=!$OWjz9z<7(LJvy%2)l7>qCs#c)I*3L`NZ zV=*2RFbPvI4Komp7{uW{yblAG-~%kjM_7SRkbu=#i*?ulBQ|0)KEpQbz%J~;K75WZ zaR5K!5WdC{9K~^bhaYefDfk(`;5VGXpE!#&oX6j|gbZZi3jW1aT*pn^Mh@=cK60U= zuT=wQl!Xi2P!1JP301(j7D{#0KrPgP7wVw_8lf?K&=k$l0)sIGVR#cmF$}{IjtE48 z`zMtV7zyqrRz`#0VRB4I+lKLY3llIAlQ0=mFcs6lZ$3G$qg_QbW+Dc&FdK954(38> zPT8S`22OBB8I*+6P<`}b)vSS>^<1I|UL`=eDOufsgSCRw4nbuo`Qy7N24r)?)(_VT1`Au?d^81)pIn zwqZMVU?+BAH}+sJ_F+Fh#~1h#U*Q0<=}XSR9o)q|+{X#}?oZ+rQt%Ug#%cV5U-27$ z#~J*AKk*mNA{A*khx53Azi|V2o4AGB$VLwC;65H8 z7b^N3HE>2*xWEnNPyv-t1yxZUHBbw6!2N$pJv2ZgG=>kFqB&ZiC0e5`+QSdep#wT1 z0G-hl-4TQy=!M?sgMR3b0eBg&;&lwfV1!{Ph9d$|7>Ussi}9F%Ntl9Zn1N`-U^d>t zyO@tSyodK;z!H3bvuxh0d0dNi*Z?CoVlzI&HtfJI?7=>KjxTWlNjQve@GXuZ8QZ1V~q7j}#V?2YFXoc2jgSKdg_Ru2$ozNLw&=q~q5B)I!gD@CF5QaA~ z6vHqaGZBMXn2kAj2XpZ*7QukUSc0Ya0L!o(tFRhtuojhV1oi*Xo_w=e+{F$t3~1yeB% z(=h{YBN}sXq9J*~DWu>h{EXB11;64q{EjpD1ApQ#oJA_qa1Q5j0e|BnE+HKmc!uNI zmS~06XoI$BhxYJ=AD+c?@J9zckB-nI0G-eoUCevYLNI!uCwd_Sz3~G2pfCC% z6#elc2H+*Uj92g~Uc>8n0|PM_Q5h~fEc zyn}Z!A8~jO@56v4_yEiC5mw+6Bw#hxVjVWXh>h5c&#(p96%Bd;~RX7 zV@SsL_z@?Of}imVe#063iL*$`MSr}A z0eA^7;}v+*XX=9{Xo_ZNj;GNA&!8n*p*7l|E!v?yeBp;@@f`fo0nei&^awyFbVe6+ zMK^RuAc7E#9_Wc)2tjZBir?@%&fpLHiNA0bsYt^)oW}+Hjf=R1bYvhCS-6ZV_y_;u zKU~E%T*nRE#4X%LHga$Wcd^`=eph^ic&xz3_yjAFfK^zHwfGe4upS$b2qR3`h)vjx zE%*#uu?;)06T7e*d$1S#@HxJ~LHcEra0rL-HNL?Se2b$vhT}-aclaJZ;76RmNt{9o ze!|Zk%3HP;WDn^AN-5|a23~ZkUrid z9KvCIjc;%S-{L5a;W(1<9lpm8_z@>?5~q-YpYStI;}`sj-|#!m;1B$Xzi<|V=;IxX zAqc~p7>Z#Sj&MXE5>Xg|kr;*17=y7Ghw*p|6EG2zFd0)Y71J;sGw?Q|QJ+q-255*z zcnXc-4IeZ?Q#3Bi?gdYE4&_%|9Nw4vt?mBlJnUZZR44a> z+x^oi16p^i5H`NYdyS(twMHwh?oJiEln>N$OKcfd%{pZeJ^J;OuehIkp;A^AM8CYd z;wyK0>uYD4O=#KOGj8p`eNVHG(+tz}G5>#gaOQaQBeanKju0;(&TUW1QqmSwv zY>{l79h_M$rft!9MoFcz$&4b~!u>YUmX7ws#TY2B{p8YXM`}%R+k)xsHbhLMYzaxq zrc#K$x)*0|Y&aexlLJMORHDxY@71YjhF~1U$)FGs5+>b`!#I7KJk<2t+B-Yul6Wo6 z*Dh}FLT2r8Tid)&JBf`N(LB>OF{Rkzi40t-PmIO-k!>=OB9#z(#ArO7;hClIi0l9>_GODmaNVkCx=u^|$QZAg+7Gxs6KuqdMy zEhO=!OobA%MD?jH%caDAtk7Zoc{lxeI1ow`qc@XD2B%NYJzE6k=qF4qN~C!}81+0_ zy0Hk*nN&Zj)M#5s&fnQG;!4Hl z5T-diwzPu8J7>mM#^k>GZxwOfT9wie*&r5(&SBa^p zh+dQFPv-fP@?$)cNOH!iZ=pS(i>h!o5>Zl+MYo{iLQ0XY9urgOqDnl0PCy7xI;}!G zauOVhZYk1E5`jdpB_gbcbLK^PjQKUqLyn6(h-5{s-Iu3RQg<#hF>dQ_nipEo*3#8Y zI=BkF-Du3dCM`N?J-qA%9Y&Xc%S)-`Hup zLb6h^P>@(*{o2~+ES}eiJZtcM$LDVLfR1ipvRJlkUT2At029FEkt}Qh^HZPqf(S`!Ad0+S7N+_ z(Te6&rChPp@-!`M>1uCpZEw2@si=$rHp(P$^cvD%jljdVwzpG31K&O|-VaT%FPw-) zC3K(o%Cv1YL=QT-lz=vapE4ODA>0$ORkW4!;#{SN+FP_7BF4y|g)tWC&_m!5=e%sX z@~FK*EqOA5Mo-%k*-Sbrv(bgH{CmJp80XXJC{Y*Hz*Jr23G(`lx^;Q@rsn2F3)&WU zsuHUQ?2;=h>5ghun699fKG%LtbLX}Y;YjMQ77MW;lrlISugG@VH8Sv}J(u@yg40<@ zFY=J3iSatApxwnjGHV!hH3)0ck2bza*1}@tgbb%KIwcd~bQGW>hYgU0@sUkQaY_6 z(gvi3Na&+aF~Fp#YNE+fTYhwFA~$(MYGnf#C)(kN=vM{pl@|+?;;J~;CZri?5uf-T zNqZN>e^c7KAity1-UaEsDebMvPZi@O+G|7wDWyoO&{4GwPnGff7@`j6Vj5XTacc$U z=+R6sMjKKTB~!?d`SeD|h&+73=!qu^dRDQKQ&wW|N%a#g0+~|_14d*vYGM?S#SHWf zBKvcFs<3RNhw}VXM&lENBI24$3?i|Ms41+o=hGvVUDPrU0+?tkq%l%ZD`74mrWpK= zKti$+Bo<4oru`Wc>D7tU$^vDBl$Do{3(iul3iXW7oARy1YRcn}Tl>k-qO%srNgUhi zL^cMy4pEbI1Z5lm4x;mo!kG{$I~hOd7*h>BT>*J=gr3xj3wOqLimeH zL-@#vKA2*7zPbF0cQrl|AXc6OXmjv*k{Bm?60|sW|B7rQ_Kp}vv7FYDm(IjEM5YLZ z3Vc5Q0{xvSeA8Bwq5cRb3Ayw~m>;l_qR8}PgxNwaeO2@=P$%Fqv4^PqbaG|~Sysjq ztLddUv<2z>AlF`e?n+fo)%wL6D3`u=T1=QB+Lw$eWO~3R*m42`AW4C@x{f#0UdOV^ zaa}%ruCa6|slF%_Dl#pD<_?7oy-t-(>U1N|a+DFF=1&JR=Bh)O4A&QthVINzqgWcc zB+(#Y;!DKswp@3&aQh!;SP{KfhQ$!d9#ay<{7jO?(WIBoU9>%nKqY~Hkpv49LsY~ zK5P0bti$a(oY3JVI!yN17k)y80Ka+lIK7~QP@^Exeo-a0o^&(`lbTq9w)bdKcu%1* z2|iOBZF51PL>#6Q)Ho4`iv(@&o0^(xw@qD5{-o$%aq4X(AyrQHQG?@DONtx}DER0g z*0<i3?dTj4N)`=ik7!$OpMMNqNUosnM_2gp^bLP2wj-CcUzQJh32)8`Gqa^QjS z)k!t5xy1G=Q6U7`N*yv zom~yniHT(=)?rlK0f~x*A;jH?!^7I7B8 zyPYmFU?q!K((A#T#H<6|1r0}R^8L14h;E3cM4Zg`Qkp8zZ$+K*6+cj(!LmYDViOS=t9%hQE>T5ERn4)WLv7W3C6(o;GK($FEmXF?sFcF!fQn%4Ps>cS zJYaNW!0qyV=w7`x+Cjk8;B?A1gkYpB5DtAwBBt_+Db#2+Cu8C~{k~{Cn}PatG?FC~ z33L`H??kv9c^OH1N3+r-y?#YJYUSf>!5SBTFU|d8Kjy0Q4~z)t!EB|F40_;mIxQf& z7!+kXupo*oLosY_wk=$^(6$sG+x+>#zP=z9o^H6|23^`FeCJZYTB7Ru{a*TDBl)Z0 zC#XM0`K{ZhH)1R`{pt}z77tLW{%X3#W8q9oDG%NA(S}o_jWxU)Z>-;R6Hu8*IKHR( zyjO#8K0}9>>TrJM!90?=nFzy83$+nCbQt5NCcr!;ticOKt;XAw)Z&F=ZYn|JU7gjY zcXgJkvAHyxvZ`jx9(5{(vmfkDFPvN;NLzy3K9K)3D^ecd7s{W7ktp{J4M@ z2@%R4Ei4hrtC_E$y!phCD#{CEP%e4Qr?4fD>`~y4P~Joy(ef60TTosNURY?XLKe$O$kI)S>RgY^{~IxZraP9{B1>FZ9iliK?V(mdY?GooEZr{& z%Omk@v@M9(`jOabxdVo!_)L_W53ECB;0Q8Q_R zP#)|or8H*c`B0>EPy^Fs&m^747Ap~L#6&th9k#bDc3t87ro{AgMvg_puF%3vhc4EHNQ5J@Oe&Pzo6mB${MPgLS>~3^RTM1hxG{3z&B5%#CQ)jqUptz#Rk(T z3q8X|QXFmhLNro{?GugO!WLqS6cDQw&~%B?6^jz{B&OtLO~iaY#_Y{B4?8UvDI588 zVtP3y{=*J7nK2*Qmb8CK)}!e+ku5d_Lf=N8=Ktu-JC>ZeqLDJtTV)VYGarXVBwsi6 z7wPiknoFW95FR2Q@?9|IR$YW+s`s1#`yZYYH@TZ>7UXx~hdiyZY{oqsA19BiVmDc; z*L~D7Ve-cwg!AB=EN48i*>Yyh=b_Jk-ZFX31D3P4 zJ&1h2U^#pD7cJ-DKCg2pei>&Ahb&VDzHK=Vm!6+r|4YjS%YS9LaPZfbcW>Kkx#-YK z7F+#qEf**ES*G6lJIf_&UbfU_es8%nx!-bG>=nywhacY?RB{LW^jhJo@4r#V^(Y86(&MnQjD`}p!t7Cz6u?-jC47XaZ z8*aB+cePuu-~0jVlCC?fOY82m-mr0lb=j^B*5&?ttt*oET5nu_pEWdbqqY0>jaISl zbJnnXi&c94t5$i-kX3Pi!x}mC4QtQx$E>}{ZPw_m+pRZk{f>3z3(s0(TVApD?f8?m z>Yi^_#UFaCDv|kiRnq<4s+;FOTa}vdTvht^pH*cJ{h}&6_)^uXCBLs)y>5Tin)R1d z_aAgtTei8XZ@I@;{l1!D^{r0?t8aT~M)ms#XI6h;Xjb*W?klT5xOH~*hwf>r{_u{u z)wgG^s{Y8{1=Sxt_nPXDwYFBT-Q12BQ!TFk_=M}LKhb?d^&OMJ(j9OEaGT+F!&z|E zlOHY#w;2xi-c*Cpt8q7Z^%6MTqfRRO7Cc>H)Zi z;9h{k-ObgwQ@I-VUR0x>R1d?w23LO~!osbE+XlBE&UO->!41Oggu}Zjss*@ixIwsK zxPx%ElTm)SwQxgld*RSys_WsFzzxC;!ySY>_f$*ue7FI)ZEy$S>T3`mZY|sp+$;F56nz-@!u3uieU>B9}cZG$@qS6_>;a076-v$-1g zCsfzI3*q3_zzxCehqIl5XK+clhu~g-n|LP50oMzM`Xz&n>N! zY$P~I4lSdF*ZgRHR{XZ-mxr2;;x+V?h+U>p*HmdV`k}kQU>cQt(_{nPcBI#~LxWN}# zxY=sBGU@I^_(OYG_=#%xBI(wkS3LLg(U*4y!Z*J-a(QKh6Mi|m@{;x-?`~NCD;E9< zwY+88gWRW8zn6tCRX@V7b!if>ZUVagD=gl*DkCqSG-Tk9 z0$D)XliZ^<`>!nCfQ{y6vCL=vnsi(8goL{tzwSBnUsTrAtL4&#BXrq9!kxv!x$|`C zQ2DN~{3QH~2*2^{(TA^rp11iNUJf<=j!Coi=_6^%-{jo^_ngbZ6Inn%U6V?dhuj7A z;FQsohtOps!asB#3!m#ht&@bp@{sm<0^xR^&%!~)VxQ%c_U8JTN*J9SdL8jLUclnL z&ZAkDOxkUT2R}kjJ34Fcg`*F@9O2#X9)0+AL>OE&`tUmte%C0&Q~pQzdu%NI4Eh57 zbQh7=1$<2T|0KwTOIW-YRr+@8#vgTj;A0_)w;b`-T*~6*_+x~2A@SBD-mRChc)9*u zEFLK*s|6j8b|GHtdsw_BYB`I=)A7Ls2=-V#iKcSok_MeAU3DVgn6H{}93p zjV$~@UN5{MIv-qD-#Q#_J~+zor2V=OerP&NzgCrJ-IF$#)163vUx#>W9V}jMoNt{p z@GiB(BMd43R)m}FV&QV_+*Mpo5&dc(!uPsactNF4^Q2mmEXj8Qm}reh=ii}~V>Dy+oaCWsFmlPi_Nqt)pe#Vt7Jmy^Nvt&}Y+I*@QE)XxY z-`gi?sINZ8>cD%Bi!bz zS-4yC=^v~bA^mlTx9?gOZ-Uy6Mbh7jaKnpOxIwiXu}OpF(kK1k0OFmyn8n+{YHh)I zN5@lAznar5mi^Z;|JPLiF0H;o(s3i)w(D8Aj2f;Woi6yhmoonW)xX!6&aDWyj)&W! z)?i77lg~_9-aOgwrjS7j79j9XrBxtfgw|8>F7}!{sRL|M1^<8%yW8 z>D<42((YMh_@2bO9r65+uy|Y1H|b~jq|N2zB#E~J@wRT`^-}3L!u*rOJA`&dwIA6Br^FdFQSL(^c!-Y<@%>txwo)bgh{n}E`Lt)nfxx?MYxlNKct2qMLw;F zw~NQCSNW{OxJB~072%)we=MI`@F@K(pEO)f4wHCW5pU!3EZ)w1yANGljL&$oB;EnU zv;UmM8&b2tV{27Cxt^mIzPEUxT|;*Zr1-_p5YmEwFETtYu1;SV6Z`*jw6Kn<_c`_yTi8{scNS#JLq z3!hXcK+7lXF2|=NUKir+sAl5?nZwi12>eartwTK9$t>Q^QN|5KJ8vN4@h-$$-p%4|1EwE7&eQgX{~_+bPo-0d_9x*lK;M2S z%+lM>lf$^tQLOl++^q=TEwS)6HT}`(|A;qV9$P$8z8#1sC@kK-5z0sFkMR4(5dH!z z0^Ac}>DQ_4&@pK!Hy!(fm+Ke0aHQN5robMbWZ}Bha*tpaBITZecx=a3RO!b-*M)oUf+e zHvWAv|DMXfFX7*0J)eZXlz(5wzu&{Z>-l#B|Gu1mzn6cL^?DM28vV8murKqkNdc1r zCIw6im=rK6U{b)OfJp(90wx7a3YZiyDPU5-q<~2QlL96MObVD3FezYCz@&gl0h0nI z1xyN<6fh}ZQoy8uNdc1rCIw6im=rK6U{b)OfJp(90wx7a3YZiyDPU5-q<~2QlL96M zObVD3FezYCz@&gl0h0nI1xyN<6fjc2hDRN66LF_~BfizE?eWvX&i|8N?A^TV7ymt* z+y;;jLE>3)fq-=u+#0y2;Lf&MtTDJPaIeDQ1)x^kGGP5WUigd`q*nhO?nJ!g`3&-+ zXShZ<@)GFza7*CuqL%74aBJZ{54QvE1-Siie}}8V%b=&iIpJo*b-;DQ#o=y+TMLI* zepYXW!^^CypMWDTkbW8N?{HOkY4q8+-5_+$RV{6yxrx4HG^V5$b%mN@(Vn;>H^pKJ zsig0`l%f>zO!vnnBr!Loh#6&3HlB(0l?m3Yq%)~R|A^tPQZjS1sgx4Wlnly~x+<0k zi?Ot^WJsbt#frtk6b;gu5v7$~DN!m?=#Er0p2-JjkIxgcv5Ya9P9@Wn>bcJ75lNC1 zB9>4nq@+@blqDoel9EIc;b>gO-&>Sa!V;2Vi8Qj8vq?)RBK7tq;1%HyBXT0C#DOER zY`WJH>QOREd=>ppDoQFY5^CdNIw7sh0n!GEh%ENQtB*BEZzd53k)m-W6N+aN$cg?; z;;|(Zi>8q(zS9{Ih3ixLq$J|vJFO7BQjVhRh}MfFSb5OgC}m2KP?oepDubY;5D8Mf zbZ<5zCsrfLbWBl@8Sx=Wu?)ZioF1!F(Tt*YG;7F0@4_G#b4;*2cn`j-LVdjV?>h;yzP8g_uqH1roeX`xYw|a+l;Do)^ zJFAwguNtoET3e<5dIE1@ADXc5gx62JXYxSPLld@EZLNB!Y6t%AtXfy~x>fym=)@PR zcT}yddZB7Pp07n0e6Z@E^`Lcd!rtl^s)q1yJ#u@oYJb%s>y`IM{#ZOibPS|zA z@CoZL-%&kKeXwTZsXI^ITD5l7i|^iP-FwoZ3EQmus`pzrS8cA^XWeIgaKg5e4oujF z3O;w@7VFwmhN@p=_nKHNkAS|DAjt4ec`64V=XgSr;n#3s3Gv@@C&O-BTte`Ej(>*> zObA{($ozkf#v}NGPc!^MTwp@*bL$y?7#Elj+;um@*Wm&ag75hZ!%J|H3BhYNFnj?n zG$Hswj(^1QHjX#rf)nDuk7JvS;o5sy{C{$M@IHpWcQNzdvXS9Cr!s8c#PBV+0EMJi zb3emfxCn*duFo@kE-pkNcnil9a3Ko8!w)e3UvX^t0>hujMJY5s$9LkQ6oQw3k@@%F z!W4oZ{1U^L4htamSY#eoWx;IsUkV;odFGf3=I@Z21<${~2WX++l{FzJlR<_A>my42Fk)!|;VO89ww|hQH2n{qGoV z!B|P^*YPsLuXDWa_YA*qB~NcZ!-?4pPy7SJKW<`p@*f#~W)8!(2N>Qrm*JW}G5oJ) z9{WSS|0y(hW(uk-}-NcCv-8q`3;8u#_=F}E68Yhc`@@Jurhr0 zQicbs8U8%S$rHH$4a|S%i432)jN#W#VmQQc{mBe(;dsX>47V?5;VpR48_EB(D;QpW z8pFdkGW-M@nfU*e<87xi+!$j1``*Ry72OO^IFn&}nBnI*cJwm*AYMdA(tC9!!+qsr68}f& zhopS_TNwTj`WeB^^B4}JpAg(JpW!DDasR6sJ_CGB<6pz@$B-(;Z46t$X9RESU|2ep z;U$Y0{xkT1_%B(^@R!eExSQh$_<;D!9RGo1|3_H()!+-_e_)W|Gr$)F@3@QM$aS% zp8Pn&*SeU0>-QPH1$;)rCtqOrmmD|$FT?d7=HK;Kh6lY23*W&U2Klx77@qxIhPQBB zGtBT_j(7cl;TrHU$#3uT3_ro~#yt!#2{8W)e!=i^@Hq*;?j?r5%yIqi8Geo9g9jL% zb_EMx_h*J1XEJPWsHWxJ#PM3pu}Jx+&0_u?0fz6ol3`&c!@FlQ{NR-g|7R1!%V#tE zOY{p;zS(maz7YL_;QF}?f1;J)`OOTU3_d6Ry)6v?ANZKy)_DxSaRbA`RSbW78N*!* z7`_iL_9fwK7Bc*$6%4OwXZRC0GCb75@X8Rw`>tj9Yuya{7c(3dxj)C}gc&|?1M~ki z#~bnDG-PY}t;GCa3o*Q12ClYPYNALKZ|@n(*fa(s~EevUgfu=F>m@j2eE#^-ns z$3q++=6Em1Q+inb2RROKTzfA|e<{baIqv6pfa47u4{^MmT9N>5}$4fc3Y-Hj4IiAh&29A>)Z|8W3<2`Ep&$9T3Iqu+iN|fb4z;S@%y&Ny) zc=qRb{v2=Scmv0lP0WA08lK}l91n4Pm}A>!7JkZ2EdOqf0~`-=yp-dE9QSi@%z>A9B)v=bG)5n;XxLD zj~bri!yFHBJSE2RKge-_)Z|8WJ<2@W7hd2&!Y?xtZmEkmCTywy$#fb1ZP&&+!1q8#o^1css{K9Pi=-p=uEj`whE8RG5FvB2?^G|Rt(;{eA=j+b&gz;QpvgB)+* zc!=Ze91nB6hvVHGALe*3$5S$#{u~E5wtS7#pW|AN`#H98yn$nZ{+|6-6$GbV+ zz_D#B&!1y~<2@V?aD15KL5`=a;q~V@!0`~rOF16qxS!+Q9B<(GAjjJ|uKgw}&mN9# z93SRb;CM@;zREj%zvI!m*9xT^tJ>AK-X4$2A||_2<~maW}`U949%BaXi5B zI*tc9-oo)_j(2f9#PI=+hdHhp;PvO&&hcK3TRA?+ag1ZjgM*%*yvT$F}b?{A-S9bNmL!-5g)^ zAy%Fw$5(PZ%yEe0gB*W=eexQ0eeoo=qHH306BcU4!>WAvCNF_cg z#&EAm|34Upg@AqT*5S|T@Pj)16&?P%4nL;DkL&Q$I{aTc{JakTT89tl@L?T32@Qrv zx%!>1!)NR8#X4-)VYd!np~G`^_!=Evq{B;fIHbdh4zJYVn|1g$9sZaO->JiQ>+nV$ z{-O@w3u4{}w-N5MaD+cL!EJ`SAMW#TFr``upL_xCi*R3pdkF4fxG%#Ip4kHT2;5iU z9)%l%`x+eKpKrizh5IJlx8Mj5ZG+nm_iecE!0mwhF5LIv2u}^eeIM=za6g250`5t; zr{D;Wy8mQ@M6^dtEva&~sH%8-RBT8h(`BT-*LcN(xG8jxNsZ|P6?WEr{i>b3_*=-1( zl`=Ex_1~++R8)*-X6T=*SnuCZkk)8^AFXu8l2~58ku7J3|1=5QqK#!^|AI_E%Wgr zHpV6n#@-rbxF(-g|I zc^xm5*D(8v5);S#EI$~O60w*fWkS(NNQslVqg)>hE{JDFJL$Z|dq>A;B<5q@O zjACYEar@w?^@NcrmhOjYf<=h1M2_yp6Lh7aEy3ilB*w(ljC9oHoHdeIqX%3=nFL>$ zP*N+PT2ghyUMF1EV5j~mxJzVJb%Nbi=U8E{b3&NOWQBERI_h=X z)6rX$nT|s7R=NkAKXtU+ui@6w@|l6N-t?MPK<2&mbtvdF^A#~UV$+nD;m1^cOv%nx z`_&$HlqLJP+d3O{c#luXGTxdUOOoZN)uBMLm_6}W?TIeu@!Au|SF>ZQCmy9bm_0GS z&5i2JcH6NxCi;)pjySH09b5hI=v2Y%hHryzNC)cUa@w0^qHi2^JGMIGcw5L&i-P|6 zR!)77V!IU7$W*y2p>k_X_i|K%1-zO5RZlL|ONnHEkUiyAHCWc1D;n(Aymgi{`*m+& z-t$MyyH`y2Vu=Qe2qO6z3^vWjmy)utRQhKM8jDoUjO}%kBMYign;}>_XE^P)EDV>$ zjiO~*PfElyIG~aag|M(gnzXR-u*PGyA31?zIB`QQzHfc|;pSYk*$R*Itgyc=x*a;4 zlFDFFbxtA?BTK6Ko_Cp@J!^?)QvHQpvd-*~Z)JzHr^Sd8B0^JHlbI>-g=dX?jmBfR zn>s`nA<14hf||&RB;-8S&|*~57CcthpwO}{F{KZ8hIf%=s4|-nb;teKp}(YlJ9X_{Kx2kvF7QENipXFwM|#criu0=%oA|O}aN>YIFS4cg)93Mj;0HcI{=F$&{-1U1opB zpHChWSFI-JJ&qnJ4Qgw_X8A%TgghRj3UYKxItu<8pR9ZfN4R%p)^7ouACJs)JdyF( zs>`vaKvZ0Sma4F09M-~OIx398Z$S(5bDaFrrC{(nb{S^*D^S>>N1Yv23I_3d+SQ5F zO0uS-WZLka+LoqyZS9?lJ387Ib`KyNiIubQ z7Mo$@?+{XBs^8`AxYF>3W{R$zuxq?ZgB2?@BmQVgPabqC64L;;hC$>(ICG>i1FwFR|$U>J`>m3c~ zYB=jTrgBoDsz3kE$uRZ<@Riw#IVyr@<8b{^#2;`!>01E3;=O%ICyx2ck=Ini? zPac;#%8ln_ak~-ikDI9-xqUFl1vN);-klC8RPw@hIdC_Us}AbeDWA);H81SVFnUub!#fcDdF=wxo=>d`#5^jnGLXGq?;* zj3M1N+_z1HuV&0GujN#li&dqv3^CMgSp{SuTMNqHf;S%ZZ%kwvO$K?zZ%j#-R{1o^ zpr6wl%PnijXRiB@HZe_c~+#mc^L-h$SailyFG+0@(T zES}d{xx%-1b+*sFref*0ceEh~Ow%itLr2S^g_TQuQF~YW*i$zL0k#?Y2uFRboL;0z zt6C}~NNL)Y8D418L_#lWnYXyJ5)zu`P$BtD)2__WNRx(iAha2K7aM6*S5qIKbTd2f zI6CmrpT6iCxtAWk2nIWFB14fEDK}@8bcUVC(B2I=e(ief`uNymlqj7pp%S6^Z4<@J zqlI3@jK(Fbsk(d%Q_;mRW?HcsLFIXgzR)YhcqkYoXL~q9Y4lsQ71VDXv2?IRsF6ro z#^|kU0W|~lTbI8MmI(Ex6{k!_V=vlU7^C83%`a`}vZ@FLRZ6PgMVE}!gV5MMUS`ds z1be<2wWwSkZ;MJr9mPca+g~21lQ^;i!z~lY44D$S^lKK6m|3}qQH8;q)U7JZs3q)^ zsg5mZrILTbNDesO&l@mP2#%q6KZ3FVdM&rEaUd_Ju9XR93N?6j&3-kw@uSw=S{q3oA9I z`dw7_DYiDFk+Y-Kh%}LoaJx+5)|sRATcyI-g}xe7{eBbaScdrJwtN|1=1iBEu(O4J zGKu(tI5x6G|>%rV+7!5PPSZ;{9ZA zh#j-Sf*n*&x=HFfw(pkgK)H0ptrwKPj%r8HD!2NTeBHoael34=8amG+w`fthEb@y{ zmCHlFwqLoNDypmJ8l{5TI?p4&+Fvd7F{>jxSTs68QfA^*ve;JE}qG@tY5a+~l z$HYqX74@i{?rp;bh9P^M zu*rN=Gndh15S}05!{Ax)gd3*tkghYYu+<66gcY`E#D=S$$*Hz9&Vbg}IhNs#26h_{ zZM)32pf8C#QKOkyKVF7P=^Mp)NO+JFf8=OngH6FjpE!X^F8an{t0POSp#h~TJa2eg z`L$xhV#277sB88yjHD6h)QqATm}ivYv3_kw!I(mi79T6G&NjQ`IQzHRCE4rXHA3TU zsR53)OBxP4kNZvVX6G|IAGJ7^pV5~#%bK0faK*yt?j$OAxdNMFP@-!NyF<7Yx!7N4 z9UAT2x8(f+MVpkqQ)Gr)2zW7PR<}O;bvvJPGi|jDW0l4_O@-f-VG5~ZMM#y{rlH}O zk<@lmmcWQm>5C`Ko^y;%cg>z-n272Ozhj$~nkw+|XA&~|NQL`|{xUFAQ$5Nrr8hOz zw@_2nuBGeuQI1JRHJX--CZ5|tS&78+dnYTAx_;MWCGyDcG^s@D`Ryf@NIkztvJ$E1 zcSlwv_56OA$|RrP5m|}!wR<5ekwb15WJMCs?SC9o>gKfAoE9tZgjL|8BWZ4P$(Z_# zIZT&5vo%Wcn8UPTBPLfK&0!kvkS#?VbC?bWm4X)*Xe8HI7e0=OjfmzlG&u;!Hfp_t zwq=;wd41S2JLWJc!^16tW$+KRA>My%%VcJs=_P^E_*quB3+wD{u;7MW>Rvw z%Dh6tyw#=nGH@ZAnj$0H6DnZ@D5R4qGH|I$z}=Jfl>j;$VZS3a5gL@cY!VAqD_ zIeet$MpHQ8s(!o-q6q1ziPB)3Gbd%{r0g9uDI-!&jQpx#Jj)N*TU&`fR_U25u?3^q|sd8(mW9-caZN*$keEY8?LPgK< zirH^R+o$F%p2yw_TQPm5lKs}4Wtg*!cgiedks_^Xsn8W9H0{a=O`0@0qqV4I9^MVz zJofjDjAWakIaElGqG?y=QW=^wgd?F%g@{s4^p-uRZf-lv+r39|->YWqRBu|1C*n%} zkPCg4fcAbp^G3)cGp!$u+t!K3sANL?)Hv;urie8j2sA}(ky{s30bX)V-W0KoU3k@t zW9G8V7*`L>`S{y^K5h!r5*rOnVQLCf!!B5jYN!F`{@6%FNrl4w86`cFyzW4wZL8P% zm~TUPhrYs0tHF0teZHlsGUp1_)aT(PW{W#I+81>l{fRrzqe4rtJoO6Q3Byyb&?RkZ z>J_?6l_yUxJvoB*HBBd`>Es=FoSXL^Q}C8h`Z;|}!D}=wnSz(!h@?^bHQ`-WRN=$~t zxExZ}C{i|~gi>NOjaPDp`ow5_nXE+W8*Jo}lD18oWoyHl?27teuyet}X1x2oxeMzO z_0f37<;2_JgTV#yOueIFh5cgsQh9YDSN$%0$>yvEJINpv$;PFbxtnT(LGrM^VQNT< zCDPfH5)$|#@7uBL4qo=63*ez_JSrt*B^b;kLb1eZB_)YzWm)Tjt_6L4*-U#X+7pf2 zgF*HKw5IR8pC`uB3P@citf0+6-=5kTi%NYk}KW>JEug#mM>LZC?) zOxbx>hvU)s(wOT;3~7FIGd1O;_!3BkrKE_kjax+cX`{lu)dM|nX z<#i4_qrE;)d!#Qj^L@5Ukdu;1HufofGS40r=Dn3PA!AHA$q15 zjzN#P90EG6Kn)t7>{8NH|Lwbj7vEXtXU~D zqh2FGa@STHck~@2uME-kHj{D2(uOPE@%@fzyc)qU;uxQx>OLKUN7Up-y7`+fpjAvR zsLh*5<6S}VRl#77lEF8b6H+y*E~oOUnj#5FT%Wj7k)x?}fl|#?(BCb(D-W(Nv{JD&MYBBa0 zB}%7Ds6;3_%i(h#&62cs9#kxZF8DYz(4;a;gGz((&BW9as^2;a>0pUaN1tFNGCIbJ zQ>NY}DsXJZs5n{kys68oBJ@ycuYRv0FVu`@W~jIUHsRdDmcu)1>^3TZ$6|$P7h{3Z7hac=LsK}Ie017l zd8M@S%B*&ec#&l$Ly6h0(v)&@Rw3H<{I0H!MJh<+05g{UU?$0gVoJOx)2mm)OUG7~ z?~)m&lUP*5ax%+NMWIkM9?gV8FvI9ql}EGco)qKI{K+aj*>$1WjFAO3{F==ebU|L% zfW3++6ZL;S{Z89;-clm5GKxZDDUcQ)t=GPbNu$*fMKR(6s7H6yify|bYKv%n$+ zC^5skj7)?}g(qcIQYcC!+LLQa{9xwUvCc6m39eUSQld}MOe{x`FnAeroRI*#5%4P% z&m@w18Y2*2uf{F{ws1X9?2E?w^>r%}u$6Xn!(JxReYBgI8ggsm5t{Z)XYK(L7Bd}Q zBge6;@e+M~i8yBVDxbDrgT^HDef0bCy_RgD>7)jABMwxJ#_=Gai zKJ=atyZjIvk;wR%jA5V5*hleP;%x7pI+kPW+=}|b%nE;Zl0tN$3=Q^-(ua&Q>bANZ z9>X3fKek8-YXrg5(k#qz3jE_}R(}=yc49ve(NslgC3XSTLjiGOQxw}F1(l=3Zmc&i zC%W%Tma*BSx!JaG;X>O|d~EaQ2mAVh>9p;J8*UiGelJor)YciW-G&9h@(jSF;6Bf1gbDMU1dNYwUe)3be(avc{P=U16!#-g}OvzY3(2IC&xI!w|y@QBn z-1QKn>neoJg28kz#QaLg>A8tyKiT|cyNqmChZK!U(M+r#`&((_N9n#WJ|toLv^u6~ zm@rgU3D(X{%WTDDyr*)If0nwlLbG*4j!GzgGyNM1$x18~!U#ohnTEb*4EJ$7l;;BM5*89tV6j3;*Q}BLpsI zks^&&>J>9oX;q)KeO+^OWze~*e>er*A?NRz1s98V4M-JDo7A-<=d|1juNcdqsK4RoT4x{d9a;Ut&kjrh zp!el=;OOiE<)ME1nmg3wEjVPvr=&SQUl~6?@uPNB{)PP2Lre}=$x}KmVnB80;;MCn zmOys-&@JLfm+tt%HaTtOm(@8~bdrXL{K1)%d_?j9C9ZS$sUd?hLh)l-h*lRMWnkP= zJdls1CyW#d6RkQ2j(im=D}}%9(KKvP$rMhTq?K5tQHd#i#O6(obEI+4pl{?8EgIcK z<#YA>i1>ZP?dE3IL6y+z_mL1>^TvljIW@@?HrSY4pA$r;u%Wg_Q`pQZP=ZH4uD>JY z+!%$8;q@}+uG`A(y4Bh%OkGbgbv<^D!&JCTg^QgPDnFgm`I@u40%g&h-I0r$M{(-^ zcoa6K)^m*CJ6(q9iX7r4+s1I%73U}W=*GPT#IDY?1vU{ktmWIuewSdKOJk9-FBoyM zowK}QGZI}8rZz-s9yRX8%x^&p1~q%g_|eEBn-fO7xJI{0qGT3WgQ7+$x*rj?_c|<^ zkGS4UZ@PJD(`qpajM&2J5+^%8#)`=skZwl71x1=BI+7*NbkybK*UvCx zI9rG!kBcvQzWu70zhI}ZhIm@Mf~o##vyp4Xubot3+|p@YuC?Gzv|wY>OtvGU);Z5$q^lPC(4>%@U(0&zwh_*NIbA|l$a|ti zdIuUt&O#XKOZVtEqn4b;v6}}qSD5jZ&)dkcGY~~ByR!?$#(0z4w+#^_k)7_~$a(?W z*%@<^3MaBDNoh?;xIr!v$6hpSKg3;fl;v=c+AT!T)u!D(8qWAMcFR}0-`VA!)s)m zdjD`(LA{-zfJbx%#3J-{2p%~iih|$o_xcU#`y76M#G!bcLL}@B_zeD%6c(Lfx7Upt zI9z_WK7XInBYC_ozbwciT3Xio2Lw;REBKv~Pm%-SfM4$~dcBdbleBL{@CBSkf4|$~ zK=UDX#1)Ac`~z;;?{f(bzv6bd1A>9Rfq>s52$DMza68ey2L25A{IXwmx&3aR;&B8F z?e9PZy@7zo;SWbVvXQ^MO4ug|PQmH+gH9d;e|Y_V#UJ*0T@tw8sfhaeJ0yqO6YzQP zULdy+ju_fka`_~17raELUvL}Zqex=duQ=Ud#peR2>C>0OK2T6{OA0tu@EGdnMZLT} zuTw(jbNFOK{|E~nk5_U^9>I@Rh#2zsI|H&K?02L81Oh07K7XgIh(6Kpl0|eL!Efjv zUd88#KnS=asHNX;pdaE#WXY{~m4N8zN zh!Sub%IAe}kx+t&;tvRZqx^w%i#YrN#p#HM4#8Nyut#x%LEN%a7Mxzi(0-AK*BKEa zf&|(~ijlwFUOC|OIbA+QQ6heap?*%qAxn@k&WPebM>Ozf*zFLU0Rg?(?InDoZ+}Jc zc|}2R2?1n-!sz|OKGa?GI8Zdd8>H6zyA-cqaD`uPu~-EJ4MM8@c8^lUo!YRz;w=l*Wr)_H{_U+|3QAyiN98WX16~;opfA7Q<&QWq zGC4dR#Q|dK{liKi>~l%sfD_Wm?J<GO9X10f)Ti9JrI=r+(-g4p-SVZjYS?h1qr{lgiENCDB|K_~Y~E{}o# zoJt@9_6z$IDH296*5@xcWsfL;a}*3@igA1tA(Su%JDmQ7wT^L)OPM;h$^lyy5PL~7`?g9(AM1y=({0^sAQox)6mopqT^k32K25X~h zIJ_<>7>4m1gR4Vy1fZSxp&ki_^nC&7k4`9m0!BBeaEA6l+lY{TQWy%1;5U?C^!m{S zM5i2vIEMIGoZ*`L;sO{0c7oViCzKPiBUiH z_&hEL1_@{w5p*&GebK1UTrm78VYehX4E%>t#UX%w0&Wj#YOKHF4an&DUdfAY?sFN^ z7clzx9HPeqHb-AI$PYor%t90;sF*IFEF1c7z^@1a!H3=rMZw`TjBgm8yr8hh>qX;6 zjN_{yIm3Q7uqlMe}6#s1{|W>z@HfQN$DY61hk`MXn!f7pmZJ=m<+>@ z%fSDF;B)&T-T;c>^g>nC^RFz1Jq`zG6Lz_XDyH`ry%@bEzu)I^f`yz0{_)8k=pC4S zdGS?b{Kn`54bTnE#~TPkSJ9{Ma{Jt($0>TDJp_ERq5rr9MV2Cd!S6v!_#KA&L%)J@ z>~lCUc!bdr^y$kACXimi?emLnRMRj%_(U(%M>pm`pq|fR^vA&Cb-Fw*#fc%%Zz#VA z`3BWcglq|fBS!r-B1QyAUnr3%o?z79T{0#>ey1OEC!a?Y4gDYTHS7iRqHCd}8};8v z1fy;Myc6-Ej~mBN=zSh<*d=*l`6MNRf*R_F*{9bLCgN2R73dQB^cA91LOhF5pio8w{R4gx@((H)lqU&7 zMjzh;1A_~bGjNGlkX(lJQ7t*_R-9xU#4OfOKiLP(*Nu)x<|z>1`t$|p=U$?iJ21~c zAJY4~rGV`6g%5lKsc83k=W8xw~y%Yp5 zR4CC%KLN@oM6?VBlmcF3d=a`gh6u?oAU;$DJ^jLx*MV^@5RhDA#9O5QJ6$4_dkj61 zfWv9j9|D+s%WlQ(gLVrw$iRPo1rslHe?N3g!EcoB5uX$K6EQ+WFcB0C{2>NlA9IF9 zci0aRV4VNBCG;%^l&eSpGQc=~L;go3OwT={BTQICUw?@VU|!j!KmvO((CYo2$kr)C z!3ek_u+jG;L z!Qu5OGQ^KTet;wn&_?k}eoRv(L;4;GRwF3JB1SMYfPueY67fMj3t$==K`{*R!;0t- z6&F-+^d!GvsK1M7Cw@#(9XE4DrNDUO5->y4(;vzQ zMi3`4jlkPwD4!FJ<8wm5Vs0p*D*E`c3kFsNEDrOY2m!A5_xoX?L(g+z{sk?-;18yP z=0{XJcL0_|1AjvCmchO-KEl!iOQ}A6%=|rJ*j?N{rwAjjq5R+pk5`tQ0;YHv!VLLG zyb`*w7p5a9Hvz%GzYbT}u542CcpI*nCUd`_q06(a7iAi=0?5J`|k&?yzzykV4u zX;$B47_Xq~!X_Jbhb8ELdVjA=!AuEixriBsVl-L01z5_U^dcJ!SjH(QtfUz29APKy zwGqtv^yvq{&JxB944Z-osiyaLi(a=6QW_nIO{^$xy$r0+qo9!y)8-#BDU$dNEXEC=bg{sEuBaA$=bV z+R&;*#D~W2Go&BzVJ#paV=#tF4mQ@)7uF1zbR?LwoPJ0>gMY*&V@4^1h){^#ib17@ zDvAF-@HYnafN{vcN(XdlMZ&o1bh?cuYabd2bi=qG5Ku)!{Tv<`J!B`Ale}RC1k{(` zBgoD`00wU?3(2q=>;0k3VxlZVtCPh5Oq+Ut59V6|5xu}8iGt!Wh%A_+Tv!alfaHL6 z+1UTUl(1xAwFQb1I=Ugg%Oyi2g)u=Aq4T*7^^;r@R0YKa27_tLX!3LtMH1FT%$5Xb zgog6Nj*bNb40l2}jDBY5{|>0SP6-{<1H%jEANu;cT^^7SU^*pW zW`VTy@iEth(iX;qGyu)i*#96?h)Uw{_+;c@XdQFfbI$_GxRS~5ZGJv`J+$~56o|{P+*;F;5f%4Kw1Oy>>$q+Bk^ffX(p z>q(NKONxHkjV=RY4c5|Nan#ojtCRvXO&AKuLXgo)6bWGT_F*)EIwkmwRt$(_ECUE0 ztTVbW6LeZE|NK?Wu*Fid*kZ9*;mBt)o>k#llcj2c#ZrZT7K;eCgm~f;vYhbpY+IG3 zhQSg3R^Mgf-C?5~ft>|3zrq|`Hqr~l8x-%cf( zvJ1pz&t3O}<*R;Q)qMZ{tGb?k^?Pf+zeGIsl*@l{)h+jLJZJXGOE2lZ_0Hz%+EY&Z z!lz#O^x%nR+`H@eb_lJpp-SYDm6QJ&|M(+a@$Y!P z@WAU=pZ(#D&$!O|&JBNm>5TjScwlEw`z@dQpYG*%e)_IYtoqwYi>_E)H>H2U#7U2T zX!4GycKo}q=S%PXkDAP5pZ#3TRhL|N@vJ`{xc`G6bgX@P&S$^;q2En?@TTn6J^vl~ z&8KER{rlLbhrb&7%P0Lc4@{3f^W;ZjeOLeEmcu>kl2?1;zkc`W&AZau7bH4A=((e7 z>0jJ$%v<;5r@nT|zviS)>~)-Y`LsV=_|fxknf8;*F8|1Lmwx<`KYjL&Z!W*%$MWi? zkK8GAv<$aQ|G&Deuk8O~`;R*pwfVZv_|w(a?@g^)dG{s%y!-xFhj;&SWmU}|&f4@L z@ArT7Nam&3z}@d!W`AbV^nHJB|90Ty{Yy{0bm-w*_wM-Ji@wgu&E7Wg#}5vCyy>|$ z&%XBW^S|%dx;uXQ+|E~Pzxn$=`oHV=>LYhtGv&swd}P{9)6d&c`}Bkb%fIyHlP5a% zzPhTd{=VBE3Y~fSq~E*|ckX}6^4p7ka?iWoD}3V7AD+MTo-=pd*JyhnyM5wa+XM5R zcf9}PLm!>_&zb&Lf3@x2kAGm}v!Um%{MmJz&I#Q<**f?6onL%@*7u+K^7FOZzj*G` z=Nw#nrfcda<#T@aiK+Lz$N9hsmkeC-VWke)>wD=oM z6TiFllyhxQ*7n}}(AWOsq#bKtz3u#-8TT!`?!`|}eQti$_YU5AN8HhO>cLN4^PRgd z+WCQJ&$#}-m&`ry{y$xI=Yw^Nl~t`L-6U7vbz$I{;i0?U-?;aw=PZl2-ctMcx~*5t zo^tqI3j^V6fAi$Jb$|PF@W%&2wSU^*_~B(wKKuBqm+kERz^)Jc?fj;B8+z`$;_sGy zZ%F%H7Yr^AJwIzs?~eN~4A#8=q_4Uk{6--7?E3i2Km7S`cg}B&|Kdh()rn_a|I>S< zUwemUd^-03690Do@zwo*e_8nRp7x#3e(cZj&#irF!>;Flvf<*BmV9~Z+2Idgv+0$` zul&R7Ctb4qH+Niq=f}SE*u{4?zVgLCygc)+`>uc2N2c8Vli`c5?45St$&=4{;6txI z{PLvV?z-{P&;R?DtE`|PC0?+t${{OmgUtHT55EsfpyRO-&3K9Kru^qE!4C9#LC zzk1{+f4idX{$W#GUa{xbOQ(PEZ>vtJePz>seDI=65+8lzzvGj3w@Hi6`IGBs zi8W`+_dWcrf8V+DSIW;G|InsY?td=db~yCK_rGWBw{6MBTXrZD-+%Jrx>HV${OXU@ z=?Q0C-#W1UGha#k&yzoT#&PnQ?_PQLjnfxim3?;3h40(^U%PI3?{B6~dgHghIq#u^ zcm89_XWm$S`}0r!;*q*3e|hxRe}4CG4t(c}-+g-3S5Ccu?Xs#ze!lky56s`+`ueTD zruTmDwnsM(J=Xcs|9k4O$o<#;;)mgn{rQY1=biQm<>4zHwI=pEzWV5{ubp=7+ArMm z$S39ddb$$z>+ROnzkO-Rs=s{u>{oty|H+s9`-iPRt7*9U`Pk>)xO08r?0-#o^~$B| z_x$op_uALpHSd#y)wBP0+HVIBeqr)W-+%AwfAl{3wa-2C)E!q{_~DOl+;Pnf-1(!kTZ2WB3zgs^g z{OeaA_(w)uzJ1_lGjH#GPPCO<4*p}wUst=^S?$bJ2+TOVNJs+Gk@X+qI&#ZrH%IsHO{N{?UT=@8D z@BaGx{(q@;`p*Od0C3zH>M=(dIb)88$Wg{Dxh6-nw8)YBK1$3z%`rz~dv&t964$fbLYr0H)*cX!SnnF&x_~v@AG~CL&)8xjg-P}m`Ez*MWzQ<+1M%eE;;L; zL*X`AZ^FKs{|d!egnai!IK+BUz1Nc~WqVbk7jyk_jQkiF=JD)J$}uf+d8$X9y>R^Q zL9s#T5Xd}ly5%()Od$)&UF+EjHZ(zAHCzhao zIZ_RQxTiBl1-w%gq9D^=55kLd^=O8n>4(z#6M)rxuIS=Hp^jT3m0nsaOP-7`+Tn%F zvn>BsbMe^Wc?!GsvVV$8&C~j{p#}ns&dW!z+bEOuu!`Xwu2K!i$lrAq7@^&58*S30a)40d~sLvaWX0sF4m|da&8#y1xpmdP7xU{^7z3h$mA>5M0rY{ zbx1g_%fNpzAG^^ql)vIpRegag>#|C}W z-KqIiNIKIZ(2lCxw=Pl0cgPS$QkO&UTl_@lu{xgs$Ri#t+ZzJjOGB#2jPQ+pTp^E= zSg;K2qw9yw8N`Y=F{ZBkeM;C9{sMpp-gENe#&ujxLUp}kXwRBoJJ0ygP%szVk@qB? z93PkZr8UzMt6n)jvfy;gq`rVuHJbn4tY288TbXGuC<02hV9XB*(Fr}MsS!kcjk=x@i| zkBUjfvuE`t^9`OwXgBIz--$@@Ki1Z_#cOPeAgoZIhOkV~3<#gN`!-j;dG6F0mV7Cm zyCd8tD43-pBk@(-X1J%uU;pv?eVS111$y}OGJXI2sOo~eRv&&%S_@brIv{lbbQo+4 zJ5s`*!c7+4YM$oNYwzb3hR-tsA@X|A03tjO45T1266;GA-Jy?H zo{1#o{!|)=P}fP@HvLb&dqT!fmJ;0M54aJA4%GBJN8f;wvUTEgtpK{5o_(%ph^0}| zo3}vCy)D77rk+oiDn70|B87F4I-u6_rhskPgG*1ASr|fco;8oKds1*3DQ8yF^ zx@J8M?vM4WZY6r&#mL1d0FoogC~vE>3+fy@pfS?Cyd<^Am`vvm%j=pRAl2d#fh5cj zRfMJ3aX3N04rLr7x4N9gkByq#>cgH!OKf#uS66^w7iH9V(WI$lyERgE!gsd>lH`F_ z8xgo;I7$&Jh!@dJft<0dmXtKKXDv^JxPk_P7hAh-RBzmiuSMNYr^xQ}7kiYvrv5H|k6olDyw-Ezweu zv1H=V_Czzct_7nI7iB(6HcDfQ+vwN6d#>Xn2R)beT}hOyzM?#~34~Q4?xfyG%hpG) zKwjF908L2lspdan1U+OU`S&Bq{`*h5LQ`gcv7U2hR;1TZcnVnMU4);)fsO@eZuSHC z^}7J?A6!|IYu1_3Tl|V076XOA1U~s1GepiMiwx|B3QWXN3z}R|;;V|C;|R!^eX$zL b;`kGWjl~CVkWK=tTOCsH{C}VPJN*9uca-3! From 33093cb139736a187b0496cf799d4645ec434a42 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 19:56:13 +0100 Subject: [PATCH 19/27] fix compilation in tests --- lightbug_http/http/parsing.mojo | 8 +++---- lightbug_http/http/response.mojo | 21 +++++++------------ tests/lightbug_http/cookie/test_cookie.mojo | 6 +++--- .../lightbug_http/cookie/test_cookie_jar.mojo | 4 ++-- tests/lightbug_http/cookie/test_duration.mojo | 6 +++--- .../lightbug_http/cookie/test_expiration.mojo | 4 ++-- tests/lightbug_http/http/test_chunked.mojo | 2 +- tests/lightbug_http/http/test_http.mojo | 16 +++++++------- tests/lightbug_http/http/test_json.mojo | 18 ++++++++-------- tests/lightbug_http/http/test_parsing.mojo | 2 +- tests/lightbug_http/http/test_request.mojo | 8 +++---- tests/lightbug_http/http/test_response.mojo | 12 +++++------ tests/lightbug_http/io/test_byte_reader.mojo | 18 ++++++++-------- tests/lightbug_http/io/test_byte_writer.mojo | 6 +++--- tests/lightbug_http/io/test_bytes.mojo | 2 +- tests/lightbug_http/test_header.mojo | 18 ++++++++-------- tests/lightbug_http/test_host_port.mojo | 4 ++-- tests/lightbug_http/test_server.mojo | 4 ++-- tests/lightbug_http/test_uri.mojo | 2 +- 19 files changed, 77 insertions(+), 84 deletions(-) diff --git a/lightbug_http/http/parsing.mojo b/lightbug_http/http/parsing.mojo index 08db2336..4f51c921 100644 --- a/lightbug_http/http/parsing.mojo +++ b/lightbug_http/http/parsing.mojo @@ -467,13 +467,13 @@ fn http_parse_response_headers[ get_token_to_eol(buf, msg, msg_len) - if msg_len > 0 and msg[0:1] == " ": + if msg_len > 0 and msg[byte=0:1] == " ": var i = 0 - while i < msg_len and msg[i : i + 1] == " ": + while i < msg_len and msg[byte=i : i + 1] == " ": i += 1 - msg = String(msg[i:]) + msg = String(msg[byte=i:]) msg_len -= i - elif msg_len > 0 and msg[0:1] != String(" "): + elif msg_len > 0 and msg[byte=0:1] != String(" "): return -1 parse_headers(buf, headers, num_headers, max_headers) diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index 89e48ae6..4dd739a9 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -46,17 +46,13 @@ comptime ResponseParseError = Variant[ ] -struct Json[T: Movable]: - """Wraps a value to be serialized as a JSON HTTP response body. +struct Json: + """Pre-serialized JSON value for use as an HTTP response body.""" - Parameters: - T: Any struct type to serialize as JSON. - """ + var _serialized: String - var value: Self.T - - fn __init__(out self, owned value: Self.T): - self.value = value^ + fn __init__[T: AnyType](out self, value: T): + self._serialized = serialize(value) struct StatusCode: @@ -303,17 +299,14 @@ struct HTTPResponse(Encodable, Movable, Sized, Writable): if HeaderKey.DATE not in self.headers: self.headers[HeaderKey.DATE] = http_date_now() - fn __init__[T: Movable](out self, var body: Json[T]): + fn __init__(out self, var body: Json): """Serialize a typed value as JSON and return a 200 OK response. - Parameters: - T: Any struct type to serialize as JSON. - Args: body: The Json-wrapped value to serialize. """ self = HTTPResponse( - body_bytes=serialize(body.value).as_bytes(), + body_bytes=body._serialized.as_bytes(), headers=Headers(Header(HeaderKey.CONTENT_TYPE, "application/json")), ) diff --git a/tests/lightbug_http/cookie/test_cookie.mojo b/tests/lightbug_http/cookie/test_cookie.mojo index e239c70a..7ac661c5 100644 --- a/tests/lightbug_http/cookie/test_cookie.mojo +++ b/tests/lightbug_http/cookie/test_cookie.mojo @@ -1,7 +1,7 @@ -from collections import Optional +from std.collections import Optional from small_time.small_time import SmallTime, now -from testing import TestSuite, assert_equal, assert_true +from std.testing import TestSuite, assert_equal, assert_true from lightbug_http.cookie import Cookie, Duration, Expiration, SameSite @@ -46,5 +46,5 @@ fn test_expires_http_timestamp_format() raises: assert_equal(expected, http_date.value()) -def main(): +def main() raises: TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/cookie/test_cookie_jar.mojo b/tests/lightbug_http/cookie/test_cookie_jar.mojo index 9ced8dfa..a107f86d 100644 --- a/tests/lightbug_http/cookie/test_cookie_jar.mojo +++ b/tests/lightbug_http/cookie/test_cookie_jar.mojo @@ -1,5 +1,5 @@ -from testing import TestSuite +from std.testing import TestSuite -def main(): +def main() raises: TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/cookie/test_duration.mojo b/tests/lightbug_http/cookie/test_duration.mojo index 8845e376..1978740f 100644 --- a/tests/lightbug_http/cookie/test_duration.mojo +++ b/tests/lightbug_http/cookie/test_duration.mojo @@ -2,16 +2,16 @@ import testing from lightbug_http.cookie.duration import Duration -def test_from_string(): +def test_from_string() raises: testing.assert_equal(Duration.from_string("10").value().total_seconds, 10) testing.assert_false(Duration.from_string("10s").__bool__()) -def test_ctor(): +def test_ctor() raises: testing.assert_equal( Duration(seconds=1, minutes=1, hours=1, days=1).total_seconds, 90061 ) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/cookie/test_expiration.mojo b/tests/lightbug_http/cookie/test_expiration.mojo index 4ac4dbcb..b8d7ef89 100644 --- a/tests/lightbug_http/cookie/test_expiration.mojo +++ b/tests/lightbug_http/cookie/test_expiration.mojo @@ -3,7 +3,7 @@ from lightbug_http.cookie.expiration import Expiration from small_time import SmallTime -def test_ctors(): +def test_ctors() raises: # TODO: The string parsing is not correct, possibly a smalltime bug. I will look into it later. (@thatstoasty) # print(Expiration.from_string("Thu, 22 Jan 2037 12:00:10 GMT").value().datetime.value(), Expiration.from_datetime(SmallTime(2037, 1, 22, 12, 0, 10, 0)).datetime.value()) # testing.assert_true(Expiration.from_string("Thu, 22 Jan 2037 12:00:10 GMT").value() == Expiration.from_datetime(SmallTime(2037, 1, 22, 12, 0, 10, 0))) @@ -12,5 +12,5 @@ def test_ctors(): pass -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/http/test_chunked.mojo b/tests/lightbug_http/http/test_chunked.mojo index 5825be88..8aed8624 100644 --- a/tests/lightbug_http/http/test_chunked.mojo +++ b/tests/lightbug_http/http/test_chunked.mojo @@ -1,5 +1,5 @@ from lightbug_http.http.chunked import HTTPChunkedDecoder -from testing import TestSuite, assert_equal, assert_false, assert_true +from std.testing import TestSuite, assert_equal, assert_false, assert_true fn chunked_at_once_test( diff --git a/tests/lightbug_http/http/test_http.mojo b/tests/lightbug_http/http/test_http.mojo index dc75e767..8b34d56b 100644 --- a/tests/lightbug_http/http/test_http.mojo +++ b/tests/lightbug_http/http/test_http.mojo @@ -1,10 +1,10 @@ -from collections import Dict, List +from std.collections import Dict, List import testing from lightbug_http.header import Header, HeaderKey, Headers from lightbug_http.io.bytes import Bytes from lightbug_http.uri import URI -from testing import assert_equal, assert_false, assert_true +from std.testing import assert_equal, assert_false, assert_true from lightbug_http.cookie import Cookie, Duration, RequestCookieJar, ResponseCookieJar, ResponseCookieKey from lightbug_http.http import HTTPRequest, HTTPResponse, encode @@ -13,7 +13,7 @@ from lightbug_http.http import HTTPRequest, HTTPResponse, encode comptime default_server_conn_string = "http://localhost:8080" -def test_encode_http_request(): +def test_encode_http_request() raises: var uri: URI try: uri = URI.parse(default_server_conn_string + "/foobar?baz") @@ -51,7 +51,7 @@ def test_encode_http_request(): testing.assert_equal(req_encoded, as_str) -def test_encode_http_response(): +def test_encode_http_response() raises: var res = HTTPResponse("Hello, World!".as_bytes()) res.headers[HeaderKey.DATE] = "2024-06-02T13:41:50.766880+00:00" @@ -82,7 +82,7 @@ def test_encode_http_response(): testing.assert_equal(res_encoded, as_str) -def test_decoding_http_response(): +def test_decoding_http_response() raises: var res = String( "HTTP/1.1 200 OK\r\n" "server: lightbug_http\r\n" @@ -123,7 +123,7 @@ def test_decoding_http_response(): # testing.assert_equal(v2._v, 2) -def test_header_iso8859_encoding_regression(): +def test_header_iso8859_encoding_regression() raises: """Regression: header values must be ISO-8859-1 encoded on the wire, not raw UTF-8. Before the fix, a header value containing 'é' (U+00E9), which Mojo stores @@ -151,7 +151,7 @@ def test_header_iso8859_encoding_regression(): assert_false(utf8_lead_found) -def test_request_header_iso8859_encoding_regression(): +def test_request_header_iso8859_encoding_regression() raises: """Regression: request header values must be ISO-8859-1 encoded on the wire, not raw UTF-8. Mirrors test_header_iso8859_encoding_regression but for HTTPRequest.encode(), @@ -179,5 +179,5 @@ def test_request_header_iso8859_encoding_regression(): assert_false(utf8_lead_found) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/http/test_json.mojo b/tests/lightbug_http/http/test_json.mojo index d808fb1a..99540acc 100644 --- a/tests/lightbug_http/http/test_json.mojo +++ b/tests/lightbug_http/http/test_json.mojo @@ -1,5 +1,5 @@ -climport testing -from testing import assert_equal, assert_true +import std.testing as testing +from std.testing import assert_equal, assert_true from emberjson import parse, deserialize from lightbug_http.header import HeaderKey @@ -25,28 +25,28 @@ struct Point(Movable, Defaultable): self.y = 0 -def test_json_response_status_and_content_type(): +def test_json_response_status_and_content_type() raises: var res = HTTPResponse(Json(Message("hello"))) assert_equal(res.status_code, 200) assert_equal(res.headers[HeaderKey.CONTENT_TYPE], "application/json") -def test_json_response_body_is_valid_json(): +def test_json_response_body_is_valid_json() raises: var res = HTTPResponse(Json(Message("hello"))) var body = String(res.get_body()) var parsed = parse(body) assert_equal(String(parsed["text"]), '"hello"') -def test_json_response_multiple_fields(): +def test_json_response_multiple_fields() raises: var res = HTTPResponse(Json(Point(3, 7))) var body = String(res.get_body()) var parsed = parse(body) - assert_equal(Int(parsed["x"]), 3) - assert_equal(Int(parsed["y"]), 7) + assert_equal(parsed["x"].int(), 3) + assert_equal(parsed["y"].int(), 7) -def test_json_ok_string_passthrough(): +def test_json_ok_string_passthrough() raises: # Pre-serialized JSON strings go through OK directly var body = '{"key": "value"}' var res = OK(body, "application/json") @@ -55,5 +55,5 @@ def test_json_ok_string_passthrough(): assert_equal(String(res.get_body()), body) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/http/test_parsing.mojo b/tests/lightbug_http/http/test_parsing.mojo index 7bd60edf..2f71e65f 100644 --- a/tests/lightbug_http/http/test_parsing.mojo +++ b/tests/lightbug_http/http/test_parsing.mojo @@ -4,7 +4,7 @@ from lightbug_http.http.parsing import ( http_parse_request_headers, http_parse_response_headers, ) -from testing import TestSuite, assert_equal, assert_false, assert_true +from std.testing import TestSuite, assert_equal, assert_false, assert_true # Test helper structures diff --git a/tests/lightbug_http/http/test_request.mojo b/tests/lightbug_http/http/test_request.mojo index 6df71e88..561c0a50 100644 --- a/tests/lightbug_http/http/test_request.mojo +++ b/tests/lightbug_http/http/test_request.mojo @@ -10,7 +10,7 @@ comptime default_max_request_body_size = 4 * 1024 * 1024 # 4MB comptime default_max_request_uri_length = 8192 -def test_request_from_bytes(): +def test_request_from_bytes() raises: comptime data = "GET /redirect HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nUser-Agent: python-requests/2.32.3\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept: */*\r\nconnection: keep-alive\r\n\r\n" var parsed = parse_request_headers(data.as_bytes()) var request: HTTPRequest @@ -38,7 +38,7 @@ def test_request_from_bytes(): testing.assert_true(request.connection_close()) -def test_read_body(): +def test_read_body() raises: comptime data = "GET /redirect HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nUser-Agent: python-requests/2.32.3\r\nAccept-Encoding: gzip, deflate, br, zstd\r\nAccept: */*\r\nContent-Length: 17\r\nconnection: keep-alive\r\n\r\nThis is the body!" # Parse headers first var data_span = data.as_bytes() @@ -74,9 +74,9 @@ def test_read_body(): ) -def test_encode(): +def test_encode() raises: ... -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/http/test_response.mojo b/tests/lightbug_http/http/test_response.mojo index dda6da22..138947be 100644 --- a/tests/lightbug_http/http/test_response.mojo +++ b/tests/lightbug_http/http/test_response.mojo @@ -3,7 +3,7 @@ import testing from lightbug_http.http import HTTPResponse, StatusCode -def test_response_from_bytes(): +def test_response_from_bytes() raises: comptime data = "HTTP/1.1 200 OK\r\nServer: example.com\r\nUser-Agent: Mozilla/5.0\r\nContent-Type: text/html\r\nContent-Encoding: gzip\r\nContent-Length: 17\r\n\r\nThis is the body!" var response: HTTPResponse try: @@ -33,7 +33,7 @@ def test_response_from_bytes(): ) -def test_is_redirect(): +def test_is_redirect() raises: comptime data = "HTTP/1.1 200 OK\r\nServer: example.com\r\nUser-Agent: Mozilla/5.0\r\nContent-Type: text/html\r\nContent-Encoding: gzip\r\nContent-Length: 17\r\n\r\nThis is the body!" var response: HTTPResponse try: @@ -57,17 +57,17 @@ def test_is_redirect(): testing.assert_true(response.is_redirect()) -def test_read_body(): +def test_read_body() raises: ... -def test_read_chunks(): +def test_read_chunks() raises: ... -def test_encode(): +def test_encode() raises: ... -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/io/test_byte_reader.mojo b/tests/lightbug_http/io/test_byte_reader.mojo index 6017f5b5..7ec80c22 100644 --- a/tests/lightbug_http/io/test_byte_reader.mojo +++ b/tests/lightbug_http/io/test_byte_reader.mojo @@ -5,7 +5,7 @@ from lightbug_http.io.bytes import ByteReader, Bytes, EndOfReaderError comptime example = "Hello, World!" -def test_peek(): +def test_peek() raises: var r = ByteReader("H".as_bytes()) var b: Byte try: @@ -31,7 +31,7 @@ def test_peek(): testing.assert_true(raised, "Expected EndOfReaderError") -def test_read_until(): +def test_read_until() raises: var r = ByteReader(example.as_bytes()) var result: List[Byte] = [72, 101, 108, 108, 111] testing.assert_equal(r.read_pos, 0) @@ -41,7 +41,7 @@ def test_read_until(): testing.assert_equal(r.read_pos, 5) -def test_read_bytes(): +def test_read_bytes() raises: var r = ByteReader(example.as_bytes()) var result: List[Byte] = [ 72, @@ -78,7 +78,7 @@ def test_read_bytes(): ) -def test_read_word(): +def test_read_word() raises: var r = ByteReader(example.as_bytes()) var result: List[Byte] = [72, 101, 108, 108, 111, 44] testing.assert_equal(r.read_pos, 0) @@ -88,7 +88,7 @@ def test_read_word(): testing.assert_equal(r.read_pos, 6) -def test_read_line(): +def test_read_line() raises: # No newline, go to end of line var r = ByteReader(example.as_bytes()) var result: List[Byte] = [ @@ -127,7 +127,7 @@ def test_read_line(): testing.assert_equal(r2.read_pos, 13) -def test_skip_whitespace(): +def test_skip_whitespace() raises: var r = ByteReader(" Hola".as_bytes()) var result: List[Byte] = [72, 111, 108, 97] r.skip_whitespace() @@ -137,7 +137,7 @@ def test_skip_whitespace(): ) -def test_skip_carriage_return(): +def test_skip_carriage_return() raises: var r = ByteReader("\r\nHola".as_bytes()) var result: List[Byte] = [72, 111, 108, 97] r.skip_carriage_return() @@ -151,7 +151,7 @@ def test_skip_carriage_return(): testing.assert_equal(String(unsafe_from_utf8=bytes), String(unsafe_from_utf8=result)) -def test_consume(): +def test_consume() raises: var r = ByteReader(example.as_bytes()) var result: List[Byte] = [ 72, @@ -171,5 +171,5 @@ def test_consume(): testing.assert_equal(String(unsafe_from_utf8=r^.consume()), String(unsafe_from_utf8=result)) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/io/test_byte_writer.mojo b/tests/lightbug_http/io/test_byte_writer.mojo index 47efd08c..63e8b548 100644 --- a/tests/lightbug_http/io/test_byte_writer.mojo +++ b/tests/lightbug_http/io/test_byte_writer.mojo @@ -12,7 +12,7 @@ from lightbug_http.io.bytes import Bytes, ByteWriter # testing.assert_equal(to_string(w^.consume()), to_string(Bytes(2))) -def test_consuming_write(): +def test_consuming_write() raises: var w = ByteWriter() var my_string: String = "World" w.consuming_write(List[Byte]("Hello ".as_bytes())) @@ -22,7 +22,7 @@ def test_consuming_write(): testing.assert_equal(String(unsafe_from_utf8=result^), "Hello World") -def test_write(): +def test_write() raises: var w = ByteWriter() w.write("Hello", ", ") w.write_string("World!".as_bytes()) @@ -44,5 +44,5 @@ def test_write(): testing.assert_equal(String(unsafe_from_utf8=w^.consume()), String(unsafe_from_utf8=Span(result))) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/io/test_bytes.mojo b/tests/lightbug_http/io/test_bytes.mojo index 3cf9c6ef..aed57a10 100644 --- a/tests/lightbug_http/io/test_bytes.mojo +++ b/tests/lightbug_http/io/test_bytes.mojo @@ -86,5 +86,5 @@ fn test_string_to_bytes() raises: testing.assert_equal(c.key, String(unsafe_from_utf8=c.value)) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/test_header.mojo b/tests/lightbug_http/test_header.mojo index cb403bb1..50e8e6d7 100644 --- a/tests/lightbug_http/test_header.mojo +++ b/tests/lightbug_http/test_header.mojo @@ -1,9 +1,9 @@ from lightbug_http.header import Header, Headers, encode_latin1_header_value, write_header_latin1 from lightbug_http.io.bytes import ByteReader, Bytes, ByteWriter -from testing import TestSuite, assert_equal, assert_true +from std.testing import TestSuite, assert_equal, assert_true -def test_header_case_insensitive(): +def test_header_case_insensitive() raises: var headers = Headers(Header("Host", "SomeHost")) assert_true("host" in headers) assert_true("HOST" in headers) @@ -43,7 +43,7 @@ def test_header_case_insensitive(): # assert_equal(header["Trailer"], "end-of-message") -def test_encode_latin1_ascii(): +def test_encode_latin1_ascii() raises: """ASCII values are passed through unchanged.""" var result = encode_latin1_header_value("hello, world") assert_equal(len(result), 12) @@ -51,7 +51,7 @@ def test_encode_latin1_ascii(): assert_equal(result[5], UInt8(0x2C)) -def test_encode_latin1_supplement(): +def test_encode_latin1_supplement() raises: """UTF-8 codepoints U+0080–U+00FF are transcoded to single ISO-8859-1 bytes.""" # "é" = U+00E9, UTF-8: 0xC3 0xA9 → ISO-8859-1: 0xE9 var result = encode_latin1_header_value("é") @@ -69,7 +69,7 @@ def test_encode_latin1_supplement(): assert_equal(result[3], UInt8(0xE9)) -def test_encode_latin1_obs_text(): +def test_encode_latin1_obs_text() raises: """Raw obs-text bytes (0x80–0xFF, not part of a valid UTF-8 sequence) pass through as-is.""" # 0xA2 alone is not a valid UTF-8 lead byte → treated as obs-text var result = encode_latin1_header_value("c\xa2y") @@ -79,7 +79,7 @@ def test_encode_latin1_obs_text(): assert_equal(result[2], UInt8(0x79)) -def test_encode_latin1_above_latin1(): +def test_encode_latin1_above_latin1() raises: """Codepoints above U+00FF fall back to raw UTF-8 bytes (best-effort).""" # "€" = U+20AC, UTF-8: 0xE2 0x82 0xAC — codepoint > 0xFF → raw passthrough var result = encode_latin1_header_value("€") @@ -89,7 +89,7 @@ def test_encode_latin1_above_latin1(): assert_equal(result[2], UInt8(0xAC)) -def test_write_header_latin1_encodes_value(): +def test_write_header_latin1_encodes_value() raises: """Values with Latin-1 supplement characters are encoded as single bytes on the wire.""" var writer = ByteWriter() write_header_latin1(writer, "x-test", "café") @@ -101,7 +101,7 @@ def test_write_header_latin1_encodes_value(): assert_equal(bytes[13], UInt8(0x0A)) -def test_headers_write_latin1_to(): +def test_headers_write_latin1_to() raises: """Headers.write_latin1_to transcodes values for HTTP wire format.""" var headers = Headers(Header("x-lang", "café")) var writer = ByteWriter() @@ -112,5 +112,5 @@ def test_headers_write_latin1_to(): assert_equal(bytes[11], UInt8(0xE9)) # single Latin-1 byte for 'é' -def main(): +def main() raises: TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/test_host_port.mojo b/tests/lightbug_http/test_host_port.mojo index e59c7a67..17f00611 100644 --- a/tests/lightbug_http/test_host_port.mojo +++ b/tests/lightbug_http/test_host_port.mojo @@ -1,5 +1,5 @@ from lightbug_http.address import HostPort, NetworkType, ParseError, TCPAddr, join_host_port, parse_address -from testing import TestSuite, assert_equal, assert_false, assert_raises, assert_true +from std.testing import TestSuite, assert_equal, assert_false, assert_raises, assert_true fn test_split_host_port_tcp4() raises: @@ -167,7 +167,7 @@ fn test_split_host_port_error_missing_bracket() raises: _ = parse_address[NetworkType.tcp6]("[::1:8080") -def test_join_host_port(): +def test_join_host_port() raises: # IPv4 assert_equal(join_host_port("127.0.0.1", "8080"), "127.0.0.1:8080") diff --git a/tests/lightbug_http/test_server.mojo b/tests/lightbug_http/test_server.mojo index db4d6907..3ac0d403 100644 --- a/tests/lightbug_http/test_server.mojo +++ b/tests/lightbug_http/test_server.mojo @@ -2,7 +2,7 @@ import testing from lightbug_http.server import Server -def test_server_defaults_to_keep_alive_off(): +def test_server_defaults_to_keep_alive_off() raises: var server = Server() testing.assert_false( server.tcp_keep_alive, @@ -10,5 +10,5 @@ def test_server_defaults_to_keep_alive_off(): ) -def main(): +def main() raises: testing.TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/lightbug_http/test_uri.mojo b/tests/lightbug_http/test_uri.mojo index d823a6a2..00126b27 100644 --- a/tests/lightbug_http/test_uri.mojo +++ b/tests/lightbug_http/test_uri.mojo @@ -1,5 +1,5 @@ from lightbug_http.uri import URI -from testing import TestSuite, assert_equal, assert_false, assert_raises, assert_true +from std.testing import TestSuite, assert_equal, assert_false, assert_raises, assert_true fn test_uri_no_parse_defaults() raises: From 3559838c5bf897d71011e3da14d6452e1b62c332 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 19:58:25 +0100 Subject: [PATCH 20/27] use published deps --- pixi.lock | 243 +++++++++++++++++++++++------------------------------- pixi.toml | 16 ++-- 2 files changed, 110 insertions(+), 149 deletions(-) diff --git a/pixi.lock b/pixi.lock index 761f59b3..4c175144 100644 --- a/pixi.lock +++ b/pixi.lock @@ -16,6 +16,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -24,7 +25,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda @@ -52,6 +53,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda @@ -60,10 +62,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ../EmberJson - build: hb0f4dca_0 - - conda: ../small-time - build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -71,6 +69,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -79,7 +78,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda @@ -107,6 +106,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda @@ -115,16 +115,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ../EmberJson - build: he8cfe8b_0 - - conda: ../small-time - build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -132,7 +129,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda @@ -156,6 +153,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda @@ -163,10 +161,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ../EmberJson - build: h60d57d3_0 - - conda: ../small-time - build: h60d57d3_0 default: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -183,6 +177,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -191,7 +186,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda @@ -219,6 +214,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda @@ -227,10 +223,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ../EmberJson - build: hb0f4dca_0 - - conda: ../small-time - build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -238,6 +230,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -246,7 +239,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda @@ -274,6 +267,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda @@ -282,16 +276,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ../EmberJson - build: he8cfe8b_0 - - conda: ../small-time - build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -299,7 +290,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda @@ -323,6 +314,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda @@ -330,10 +322,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ../EmberJson - build: h60d57d3_0 - - conda: ../small-time - build: h60d57d3_0 integration-tests: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -372,6 +360,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/dulwich-0.21.7-py313h536fd9c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -400,7 +389,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda @@ -469,6 +458,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/secretstorage-3.4.1-py313h78bf25f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -493,10 +483,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ../EmberJson - build: hb0f4dca_0 - - conda: ../small-time - build: hb0f4dca_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda @@ -525,6 +511,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/dulwich-0.21.7-py313h31d5739_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -553,7 +540,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.11.0-6_haddc8a3_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.11.0-6_hd72aa62_openblas.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-15.2.0-he9431aa_18.conda @@ -622,6 +609,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/secretstorage-3.4.1-py313h1258fbd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda @@ -646,10 +634,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ../EmberJson - build: he8cfe8b_0 - - conda: ../small-time - build: he8cfe8b_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/_openmp_mutex-4.5-7_kmp_llvm.conda @@ -676,6 +660,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dulwich-0.21.7-py313h63a2874_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email-validator-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/email_validator-2.3.0-hd8ed1ab_0.conda + - conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-0.127.1-h4d8500f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/fastapi-cli-0.0.23-pyhcf101f3_0.conda @@ -702,7 +687,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.11.0-6_hb0561ab_openblas.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgcc-15.2.0-hcbb3090_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_18.conda @@ -765,6 +750,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/rich-toolkit-0.19.7-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/starlette-0.50.0-pyhfdc7a7d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -790,10 +776,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-hbf9d68e_6.conda - - conda: ../EmberJson - build: h60d57d3_0 - - conda: ../small-time - build: h60d57d3_0 - pypi: https://files.pythonhosted.org/packages/e0/2e/815384e25cdade147af784ad5a0f71fe10602c5e0a1d35a9c9040a72248b/abnf-2.4.1-py3-none-any.whl unit-tests: channels: @@ -811,6 +793,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -819,7 +802,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda @@ -847,6 +830,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda @@ -855,10 +839,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ../EmberJson - build: hb0f4dca_0 - - conda: ../small-time - build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -866,6 +846,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -874,7 +855,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda @@ -902,6 +883,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda @@ -910,16 +892,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ../EmberJson - build: he8cfe8b_0 - - conda: ../small-time - build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_1.conda @@ -927,7 +906,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda @@ -951,6 +930,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda @@ -958,10 +938,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ../EmberJson - build: h60d57d3_0 - - conda: ../small-time - build: h60d57d3_0 util: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -978,6 +954,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -987,7 +964,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-ha1258a1_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_18.conda @@ -1015,6 +992,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-27.1.0-py312hda471dd_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.5-py313h07c4f96_0.conda @@ -1023,10 +1001,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h41580af_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda - - conda: ../EmberJson - build: hb0f4dca_0 - - conda: ../small-time - build: hb0f4dca_0 linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-20_gnu.conda - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda @@ -1034,6 +1008,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/icu-78.3-hcab7f73_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1043,7 +1018,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.22.2-hfd895c2_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45.1-default_h1979696_102.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libedit-3.1.20250104-pl5321h976ea20_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-h376a255_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.2.0-h8acb6b2_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libgomp-15.2.0-h8acb6b2_18.conda @@ -1071,6 +1046,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyzmq-27.1.0-py312hdf0a211_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.3-hb682ff5_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h0dc03b3_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.5-py313he149459_0.conda @@ -1079,16 +1055,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zeromq-4.3.5-hc0523f8_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-h85ac4a6_6.conda - - conda: ../EmberJson - build: he8cfe8b_0 - - conda: ../small-time - build: he8cfe8b_0 osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-hd037594_9.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.12-py313hd8ed1ab_100.conda + - conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.8.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/isort-7.0.0-pyhd8ed1ab_0.conda @@ -1097,7 +1070,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.22.2-h385eeb1_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-22.1.2-h55c6f16_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.2-h8088a28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda @@ -1121,6 +1094,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyzmq-27.1.0-py312h022ad19_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda + - conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.5.5-py313h0997733_0.conda @@ -1128,10 +1102,6 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zeromq-4.3.5-h4818236_10.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - - conda: ../EmberJson - build: h60d57d3_0 - - conda: ../small-time - build: h60d57d3_0 packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -1686,33 +1656,30 @@ packages: purls: [] size: 7077 timestamp: 1756221480651 -- conda: ../EmberJson - name: emberjson - version: 0.3.1 - build: h60d57d3_0 - subdir: osx-arm64 - variants: - target_platform: osx-arm64 - depends: - - mojo-compiler >=0.26.2.0,<0.27 -- conda: ../EmberJson - name: emberjson - version: 0.3.1 - build: hb0f4dca_0 - subdir: linux-64 - variants: - target_platform: linux-64 - depends: - - mojo-compiler >=0.26.2.0,<0.27 -- conda: ../EmberJson - name: emberjson - version: 0.3.1 - build: he8cfe8b_0 - subdir: linux-aarch64 - variants: - target_platform: linux-aarch64 - depends: - - mojo-compiler >=0.26.2.0,<0.27 +- conda: https://repo.prefix.dev/modular-community/linux-64/emberjson-0.3.1-hb0f4dca_0.conda + sha256: 58c9da88a2443fe1ae8f38a8730248bafc7783e9dee2026fb6b0a38bfd434ca2 + md5: 73f92508b896490acb866af97ae51158 + depends: + - mojo-compiler >=0.26.2.0,<1.0a0 + license: Apache-2.0 + size: 11734456 + timestamp: 1774189159890 +- conda: https://repo.prefix.dev/modular-community/linux-aarch64/emberjson-0.3.1-he8cfe8b_0.conda + sha256: c185b1c1e2b895df1b8af446e8ddcc3577b27c2d975f70873a80ec5e903f6f8f + md5: 9f06f1593eae8ccd1cee6a8cd424f360 + depends: + - mojo-compiler >=0.26.2.0,<1.0a0 + license: Apache-2.0 + size: 11735430 + timestamp: 1774188948168 +- conda: https://repo.prefix.dev/modular-community/osx-arm64/emberjson-0.3.1-h60d57d3_0.conda + sha256: a1b804d4d7fa3841f589364bdcb1d3b00947f4f851ed11daf92de4f58b5f0744 + md5: 1e949858744193640145757df6afbd88 + depends: + - mojo-compiler >=0.26.2.0,<1.0a0 + license: Apache-2.0 + size: 11733418 + timestamp: 1774188963598 - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.1-pyhd8ed1ab_0.conda sha256: ee6cf346d017d954255bbcbdb424cddea4d14e4ed7e9813e429db1d795d01144 md5: 8e662bd460bda79b1ea39194e3c4c9ab @@ -2332,43 +2299,43 @@ packages: purls: [] size: 107691 timestamp: 1738479560845 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.4-hecca717_0.conda - sha256: d78f1d3bea8c031d2f032b760f36676d87929b18146351c4464c66b0869df3f5 - md5: e7f7ce06ec24cfcfb9e36d28cf82ba57 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda + sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c + md5: 49f570f3bc4c874a06ea69b7225753af depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 constrains: - - expat 2.7.4.* + - expat 2.7.5.* license: MIT license_family: MIT purls: [] - size: 76798 - timestamp: 1771259418166 -- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.4-hfae3067_0.conda - sha256: 995ce3ad96d0f4b5ed6296b051a0d7b6377718f325bc0e792fbb96b0e369dad7 - md5: 57f3b3da02a50a1be2a6fe847515417d + size: 76624 + timestamp: 1774719175983 +- conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.5-hfae3067_0.conda + sha256: 6d438fc0bfdb263c24654fe49c09b31f06ec78eb709eb386392d2499af105f85 + md5: 05d1e0b30acd816a192c03dc6e164f4d depends: - libgcc >=14 constrains: - - expat 2.7.4.* + - expat 2.7.5.* license: MIT license_family: MIT purls: [] - size: 76564 - timestamp: 1771259530958 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.4-hf6b4638_0.conda - sha256: 03887d8080d6a8fe02d75b80929271b39697ecca7628f0657d7afaea87761edf - md5: a92e310ae8dfc206ff449f362fc4217f + size: 76523 + timestamp: 1774719129371 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.5-hf6b4638_0.conda + sha256: 06780dec91dd25770c8cf01e158e1062fbf7c576b1406427475ce69a8af75b7e + md5: a32123f93e168eaa4080d87b0fb5da8a depends: - __osx >=11.0 constrains: - - expat 2.7.4.* + - expat 2.7.5.* license: MIT license_family: MIT purls: [] - size: 68199 - timestamp: 1771260020767 + size: 68192 + timestamp: 1774719211725 - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda sha256: 31f19b6a88ce40ebc0d5a992c131f57d919f73c0b92cd1617a5bec83f6e961e6 md5: a360c33a5abe61c07959e449fa1453eb @@ -4061,33 +4028,27 @@ packages: - pkg:pypi/six?source=hash-mapping size: 18455 timestamp: 1753199211006 -- conda: ../small-time - name: small_time - version: 26.2.0 - build: h60d57d3_0 - subdir: osx-arm64 - variants: - target_platform: osx-arm64 +- conda: https://repo.prefix.dev/mojo-community/linux-64/small_time-26.2.0-hb0f4dca_0.conda + sha256: 64a5d6ae8adb01afa41234094401dcd7c65d55866594801643d73f4135528d59 + md5: 1a8a43216fa2529565c3490e2e60e8fb depends: - mojo-compiler >=0.26.2.0,<0.26.3.0 -- conda: ../small-time - name: small_time - version: 26.2.0 - build: hb0f4dca_0 - subdir: linux-64 - variants: - target_platform: linux-64 + size: 1449284 + timestamp: 1774654897636 +- conda: https://repo.prefix.dev/mojo-community/linux-aarch64/small_time-26.2.0-he8cfe8b_0.conda + sha256: bb846d95be9fddebc2d1d9e4deb03f570d2c7607fe3de3c07e84955f4121e179 + md5: 75825d50cb9c4b063785ee0fc0599db1 depends: - mojo-compiler >=0.26.2.0,<0.26.3.0 -- conda: ../small-time - name: small_time - version: 26.2.0 - build: he8cfe8b_0 - subdir: linux-aarch64 - variants: - target_platform: linux-aarch64 + size: 1449288 + timestamp: 1774654907863 +- conda: https://repo.prefix.dev/mojo-community/osx-arm64/small_time-26.2.0-h60d57d3_0.conda + sha256: 06ceb84bc03ab9c99f2a96183f5dc222c52fc64769bee7a06eca240a897a5ea1 + md5: efca4a5328269879a92bfb6dfe2541fa depends: - mojo-compiler >=0.26.2.0,<0.26.3.0 + size: 1449709 + timestamp: 1774654896487 - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_2.conda sha256: dce518f45e24cd03f401cb0616917773159a210c19d601c5f2d4e0e5879d30ad md5: 03fe290994c5e4ec17293cfb6bdce520 diff --git a/pixi.toml b/pixi.toml index 193ddacb..86654faa 100644 --- a/pixi.toml +++ b/pixi.toml @@ -41,23 +41,23 @@ backend = { name = "pixi-build-mojo", version = "*" } [dependencies] mojo = ">=0.26.2.0,<0.26.3.0" -small_time = {path = "../small-time"} -emberjson = {path = "../EmberJson"} +small_time = ">=26.2.0,<26.3" +emberjson = ">=0.3.1,<0.4" [package.host-dependencies] mojo-compiler = ">=0.26.2.0,<0.26.3.0" -small_time = {path = "../small-time"} -emberjson = {path = "../EmberJson"} +small_time = ">=26.2.0,<26.3" +emberjson = ">=0.3.1,<0.4" [package.build-dependencies] mojo-compiler = ">=0.26.2.0,<0.26.3.0" -small_time = {path = "../small-time"} -emberjson = {path = "../EmberJson"} +small_time = ">=26.2.0,<26.3" +emberjson = ">=0.3.1,<0.4" [package.run-dependencies] mojo-compiler = ">=0.26.2.0,<0.26.3.0" -small_time = {path = "../small-time"} -emberjson = {path = "../EmberJson"} +small_time = ">=26.2.0,<26.3" +emberjson = ">=0.3.1,<0.4" [feature.util.dependencies] isort = ">=7.0.0,<8" From 787d97420f015247076cf99c0b69806bdd304d26 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 20:09:01 +0100 Subject: [PATCH 21/27] dont re-export json struct --- lightbug_http/http/json.mojo | 11 ++++++++++- lightbug_http/http/response.mojo | 11 +---------- tests/lightbug_http/http/test_json.mojo | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lightbug_http/http/json.mojo b/lightbug_http/http/json.mojo index 4ce2744d..bb2dc30d 100644 --- a/lightbug_http/http/json.mojo +++ b/lightbug_http/http/json.mojo @@ -2,12 +2,21 @@ from emberjson import ( parse, deserialize, try_deserialize, + serialize, JSON, JsonSerializable, JsonDeserializable, ) from lightbug_http.http.request import HTTPRequest -from lightbug_http.http.response import Json + + +struct Json: + """Pre-serialized JSON value for use as an HTTP response body.""" + + var _serialized: String + + fn __init__[T: AnyType](out self, value: T): + self._serialized = serialize(value) fn json_decode(req: HTTPRequest) raises -> JSON: diff --git a/lightbug_http/http/response.mojo b/lightbug_http/http/response.mojo index 4dd739a9..ca5005e9 100644 --- a/lightbug_http/http/response.mojo +++ b/lightbug_http/http/response.mojo @@ -1,5 +1,5 @@ -from emberjson import serialize from lightbug_http.connection import TCPConnection, default_buffer_size +from lightbug_http.http.json import Json from lightbug_http.header import ParsedResponseHeaders, parse_response_headers from lightbug_http.http.chunked import HTTPChunkedDecoder from lightbug_http.http.date import http_date_now @@ -46,15 +46,6 @@ comptime ResponseParseError = Variant[ ] -struct Json: - """Pre-serialized JSON value for use as an HTTP response body.""" - - var _serialized: String - - fn __init__[T: AnyType](out self, value: T): - self._serialized = serialize(value) - - struct StatusCode: """HTTP status codes (RFC 9110).""" diff --git a/tests/lightbug_http/http/test_json.mojo b/tests/lightbug_http/http/test_json.mojo index 99540acc..52d37505 100644 --- a/tests/lightbug_http/http/test_json.mojo +++ b/tests/lightbug_http/http/test_json.mojo @@ -4,7 +4,7 @@ from std.testing import assert_equal, assert_true from emberjson import parse, deserialize from lightbug_http.header import HeaderKey from lightbug_http.http import OK, HTTPResponse -from lightbug_http.http.response import Json +from lightbug_http.http.json import Json @fieldwise_init From 5dc13e807d7be5856342d89524a1831ed8d50e27 Mon Sep 17 00:00:00 2001 From: Val Date: Sat, 28 Mar 2026 20:17:56 +0100 Subject: [PATCH 22/27] fix package --- lightbug_http/utils/owning_list.mojo | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lightbug_http/utils/owning_list.mojo b/lightbug_http/utils/owning_list.mojo index 0bf1d840..3bbfc4b4 100644 --- a/lightbug_http/utils/owning_list.mojo +++ b/lightbug_http/utils/owning_list.mojo @@ -124,7 +124,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) # Operator dunders # ===-------------------------------------------------------------------===# - fn __contains__[U: Equatable & Movable, //](self: OwningList[U, *_], value: U) -> Bool: + fn __contains__[U: Equatable & Movable, //](self: OwningList[U, ...], value: U) -> Bool: """Verify if a given value is present in the list. Parameters: @@ -171,7 +171,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) return len(self) > 0 @no_inline - fn __str__[U: Writable & Movable, //](self: OwningList[U, *_]) -> String: + fn __str__[U: Writable & Movable, //](self: OwningList[U, ...]) -> String: """Returns a string representation of a `List`. When the compiler supports conditional methods, then a simple `String(my_list)` will @@ -191,7 +191,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) return output^ @no_inline - fn write_to[W: Writer, U: Writable & Movable, //](self: OwningList[U, *_], mut writer: W): + fn write_to[W: Writer, U: Writable & Movable, //](self: OwningList[U, ...], mut writer: W): """Write `my_list.__str__()` to a `Writer`. Parameters: @@ -209,7 +209,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) writer.write("]") @no_inline - fn __repr__[U: Writable & Movable, //](self: OwningList[U, *_]) -> String: + fn __repr__[U: Writable & Movable, //](self: OwningList[U, ...]) -> String: """Returns a string representation of a `List`. Note that since we can't condition methods on a trait yet, @@ -303,7 +303,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) earlier_idx -= 1 later_idx -= 1 - fn extend(mut self, var other: OwningList[Self.T, *_]): + fn extend(mut self, var other: OwningList[Self.T, ...]): """Extends this list by consuming the elements of `other`. Args: @@ -404,7 +404,7 @@ struct OwningList[T: Movable & ImplicitlyDestructible](Boolable, Movable, Sized) # TODO: Remove explicit self type when issue 1876 is resolved. fn index[ C: Equatable & Movable, // - ](ref self: OwningList[C, *_], value: C, start: Int = 0, stop: Optional[Int] = None,) raises -> Int: + ](ref self: OwningList[C, ...], value: C, start: Int = 0, stop: Optional[Int] = None,) raises -> Int: """ Returns the index of the first occurrence of a value in a list restricted by the range given the start and stop bounds. From e9e8bbfb9d7db8c4ebc31f7de1ba7e9596e5ace5 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 29 Mar 2026 12:37:25 +0200 Subject: [PATCH 23/27] restore socketclosed --- lightbug_http/server.mojo | 7 ++++--- lightbug_http/socket.mojo | 14 ++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lightbug_http/server.mojo b/lightbug_http/server.mojo index fbabd983..f8a7a720 100644 --- a/lightbug_http/server.mojo +++ b/lightbug_http/server.mojo @@ -291,7 +291,7 @@ fn handle_connection[ try: bytes_read = conn.read(buffer) except read_err: - if read_err.isa[EOF](): + if read_err.isa[EOF]() or read_err.isa[SocketClosedError](): provision.state = ConnectionState.closed() break # On keep-alive connections, treat timeout (EAGAIN) as clean close @@ -331,7 +331,8 @@ fn handle_connection[ provision.last_parse_len, ) except parse_err: - _send_error_response(conn, BadRequest()) + if not parse_err.is_incomplete(): + _send_error_response(conn, BadRequest()) provision.state = ConnectionState.closed() break @@ -376,7 +377,7 @@ fn handle_connection[ try: bytes_read = conn.read(buffer) except read_err: - if read_err.isa[EOF](): + if read_err.isa[EOF]() or read_err.isa[SocketClosedError](): provision.state = ConnectionState.closed() break raise read_err^ diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index 35816a14..e71b8fa9 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -84,10 +84,11 @@ struct InvalidCloseErrorConversionError(Movable, Writable, TrivialRegisterPassab @fieldwise_init struct SocketRecvError(Movable, Writable): """Error variant for socket receive operations. - Can be RecvError from the syscall or EOF if connection closed cleanly. + Can be RecvError from the syscall, EOF if connection closed cleanly, + or SocketClosedError if the socket was already closed. """ - comptime type = Variant[RecvError, EOF] + comptime type = Variant[RecvError, EOF, SocketClosedError] var value: Self.type @implicit @@ -98,11 +99,17 @@ struct SocketRecvError(Movable, Writable): fn __init__(out self, value: EOF): self.value = value + @implicit + fn __init__(out self, value: SocketClosedError): + self.value = value + fn write_to[W: Writer, //](self, mut writer: W): if self.value.isa[RecvError](): writer.write(self.value[RecvError]) elif self.value.isa[EOF](): writer.write("EOF") + elif self.value.isa[SocketClosedError](): + writer.write("SocketClosedError") fn isa[T: AnyType](self) -> Bool: return self.value.isa[T]() @@ -658,7 +665,10 @@ struct Socket[ Raises: RecvError: If reading data from the socket fails. EOF: If 0 bytes are received. + SocketClosedError: If the socket is already closed. """ + if self._closed: + raise SocketClosedError() var bytes_received: UInt var size = len(buffer) bytes_received = recv( From 5d3e401d3e6b3c140cf4d05ffb01a5a9ff6c34c2 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 29 Mar 2026 12:58:36 +0200 Subject: [PATCH 24/27] add json example server --- README.md | 29 ++++++++++++++++++++- examples/json_service/README.md | 18 +++++++++++++ examples/json_service/pixi.toml | 13 ++++++++++ examples/json_service/server.mojo | 34 +++++++++++++++++++++++++ lightbug_http/http/common_response.mojo | 5 ++++ test.mojo | 21 --------------- 6 files changed, 98 insertions(+), 22 deletions(-) create mode 100644 examples/json_service/README.md create mode 100644 examples/json_service/pixi.toml create mode 100644 examples/json_service/server.mojo delete mode 100644 test.mojo diff --git a/README.md b/README.md index 8e1d30ff..6382d0e3 100644 --- a/README.md +++ b/README.md @@ -151,6 +151,33 @@ struct ExampleRouter(HTTPService): We plan to add more advanced routing functionality in a future library called `lightbug_api`, see [Roadmap](#roadmap) for more details. +### JSON + +Use `json_decode[T]` to deserialize a request body into a typed struct, and `Json(value)` to return a JSON response: + +```mojo +from lightbug_http import OK, HTTPRequest, HTTPResponse, HTTPService +from lightbug_http.http.json import Json, json_decode + +@fieldwise_init +struct GreetRequest(Movable, Defaultable): + var name: String + fn __init__(out self): self.name = "" + +@fieldwise_init +struct GreetResponse(Movable, Defaultable): + var message: String + fn __init__(out self): self.message = "" + +@fieldwise_init +struct JsonService(HTTPService): + fn func(mut self, req: HTTPRequest) raises -> HTTPResponse: + var body = json_decode[GreetRequest](req) + return OK(Json(GreetResponse(String("Hello, ", body.name, "!")))) +``` + +JSON support is powered by [emberjson](https://github.com/bgreni/EmberJson). +

(back to top)

@@ -190,7 +217,7 @@ Check out the examples directory for more example services built with Lightbug, We're working on support for the following (contributors welcome!): - - [ ] [JSON support](https://github.com/saviorand/lightbug_http/issues/4) + - [x] [JSON support](https://github.com/saviorand/lightbug_http/issues/4) - [ ] Complete HTTP/1.x support compliant with RFC 9110/9112 specs (see issues) - [ ] [SSL/HTTPS support](https://github.com/saviorand/lightbug_http/issues/20) - [ ] [Multiple simultaneous connections](https://github.com/saviorand/lightbug_http/issues/5), [parallelization and performance optimizations](https://github.com/saviorand/lightbug_http/issues/6) diff --git a/examples/json_service/README.md b/examples/json_service/README.md new file mode 100644 index 00000000..93a5d19f --- /dev/null +++ b/examples/json_service/README.md @@ -0,0 +1,18 @@ +# JSON Service + +A simple JSON API example using `lightbug_http`. The server accepts a POST request with a JSON body and returns a JSON response. + +To run the server: + +```bash +pixi run server +``` + +Then send a request: + +```bash +curl -X POST http://localhost:8080/greet \ + -H "Content-Type: application/json" \ + -d '{"name": "Alice"}' +# {"message":"Hello, Alice!"} +``` diff --git a/examples/json_service/pixi.toml b/examples/json_service/pixi.toml new file mode 100644 index 00000000..9030aab6 --- /dev/null +++ b/examples/json_service/pixi.toml @@ -0,0 +1,13 @@ +[workspace] +channels = ["https://conda.modular.com/max", "https://repo.prefix.dev/modular-community", "https://repo.prefix.dev/mojo-community", "conda-forge"] +name = "json_service" +platforms = ["osx-arm64", "linux-64", "linux-aarch64"] +version = "0.1.0" +preview = ["pixi-build"] + +[tasks] +server = "mojo run server.mojo" + +[dependencies] +mojo = ">=0.26.1.0,<0.26.2.0" +lightbug_http = ">=0.26.1.2,<0.26.2.0" diff --git a/examples/json_service/server.mojo b/examples/json_service/server.mojo new file mode 100644 index 00000000..e4d4a2ac --- /dev/null +++ b/examples/json_service/server.mojo @@ -0,0 +1,34 @@ +from lightbug_http import OK, NotFound, HTTPRequest, HTTPResponse, HTTPService, Server +from lightbug_http.http.json import Json, json_decode + + +@fieldwise_init +struct GreetRequest(Movable, Defaultable): + var name: String + + fn __init__(out self): + self.name = "" + + +@fieldwise_init +struct GreetResponse(Movable, Defaultable): + var message: String + + fn __init__(out self): + self.message = "" + + +@fieldwise_init +struct JsonService(HTTPService): + fn func(mut self, req: HTTPRequest) raises -> HTTPResponse: + if req.uri.path == "/greet": + var body = json_decode[GreetRequest](req) + var response = GreetResponse(String("Hello, ", body.name, "!")) + return OK(Json(response)) + return NotFound(req.uri.path) + + +fn main() raises: + var server = Server() + var handler = JsonService() + server.listen_and_serve("localhost:8080", handler) diff --git a/lightbug_http/http/common_response.mojo b/lightbug_http/http/common_response.mojo index 81138ea9..8b1d87aa 100644 --- a/lightbug_http/http/common_response.mojo +++ b/lightbug_http/http/common_response.mojo @@ -1,6 +1,11 @@ +from lightbug_http.http.json import Json from lightbug_http.io.bytes import Bytes +fn OK(body: Json) -> HTTPResponse: + return HTTPResponse(body^) + + fn OK(body: String, content_type: String = "text/plain") -> HTTPResponse: return HTTPResponse( headers=Headers(Header(HeaderKey.CONTENT_TYPE, content_type)), diff --git a/test.mojo b/test.mojo deleted file mode 100644 index f4772830..00000000 --- a/test.mojo +++ /dev/null @@ -1,21 +0,0 @@ -from lightbug_http.http.json import Json, json_decode -from lightbug_http.http.response import HTTPResponse -from emberjson import deserialize - -@fieldwise_init -struct Message(Movable, Defaultable): - var message: String - - fn __init__(out self): - self.message = "" - -fn main() raises: - # Test serialization via Json wrapper - var msg = Message("Hello, World!") - var res = HTTPResponse(Json(msg)) - print("status:", res.status_code) - print("body:", String(res.get_body())) - - # Test deserialization - var parsed = deserialize[Message]('{"message": "from JSON"}') - print("deserialized:", parsed.message) \ No newline at end of file From c7c9052aa607e5cdffd460116c67796add1257df Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 29 Mar 2026 13:01:39 +0200 Subject: [PATCH 25/27] fix integration tests --- tests/integration/test_server.mojo | 4 ++-- tests/integration/test_socket.mojo | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/integration/test_server.mojo b/tests/integration/test_server.mojo index 9ced8dfa..a107f86d 100644 --- a/tests/integration/test_server.mojo +++ b/tests/integration/test_server.mojo @@ -1,5 +1,5 @@ -from testing import TestSuite +from std.testing import TestSuite -def main(): +def main() raises: TestSuite.discover_tests[__functions_in_module()]().run() diff --git a/tests/integration/test_socket.mojo b/tests/integration/test_socket.mojo index 9ced8dfa..a107f86d 100644 --- a/tests/integration/test_socket.mojo +++ b/tests/integration/test_socket.mojo @@ -1,5 +1,5 @@ -from testing import TestSuite +from std.testing import TestSuite -def main(): +def main() raises: TestSuite.discover_tests[__functions_in_module()]().run() From ae894fc72751c4a2545f317553489a97633006f6 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 29 Mar 2026 13:03:53 +0200 Subject: [PATCH 26/27] update versions --- README.md | 2 +- examples/echo_server/pixi.toml | 4 ++-- examples/json_service/pixi.toml | 4 ++-- recipes/recipe.yaml | 9 +++++---- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6382d0e3..4b9c2da5 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ Once you have a Mojo project set up locally, ```toml [dependencies] - lightbug_http = ">=0.26.1.2,<0.26.2" + lightbug_http = ">=0.26.2.0,<0.26.3" ``` 3. Run `pixi install` at the root of your project, where `pixi.toml` is located diff --git a/examples/echo_server/pixi.toml b/examples/echo_server/pixi.toml index 229147a9..f277d729 100644 --- a/examples/echo_server/pixi.toml +++ b/examples/echo_server/pixi.toml @@ -11,7 +11,7 @@ server = "mojo run server.mojo" client = "mojo run client.mojo" [dependencies] -mojo = ">=0.26.1.0,<0.26.2.0" +mojo = ">=0.26.2.0,<0.26.3" curl_wrapper = { git = "https://github.com/thatstoasty/mojo-curl.git", branch = "main", subdirectory = "shim" } floki = ">=0.1.0,<0.2" -lightbug_http = ">=0.26.1.2,<0.26.2.0" +lightbug_http = ">=0.26.2.0,<0.26.3" diff --git a/examples/json_service/pixi.toml b/examples/json_service/pixi.toml index 9030aab6..ea7dceb7 100644 --- a/examples/json_service/pixi.toml +++ b/examples/json_service/pixi.toml @@ -9,5 +9,5 @@ preview = ["pixi-build"] server = "mojo run server.mojo" [dependencies] -mojo = ">=0.26.1.0,<0.26.2.0" -lightbug_http = ">=0.26.1.2,<0.26.2.0" +mojo = ">=2.0,<0.26.3" +lightbug_http = ">=0.26.2.0,<0.26.3" diff --git a/recipes/recipe.yaml b/recipes/recipe.yaml index db7627a3..8f75ad3b 100644 --- a/recipes/recipe.yaml +++ b/recipes/recipe.yaml @@ -1,11 +1,11 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/prefix-dev/recipe-format/main/schema.json context: - version: "0.26.1.2" + version: "0.26.2.0" package: name: "lightbug_http" - version: 0.26.1.2 + version: 0.26.2.0 source: - path: ../lightbug_http @@ -18,8 +18,9 @@ build: requirements: run: - - max >=0.26.1.0,<0.26.2.0 - - small_time >=26.1.0,<26.2.0 + - max >=0.26.2.0,<0.26.3 + - small_time >=26.2.0,<26.3 + - emberjson >=0.3.1,<0.4 about: homepage: https://github.com/saviorand/lightbug_http From 5e67541e12404f4e4e3655a1c381a31d20218395 Mon Sep 17 00:00:00 2001 From: Val Date: Sun, 29 Mar 2026 13:28:43 +0200 Subject: [PATCH 27/27] fix more errors --- lightbug_http/address.mojo | 3 +-- lightbug_http/c/socket.mojo | 10 +++++----- lightbug_http/http/chunked.mojo | 2 +- lightbug_http/http/common_response.mojo | 2 +- lightbug_http/http/json.mojo | 4 ++-- lightbug_http/http/request.mojo | 2 +- lightbug_http/socket.mojo | 4 ++-- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/lightbug_http/address.mojo b/lightbug_http/address.mojo index a20c45e8..4141b546 100644 --- a/lightbug_http/address.mojo +++ b/lightbug_http/address.mojo @@ -357,8 +357,7 @@ fn get_ip_address( The IP address. """ - @parameter - if CompilationTarget.is_macos(): + comptime if CompilationTarget.is_macos(): var result: CAddrInfo[addrinfo_macos] var hints = addrinfo_macos( ai_flags=0, diff --git a/lightbug_http/c/socket.mojo b/lightbug_http/c/socket.mojo index 9ddfa006..196c495f 100644 --- a/lightbug_http/c/socket.mojo +++ b/lightbug_http/c/socket.mojo @@ -422,8 +422,8 @@ fn getsockopt( * Reference: https://man7.org/linux/man-pages/man3/getsockopt.3p.html . """ var option_value = stack_allocation[1, c_void]() - var option_len: socklen_t = size_of[Int]() - var result = _getsockopt(socket.value, level, option_name, option_value, Pointer(to=option_len)) + var option_len: socklen_t = socklen_t(size_of[Int]()) + var result = _getsockopt(Int32(socket.value), level, option_name, option_value, Pointer(to=option_len)) if result == -1: var errno = get_errno() if errno == errno.EBADF: @@ -889,7 +889,7 @@ fn connect(socket: FileDescriptor, mut address: SocketAddress) raises ConnectErr #### Notes: * Reference: https://man7.org/linux/man-pages/man3/connect.3p.html . """ - var result = _connect(socket.value, Pointer(to=address.as_sockaddr_in()), address.SIZE) + var result = _connect(Int32(socket.value), Pointer(to=address.as_sockaddr_in()), address.SIZE) if result == -1: var errno = get_errno() if errno == errno.EACCES: @@ -1098,7 +1098,7 @@ fn recvfrom[ """ var address_buffer_size = address.SIZE var result = _recvfrom( - socket.value, + Int32(socket.value), buffer.unsafe_ptr().bitcast[c_void](), length, flags, @@ -1340,7 +1340,7 @@ fn sendto[ """ var result = _sendto( - socket.value, + Int32(socket.value), message.unsafe_ptr().bitcast[c_void](), length, flags, diff --git a/lightbug_http/http/chunked.mojo b/lightbug_http/http/chunked.mojo index 3fde56b7..224f4d18 100644 --- a/lightbug_http/http/chunked.mojo +++ b/lightbug_http/http/chunked.mojo @@ -1,4 +1,4 @@ -import sys +import std.sys from std.sys import size_of from lightbug_http.io.bytes import Bytes diff --git a/lightbug_http/http/common_response.mojo b/lightbug_http/http/common_response.mojo index 8b1d87aa..250b43f4 100644 --- a/lightbug_http/http/common_response.mojo +++ b/lightbug_http/http/common_response.mojo @@ -2,7 +2,7 @@ from lightbug_http.http.json import Json from lightbug_http.io.bytes import Bytes -fn OK(body: Json) -> HTTPResponse: +fn OK(var body: Json) -> HTTPResponse: return HTTPResponse(body^) diff --git a/lightbug_http/http/json.mojo b/lightbug_http/http/json.mojo index bb2dc30d..8b363a86 100644 --- a/lightbug_http/http/json.mojo +++ b/lightbug_http/http/json.mojo @@ -3,7 +3,7 @@ from emberjson import ( deserialize, try_deserialize, serialize, - JSON, + Value, JsonSerializable, JsonDeserializable, ) @@ -19,7 +19,7 @@ struct Json: self._serialized = serialize(value) -fn json_decode(req: HTTPRequest) raises -> JSON: +fn json_decode(req: HTTPRequest) raises -> Value: """Parse the request body as untyped JSON. Args: diff --git a/lightbug_http/http/request.mojo b/lightbug_http/http/request.mojo index 2332d386..ae3728fd 100644 --- a/lightbug_http/http/request.mojo +++ b/lightbug_http/http/request.mojo @@ -246,7 +246,7 @@ struct HTTPRequest(Copyable, Encodable, Writable): and self.uri == other.uri and self.headers == other.headers and self.cookies == other.cookies - and self.body_raw.__str__() == other.body_raw.__str__() + and String(self.body_raw) == String(other.body_raw) ) fn __isnot__(self, other: HTTPRequest) -> Bool: diff --git a/lightbug_http/socket.mojo b/lightbug_http/socket.mojo index e71b8fa9..f064c347 100644 --- a/lightbug_http/socket.mojo +++ b/lightbug_http/socket.mojo @@ -828,9 +828,9 @@ struct Socket[ """ # SO_RCVTIMEO requires a timeval struct: {tv_sec: Int64, tv_usec: Int64} # (16 bytes on both macOS and Linux 64-bit). - var timeval: InlineArray[Int64, 2] = [seconds, 0] + var timeval: InlineArray[Int64, 2] = [Int64(seconds), 0] _ = _setsockopt( - self.fd.value, + Int32(self.fd.value), SOL_SOCKET, SocketOption.SO_RCVTIMEO.value, UnsafePointer(to=timeval).bitcast[c_void](),